PHPGangsta - Der praktische PHP Blog

PHP Blog von PHPGangsta


PHP 5.4.0 Beta1 Performance!

with 10 comments

Ich bin zufällig auf eine Präsentation über die kommende PHP 5.4.0 Version gestossen, mit einer Liste aller entfernten Features, neuer Features, aber auch interessanten Performance- und Speicherverbrauchdaten. Informationen über Features sind ja schon etwas länger bekannt, und im Changelog findet man auch viele Informationen, aber ehrlich gesagt konnte ich es nicht glauben was da bei den Performance-Tests steht, das mußte ich selbst ausprobieren.

Hier Beispiel 1 aus der Präsentation:

/php537/php micro_bench.php
    Max memory usage 1048576 bytes.
    Running 27.608 s.

/php540/php micro_bench.php
    Max memory usage 524288 bytes.
    Running 13.254 s.

Hier Beispiel 2 aus der Präsentation:

/php537/php NewObjectClassTest.php
   Running 0.20629 s , 640616 bytes.
/php537/php StaticClassTest.php
   Running 0.35047 s, 640616 bytes.

/php540/php NewObjectClassTest.php
   Running 0.12018 s, 227808 bytes.
/php540/php StaticClassTest.php
   Running 0.10803 s, 227880 bytes.

Hier Beispiel 3 aus der Präsentation:

for ($count = 0; $count < 10000000; $count++) {
    $result = 100 + 100 - 100 * 100 / 100;
}

/php537/php mathTest.php
    Running 1.75259 s, 632176 bytes.

/php540/php mathTest.php
    Running 1.06825 s, 223208 bytes.

Das sind unglaubliche Werte, die wahrscheinlich nur erreicht werden können wenn man speziell einige Funktionen nutzt die verbessert wurden. Teilweise bis zu 75% Memory-Ersparnis und bis zu dreifacher Ausführungsgeschwindigkeit. In „normalen“ Scripten dürfte die Performancesteigerung nicht so groß sein, oder?

Prüfen wir die Behauptung mal mit einem kleinen Benchmark-Script nach. Es ist sicherlich nicht sehr realitätsnah, aber immerhin besser als die spezialisierten Scripte von da oben. Ich habe mir das Script von php-benchmark-script.com heruntergeladen und dann 2 frische PHP Versionen kompiliert:

wget http://de3.php.net/get/php-5.3.8.tar.gz/from/de.php.net/mirror
tar -xzvf php-5.3.8.tar.gz
cd php-5.3.8
./configure --prefix=/usr/local/php5.3.8 --with-zlib --with-config-file-path=/usr/local/php5.3.8/etc --enable-mbstring --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-zip --with-imap --with-kerberos --with-imap-ssl --with-openssl --with-jpeg-dir --with-gd --with-gettext --with-freetype-dir --enable-pcntl --enable-ftp
make
sapi/cli/php -v
wget http://downloads.php.net/stas/php-5.4.0beta1.tar.gz
tar -xzvf php-5.4.0beta1.tar.gz
cd php-5.4.0beta1
./configure --prefix=/usr/local/php5.4.0beta1 --with-zlib --with-config-file-path=/usr/local/php5.4.0beta1/etc --enable-mbstring --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-zip --with-imap --with-kerberos --with-imap-ssl --with-openssl --with-jpeg-dir --with-gd --with-gettext --with-freetype-dir --enable-pcntl --enable-ftp
make
sapi/cli/php -v

und dann jeweils die bench.php ausgeführt. Hier die Ergebnisse:

PHP 5.3.8

sapi/cli/php /tmp/bench.php
--------------------------------------
|        PHP BENCHMARK SCRIPT        |
--------------------------------------
Start : 2011-09-29 17:52:30
Server : @
PHP version : 5.3.8
Platform : Linux
--------------------------------------
test_math                 : 5.281 sec.
test_stringmanipulation   : 6.455 sec.
test_loops                : 8.263 sec.
test_ifelse               : 4.988 sec.
--------------------------------------
Total time:               : 24.987 sec.

PHP 5.4.0beta1

