PHP 5.4.0 Beta1 Performance!
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)
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
Schön zu sehen, dass neben neuen Features zusätzlich an einer Performancesteigerung gearbeitet wird.
Martin Kuckert
30 Sep 11 at 09:53
naja die Einsparung von 25 auf 22 Sekunden ist schon was anderes als von 8 auf 5 😉
Georg
30 Sep 11 at 10:13
@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
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
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
@Nils
I/O kannst Du eigentlich weitgehend vergessen, sofern Du APC oder einen anderen Bytecode Cache benutzt.
Oliver
30 Sep 11 at 18:59
@Oliver: IO schließt die Kommunikation mit einem DB-Server mit ein.
KingCrunch
8 Okt 11 at 22:58
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
[…] Ergebnisse sind im Blogpost PHP 5.4.0 Beta1 Performance! zusammengefasst und können sich dabei durchaus sehen lassen: Die insgesamt vier Tests des […]
PHP 5.4: Was steckt wirklich hinter den Performance-Steigerungen? - entwickler.de
28 Apr 15 at 16:15