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:

https://github.com/redhotpenguin/fredperl

12 Comments

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.

Also, only 5.8 (the system Perl, I guess) was built with threading enabled, which IIRC slows things down some.

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?

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."

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?

Leave a comment

About Phred

user-pic I blog about Perl and mod_perl.