[kramdown-users] Performance optimizations
Thomas Leitner
t_leitner at gmx.at
Thu Oct 28 04:05:06 EDT 2010
Hi everybody,
there was a major performance drop in the 0.11.0 version of kramdown
due to the preservation of the ordering of the element attributes.
I did some investigations and found that turning off the garbage
collector makes kramdown run much faster. So it seems that kramdown
creates too much objects and the garbage collector has to do too much.
After some tweaking the performance of the next release should be much
better again. Also, 15% less objects are created in comparison with the
0.11.0 release.
Here are some performance numbers for various kramdown versions on
different ruby versions. All benchmarks are run on an Intel Core i5
M520 with 4GB memory on Ubuntu 10.10 with 64bit. The data is generated
with the new `benchmark/benchmark.sh` script. You can reproduce the
data by cloning the git repository and running
bash benchmark/benchmark.sh -k "REL_0_1_0 REL_0_6_0 REL_0_9_0 REL_0_10_0 REL_0_11_0 master"
The generated data can be found in /tmp/kramdown-benchmark. By default
all tags and the master version are used for the kramdown versions if
not overridden with the `-k` option. The script uses rvm to switch
between ruby versions, so you need that too! You will also need gnuplot
so that the images can be generated.
jruby-1.5.0RC1
# REL_0_1_0 || REL_0_6_0 || REL_0_9_0 || REL_0_10_0 || REL_0_11_0 || master
1 0.23100 0.21300 0.24600 0.17700 0.18600 0.25500
2 0.15100 0.23300 0.21500 0.21300 0.24600 0.21600
4 0.17200 0.17400 0.19600 0.18700 0.33900 0.23600
8 0.29300 0.28600 0.31200 0.29600 0.37600 0.31800
16 0.37400 0.35600 0.52100 0.50500 0.42200 0.45600
32 0.59000 0.55700 0.59900 0.59900 0.70300 0.64900
ruby 1.8.5-p231
# REL_0_6_0 || REL_0_9_0 || REL_0_10_0 || REL_0_11_0 || master
1 0.01000 0.01051 0.01136 0.01195 0.01175
2 0.02109 0.02174 0.02119 0.02277 0.02039
4 0.03730 0.04732 0.04732 0.04573 0.04850
8 0.09734 0.08701 0.08335 0.11130 0.08702
16 0.18256 0.20505 0.19535 0.23545 0.20143
32 0.41248 0.44407 0.46074 0.49541 0.46472
ruby 1.8.6-p399
# REL_0_1_0 || REL_0_6_0 || REL_0_9_0 || REL_0_10_0 || REL_0_11_0 || master
1 0.01241 0.01014 0.01191 0.01134 0.01222 0.01117
2 0.01608 0.02513 0.02176 0.02733 0.02321 0.02155
4 0.03024 0.03929 0.04743 0.04753 0.04654 0.04751
8 0.06593 0.07937 0.08792 0.08623 0.09291 0.08353
16 0.13082 0.17244 0.19194 0.18539 0.22715 0.18366
32 0.27855 0.38740 0.42560 0.42649 0.47899 0.49377
ruby 1.8.7-p249
# REL_0_1_0 || REL_0_6_0 || REL_0_9_0 || REL_0_10_0 || REL_0_11_0 || master
1 0.00895 0.01051 0.01264 0.01274 0.01242 0.01141
2 0.01722 0.02107 0.02299 0.02229 0.02382 0.02318
4 0.03070 0.04586 0.04909 0.04872 0.04764 0.04919
8 0.06811 0.08272 0.09249 0.09098 0.11013 0.08745
16 0.16567 0.17962 0.19554 0.18920 0.22599 0.18849
32 0.28729 0.39177 0.53765 0.44901 0.49453 0.39598
ruby 1.8.7-p302
# REL_0_1_0 || REL_0_6_0 || REL_0_9_0 || REL_0_10_0 || REL_0_11_0 || master
1 0.00966 0.01171 0.01291 0.01286 0.01387 0.01261
2 0.01778 0.02483 0.02535 0.02476 0.03128 0.02728
4 0.03422 0.05098 0.05400 0.05377 0.05474 0.05435
8 0.07529 0.09204 0.09825 0.09899 0.12087 0.09575
16 0.18189 0.19847 0.21057 0.25462 0.24744 0.20743
32 0.31704 0.43067 0.51242 0.51385 0.53427 0.44922
ruby 1.9.2-p0
# REL_0_1_0 || REL_0_6_0 || REL_0_9_0 || REL_0_10_0 || REL_0_11_0 || master
1 0.01357 0.00870 0.00934 0.00935 0.01056 0.00968
2 0.02199 0.01758 0.01957 0.01947 0.02030 0.01938
4 0.04581 0.03701 0.04082 0.04215 0.04545 0.04122
8 0.09261 0.07473 0.08601 0.08608 0.08778 0.08847
16 0.18589 0.14448 0.15985 0.16125 0.18634 0.15448
32 0.38448 0.31029 0.35264 0.35203 0.37317 0.34102
-- Thomas
More information about the kramdown-users
mailing list