Perl 5.14.0 benchmarks and RPMS
I've been struggling for a while with the issues of deploying Perl applications in enterprise setups for in house Perl applications. So I rolled a couple of RPM spec files for 5.12.3 and 5.14.0 with the eventual goal of being able to deploy Perl applications on RPM based distributions (Fedora and Centos) without needing the system perl binaries to run the app.
I built a couple of RPMs and ran PerlBench on them, 5.14.0 has some nice results:
http://www.redhotpenguin.com/fredperl_bench/
I dubbed my effort 'fredperl' for lack of a better name. If you run Centos or Fedora and have been banging your head against maintenance issues with your app because you are using the system perl binary, I'd love your feedback on my initial effort here:
Hi,
Question about your build for Perl 5.12.3, you build this Perl with internal debugging via -DDEBUGGING which will take a big performance hit but the others don't seem to be built with that.
Ah, thanks for the spot! I was wondering about those performance differences, but didn't notice the DDEBUGGING flag for 5.12.3. I'll update it and run again.
Also, only 5.8 (the system Perl, I guess) was built with threading enabled, which IIRC slows things down some.
Yes, the benchmarks against the threaded system perl were intentional.
A little Emacs-Org-fu gives us this table, showing that 5.14 is on average 27% slower than 5.12:
| | 5.12 | 5.14 | 5.14/5.12 |
|----------------------+------+------+-----------|
| arith/mixed | 76 | 101 | 1.33 |
| arith/trig | 78 | 106 | 1.36 |
| array/copy | 103 | 116 | 1.13 |
| array/foreach | 88 | 100 | 1.14 |
| array/index | 76 | 96 | 1.26 |
| array/pop | 95 | 108 | 1.14 |
| array/shift | 99 | 116 | 1.17 |
| array/sort-num | 69 | 85 | 1.23 |
| array/sort | 70 | 81 | 1.16 |
| call/0arg | 86 | 103 | 1.20 |
| call/1arg | 88 | 100 | 1.14 |
| call/2arg | 86 | 105 | 1.22 |
| call/9arg | 73 | 105 | 1.44 |
| call/empty | 87 | 99 | 1.14 |
| call/fib | 92 | 115 | 1.25 |
| call/method | 87 | 112 | 1.29 |
| call/wantarray | 83 | 119 | 1.43 |
| hash/copy | 112 | 122 | 1.09 |
| hash/each | 76 | 102 | 1.34 |
| hash/foreach-sort | 97 | 100 | 1.03 |
| hash/foreach | 97 | 100 | 1.03 |
| hash/get | 98 | 113 | 1.15 |
| hash/set | 86 | 100 | 1.16 |
| loop/for-c | 90 | 116 | 1.29 |
| loop/for-range-const | 62 | 96 | 1.55 |
| loop/for-range | 63 | 98 | 1.56 |
| loop/getline | 87 | 99 | 1.14 |
| loop/while-my | 50 | 74 | 1.48 |
| loop/while | 67 | 98 | 1.46 |
| re/const | 88 | 96 | 1.09 |
| re/w | 79 | 84 | 1.06 |
| startup/fewmod | 117 | 136 | 1.16 |
| startup/lotsofsub | 90 | 101 | 1.12 |
| startup/noprog | 79 | 81 | 1.03 |
| string/base64 | 81 | 105 | 1.30 |
| string/htmlparser | 31 | 91 | 2.94 |
| string/index-const | 86 | 111 | 1.29 |
| string/index-var | 96 | 120 | 1.25 |
| string/ipol | 66 | 100 | 1.52 |
| string/tr | 99 | 94 | 0.95 |
|----------------------+------+------+-----------|
| MEAN | | | 1.27 |
| STD DEV | | | 0.31 |
(Sorry if the formatting comes out ugly, but the stupid comment system, while claiming "You may use HTML tags for style," apparently only supports a subset of those tags, and doesn't tell you which.)
Higher numbers are better, so 5.14 without DEBUGGING is 1.27 times better than 5.12 with DEBUGGING.
What's the use of comparing apple and oranges?
@stevenharyanto what, are you saying I should have benchmarked 5.14 vs 5.14?
I was commenting chorny's statement (emphasis added): "Higher numbers are better, so 5.14 without DEBUGGING is 1.27 times better than 5.12 with DEBUGGING."
Ah, sorry for my snarky comment there. DEBUGGING was built without specifying that flag for some reason, so I'm still working on building an rpm without it. I'll post another set of benchmarks with my updated rpm.
DEBUGGING is the typical redhat/fedora/centos problem they have since 5.10, because they add -g to ccflags and not to optimize.
-g in ccflags turns on DEBUGGING.
Hm. Your "fredperl" github repository seems to have evaporated. What happened to it?