sapi/cli/php /tmp/bench.php
--------------------------------------
|        PHP BENCHMARK SCRIPT        |
--------------------------------------
Start : 2011-09-29 18:21:47
Server : @
PHP version : 5.4.0beta1
Platform : Linux
--------------------------------------
test_math                 : 5.345 sec.
test_stringmanipulation   : 5.818 sec.
test_loops                : 6.865 sec.
test_ifelse               : 4.129 sec.
--------------------------------------
Total time:               : 22.157 sec.

Nach jeweils 3 Durchgängen, die alle ein ähnliches Ergebnis hatten (22 Sekunden zu 25 Sekunden), ist nun also klar: Von dreifacher Performance kann man nicht reden, aber >10% sind durchaus drin. Wäre natürlich interessant noch andere Tests zu sehen, die etwas realitätsnaher sind, und nicht von Datenbanken, Netzwerk oder ähnlichem beeinflusst werden. Ich habe gerade keins parat.

(PS: Die Werte hier stammen von einem VServer. Auf „richtiger“ Hardware erhält man Laufzeiten zwischen 5 und 8 Sekunden. Dem relativen Vergleich tut das aber keinen Abbruch)

Written by Michael Kliewe

September 30th, 2011 at 9:27 am

Posted in PHP

Tagged with , , ,

10 Responses to 'PHP 5.4.0 Beta1 Performance!'

Subscribe to comments with RSS or TrackBack to 'PHP 5.4.0 Beta1 Performance!'.

  1. Und es sind nur CPU-lastige Tests, was man auch bedenken muss. Die meisten PHP-Apps sind eher IO-lastig.

    Nils

    30 Sep 11 at 09:36

  2. Schön zu sehen, dass neben neuen Features zusätzlich an einer Performancesteigerung gearbeitet wird.

    Martin Kuckert

    30 Sep 11 at 09:53

  3. naja die Einsparung von 25 auf 22 Sekunden ist schon was anderes als von 8 auf 5 😉

    Georg

    30 Sep 11 at 10:13

  4. @Georg: Das („zwischen 5 und 8 Sekunden“) waren nur alte Beispiele als ich das Script hab laufen lassen, ich weiß garnicht mit welchen PHP Versionen. 8 Sekunden und 5 Sekunden sind nicht die Werte gewesen die ich beim Vergleich PHP 5.3.8 und 5.4.0 erhalten habe. Wollte das nur schreiben damit ihr euch nicht wundert warum ich >20Sek Werte habe 😉
    So oder so geht es um 10-30% und nicht 300% 😉

    Michael Kliewe

    30 Sep 11 at 10:22

  5. Für IO-Latenzen kann aber keine Programmiersprache verantwortlich gemacht werden. Die sollten man dann doch versuchen komplett raus zu halten, wenn mman die reine Leistungssteigerung messen will

    KingCrunch

    30 Sep 11 at 11:59

  6. Ich habe den Test mal auf meinem System ausprobiert (OpenSuse 11.4):

    5.3.8: ~5.1sec

    5.4.0beta1: ~4.3sec

    kommt also auch auf ca. 10-30%.

    Christoph Rosse

    30 Sep 11 at 13:18

  7. @Nils
    I/O kannst Du eigentlich weitgehend vergessen, sofern Du APC oder einen anderen Bytecode Cache benutzt.

    Oliver

    30 Sep 11 at 18:59

  8. @Oliver: IO schließt die Kommunikation mit einem DB-Server mit ein.

    KingCrunch

    8 Okt 11 at 22:58

  9. Wenn jemand noch Zeit hat, kann er das Script PhpSpeed in PHP5.3 und PHP5.4 testen.

    Weil der Admin die offizielle Seite nicht mehr pflegt, habe ich das Projekt auf GitHub umgezogen: https://github.com/SimonSimCity/PhpSpeed

    Simon Schick

    26 Okt 11 at 12:24

  10. […] Ergebnisse sind im Blogpost PHP 5.4.0 Beta1 Performance! zusammengefasst und können sich dabei durchaus sehen lassen: Die insgesamt vier Tests des […]

Leave a Reply

You can add images to your comment by clicking here.