Aller au contenu | Aller au menu | Aller à la recherche

lundi 20 juillet 2009

Bench PHP 5.2 vs PHP 5.3

Avec la sortie de PHP 5.3 et l’apparition de nouvelles fonctionnalités, une question est fréquemment posée : qu’est-ce que vaut PHP 5.3 au niveau des performances ? Est-ce que toutes ces nouveautés ne vont pas avoir d’impact négatif ?[1]

Voila plus d’un an que PHP 5.3 est annoncée comme plus rapide que PHP 5.2 (Cf ce post sur internals@, par exemple) ; j’avais moi-même effectué quelques benchmarks synthétiques, dont j’avais posté les résultats en novembre dernier.

Mais ces tests, qui montraient un gain de performance de 10 à 20% pour PHP 5.3 par rapport à PHP 5.2, n’avaient pas été joués avec la version finale de PHP 5.3.0, d’une part, et ne testaient que des fonctions internes de PHP — pas une véritable application.

Voici donc quelques résultats obtenus avec des « vraies » applications, comportant de nombreux fichiers, des appels à une Base de Données, …
… En somme, des applications du genre de celles que nous sommes susceptibles d’utiliser tous les jours sur nos serveurs !

Sommaire de cet article :


Méthodologie

Si vous voulez aller directement aux résultats

Logiciels testés

J’ai effectué mes tests avec trois logiciels, en installation « de base », sans ajouter de plugin ni quoi que ce soit :


Versions de PHP testées

Pour ces tests, j’ai utilisé deux versions de PHP, toutes deux compilées par moi-même, avec les mêmes options de configuration.
Ces deux versions de PHP sont chargées en tant que module Apache, via deux instances différentes d’Apache[2] :

  • PHP 5.2.9, avec Apache écoutant sur les ports 529**
  • Et PHP 5.3.0, avec Apache écoutant sur les ports 530**

Les options de compilation et de configuration ne sont certainement pas optimales : à peu de chose près, j’ai conservé toutes les valeurs par défaut ; mais, considérant que je n’ai tunné ni la première installation, ni la seconde, la comparaison devrait ne pas être « trop faussée ».

Les sorties de phpinfo() sont disponibles ici, si vous voulez en savoir plus :

(Ces sorties de phpinfo() ont été enregistrées alors que j’avais activé l’extension APC)


Deux séries de tests

Les trois applications ont été testées une première fois sans que l’extension APC ne soit activée.

Les mêmes tests ont ensuite été rejoués avec l’extension APC activée.


Méthodologie

Les trois applications ont été testées en utilisant l’outil ab, avec les options suivantes, qui me semblent raisonnables pour ma machine de tests :

  • concurrence = 10
  • nombre d’occurrences = 1000

Le test est lancé une première fois sur l’instance en PHP 5.2.9, puis sur l’instance en PHP 5.3.0.
Ceci est répété 10 fois de suite (on a donc un test sur PHP 5.2.9, puis un test sur 5.3.0, puis un test sur 5.2.9, puis sur 5.3.0, etc…)

J’ai ensuite calculé la moyenne des 10 séries de test pour PHP 5.2.9 et pour PHP 5.3.0 ; c’est cette moyenne qui me sert de résultat pour comparer les deux versions.

Et voici quelques éléments de la machine de tests :

  • CPU Core 2 Quad 9550 ; les quatre cœurs étaient utilisés à 100% pendant l’exécution des tests
  • 6 GB de RAM ; Il restait en permanence de la RAM libre pendant l’exécution des tests
  • Les binaires d’Apache, PHP, et les scripts testés sont sur un disque dur 10k rpm
  • Et l’OS est un Linux Ubuntu 64 bits.


Résultats obtenus sans APC

Pour commencer, voici les résultats obtenus pour chacun des trois logiciels testés, sans APC :

Wordpress

  • PHP 5.2.9 : 33.26 requêtes / seconde
  • PHP 5.3.0 : 41.54 requêtes / seconde
  • Différence : 124.91 %

php-5.2-vs-php-5.3-wordpress-1.png

Pour ce graphique, comme pour tous les autres présentés dans cet article, plus la barre correspondant à une version de PHP est haute, plus cette version de PHP est capable de répondre à un nombre élevé de requêtes par seconde — mieux c’est niveau performances, donc.

Drupal

  • PHP 5.2.9 : 51.33 requêtes / seconde
  • PHP 5.3.0 : 63.58 requêtes / seconde
  • Différence : 123.87 %

php-5.2-vs-php-5.3-drupal-1.png

Quickstart Zend Framework

  • PHP 5.2.9 : 77.28 requêtes / seconde
  • PHP 5.3.0 : 97.79 requêtes / seconde
  • Différence : 126.54 %

php-5.2-vs-php-5.3-zf-quickstart-1.png


Résultats obtenus avec APC

Et maintenant, les résultats des mêmes tests, en ayant activé l’extension APC (aucune option de configuration n’a été définie dans le fichier php.ini ; toutes les valeurs de configuration sont donc celles par défaut — même si ce n’est pas optimal).

Wordpress

  • PHP 5.2.9 : 128.66 requêtes / seconde
  • PHP 5.3.0 : 139.38 requêtes / seconde
  • Différence : 108.33 %

php-5.2-vs-php-5.3-wordpress-apc-1.png

Drupal

  • PHP 5.2.9 : 207.79 requêtes / seconde
  • PHP 5.3.0 : 212.84 requêtes / seconde
  • Différence : 102.43 %

php-5.2-vs-php-5.3-drupal-apc-1.png

Quickstart Zend Framework

  • PHP 5.2.9 : 297.87 requêtes / seconde
  • PHP 5.3.0 : 290.91 requêtes / seconde
  • Différence : 97.66 %

php-5.2-vs-php-5.3-zf-quickstart-apc-1.png


Conclusion

Pour conclure, voici quelques mots — sans trop réfléchir non plus : c’est aussi à vous d’interprêter ces résultats et de voir en quoi est-ce qu’ils peuvent être intéressants dans votre situation !

PHP 5.3 : gain de performances !

Comme conclusion, je ferai volontairement simple : sur ces quelques tests d’applications « réelles », sur une installation PHP « standard », PHP 5.3.0 s’en sort nettement mieux que PHP 5.2.x : environ 25 % de requêtes par seconde supplémentaires !

Une fois l’extension APC activée, le gain est nettement moins visible : seulement quelques pourcents, voire même une légère perte dans un cas :-(
Cela dit, on voit encore une fois l’intérêt d’activer APC, à partir du moment où vous êtes libre d’installer des extensions sur votre hébergement : sur ces tests, un très rapide calcul montre que vous répondez à environ trois fois plus de requêtes par seconde avec APC que sans !

A quoi est dû ce gain ? Je n’entrerai pas dans les détails[3], mais il y a fort à parier que les quelques optimisations citées ici n’y sont pas pour rien :

  • Déplacement des constantes vers des zones mémoire en lecture-seule
  • Amélioration du gestionnaire d’exceptions : il est maintenant plus simple, et tient sur moins de code.
  • Suppression d’appels système à « fopen » pour les inclusions de fichiers via require_once et include_once, résultant en une amélioration de la rapidité de ces deux directives.
  • Refactoring de la pile d’appels
  • Utilisation de gcc4 pour la compilation.

Pour plus d’informations, n’hésitez pas à consulter le changelog de PHP 5.3.0.


Quel intérêt ?

J’en entends déjà certains se demander Mais quel intérêt pour mon application ? Et quid du coût probable de migration de PHP 5.2 vers 5.3 ?

Et bien, pour votre application toute seule, l’intérêt, c’est vous le mieux placé pour le déterminer ; mais pensez à ceci : 20% de gain CPU, si vous avez 10 serveurs faisant tourner du PHP, ça peut signifier que deux de ces serveurs pourraient être utilisés pour autre chose… A vous de voir l’économie que cela peut signifier[4] ;-)

Après, oui, rendre votre application compatible PHP 5.3, et la re-tester, peut prendre du temps, et représenter un coût non négligeable — mais pour les futures applications que vous allez développer, qu’en est-il ? Pourquoi ne pas partir sur PHP 5.3 dès la phase de développement ?


Disclaimer

A noter tout de même : de manière générale, un serveur faisant tourner PHP aura aussi tendance à servir des fichiers statiques (JS, CSS, images, …), ce qui peut avoir un impact sur sa charge, indépendamment de PHP — et les tests présentés ici ne prennaient en compte que le chargement de la page PHP.

A noter aussi : les tests réalisés ici ne testaient qu’une seule page de chaque application, et non chaque application dans sa globalité. Avant de vous lancer dans une — possiblement coûteuse — migration compléte d’application, il peut être intéressant de jouer des tests un peu plus approfondis !


Aller plus loin ? D’autres tests ?

Si vous effectuez d’autres benchmarks de ce type, ou plus poussés, je suis extrêmement intéressé ! N’hésitez pas à laisser un commentaire ;-)

En attendant, vous pouvez jeter un coup d’oeil sur ces deux benchmarks d’eZPublish, effectués il y a quelques semaines :

Les gains de performance constatés sont du même type que ceux que j’obtiens dans cet article ; et ce, que ce soit sous Linux ou sous Windows, ce qui est une excellente nouvelle !


Au passage, vous trouverez joint à cet article le fichier .ods que j’ai contruit, regroupant tous les résultats obtenus (et pas seulement les moyennes présentées ici).


Notes

[1] D’aucun diraient que ça fait deux questions, et pas une ; mais elles sont liées, donc bon…

[2] Il faudrait, un jour, que je rédige un article expliquant comment installer plusieurs versions de PHP sur une seule machine, d’ailleurs… ça fait plus d’un an que j’ai les notes nécessaires… il faut "juste" que je trouve le temps de rédiger…

[3] Détails que je ne connais pas en détails, d’ailleurs ^^

[4] OK, si vous en arrivez à calculer quelles économies vous pourriez réaliser de cette manière, changer de version de PHP n’est pas la seule chose à laquelle vous penserez : passer à un autre serveur (nginx, par exemple), ou installer un reverse proxy (varnish, par exemple) peuvent être deux bonnes idées)

mardi 30 juin 2009

Sortie de PHP 5.3.0 stable ; ça y est !

Cela fait maintenant plus d’un an que je travaille souvent sous PHP 5.3[1] : j’ai commencé par des snapshots extraits du CVS, puis des versions alpha, puis plusieurs RC…

Aujourd’hui, mardi 30 juin 2009, est le jour de la sortie de PHP 5.3.0 !
Pour le téléchargement, c’est par ici : Télécharger PHP 5.3.0
Et pour le téléchargement pour windows : Télécharger PHP 5.3.0 pour windows

Et pour l’annonce officielle : PHP 5.3.0 Released!

J’en ai parlé longuement il y a quelques mois de cela : PHP 5.3 apporte une grande quantité de nouveautés (espaces de nom, facilitation de l’internationalisation, améliorations au niveau de tout ce qui est « static », fonctions anonymes et closures, nouvelles classes ajoutées à la SPL, extension Phar, goto[2], …), en limitant théoriquement les risques de casser vos applications existantes.


Pour plus de détails, n’hésitez pas à vous reporter à l’article PHP 5.3 : Nouveautés : Introduction et Sommaire, posté en octobre 2008 sur ce blog, qui pointe lui-même sur une vingtaine d’articles détaillant chacun une des nouveautés de cette version !

Et si vous voulez plus d’informations, vous pouvez, à tout hasard, jeter un coup d’œil aux quelques liens suivants :


La question qui se pose, maintenant, est « faut-il passer à PHP 5.3 tout de suite ? »

La réponse n’est pas évidente :

  • PHP 5.3 amène un grand nombre de fonctionnalités extrêmement intéressantes,
  • Mais PHP 5.3 ne sera pas déployé tout de suite chez la plus grande partie des hébergeurs,
    • Que ce soit pour les hébergeurs « grand-public »,
    • Ou même pour les hébergeurs « pro ».
  • Une nouvelle version aussi importante que celle-ci apporte forcément des risques,
    • Que ce soit de nouveaux bugs,
    • Ou des difficultés de migration.

En somme, comment choisir ?
Pour ma part, voici ce que je me dis[3] :

  • Si j’ai une application existante en PHP 5.2 qui fonctionne, quel intérêt à la passer en 5.3 ?
    • Pour une application grand public déjà existante, nécessiter PHP 5.3, actuellement peu répandu, est risqué.
    • Pour une application pro, en ces temps de difficultés économiques, est-ce que la migration ne risque pas de couter trop cher, tout en n’apportant que peu ?
  • Mais pour un projet qui commencerait dans les prochains mois, et qui ne sortirait pas en version "stable" avant quelque chose comme un an… là, la question se pose vraiment : est-ce qu’il ne serait pas intéressant de travailler en PHP 5.3 ?
    • A mes yeux, dans ce contexte, la réponse est oui, il faut travailler en PHP 5.3
    • Et je ne suis pas le seul à me faire cette réflexion — par exemple, une partie des « gros » frameworks partent sur PHP 5.3 pour leur prochaine version majeure ;-)

Et pour vous ? PHP 5.3, ou pas PHP 5.3 ? Et pourquoi ?



Note : je n’ai pas l’habitude de poster pour annoncer des nouvelles versions de logiciels, et cet article n’est pas annonciateur d’une série d’autres posts de ce type : d’autres bloggueurs le font déjà sur Planete PHP fr.
Mais, vu le nombre de posts que j’ai publié à propos de php-5.3, je ne pouvais pas ne pas poster cette annonce ^^

Notes

[1] Et que je souffre parfois, sous certaines applications qui n’ont pas encore été mises à jour :-(

[2] Et son Velociraptor

[3] il s’agit de quelques réflexions « perso », un peu sur le vif, avec lesquelles je ne serai plus forcément d’accord dans quelques semaines / mois, lorsque cette nouvelle version commencera à se répandre !

jeudi 4 juin 2009

SpiderMonkey : Exécuter du Javascript côté serveur, depuis PHP

SpiderMonkey est le moteur Javascript utilisé par Mozilla Firefox ; cet article va nous montrer comment utiliser l’extension PHP SpiderMonkey — encore expérimentale — pour exécuter du Javascript côté serveur, depuis PHP.

Sommaire de cet article :

Lire la suite...

jeudi 11 décembre 2008

Slides de la conférence "PHP 5.3 : les nouveautés du futur si proche" au forum PHP Paris 2008

Suite aux articles que j’ai publié sur ce blog ces deux derniers mois, j’ai animé mardi 9 décembre une session à propos des nouveautés de PHP 5.3 au Forum PHP Paris 2008 organisé par l’AFUP.

Voici les slides de cette session :


Et pour entrer plus en profondeur dans les détails, n’hésitez pas à vous référer aux articles traitant des nouveautés de PHP 5.3 ;-)

Quelques liens utiles pour en savoir plus sur le Forum PHP Paris 2008 :

Les photos devraient suivre d’ici quelques jours, de même que les vidéos : toutes les conférences ont été filmées, en vue d’être visionnables librement par ceux d’entre vous qui n’avaient pas pu se rendre au forum !
Suivez le site de l’AFUP ;-)


Et pour finir : vous êtes plusieurs à être revenus vers moi à propos de cette conférence, que ce soit pour discuter plus en détails de certains points, pour m’avoir félicité ou remercié, ou même pour m’avoir fait remarquer quelques points qui laissaient à désirer.
Merci à tous pour ces retours dont je prends bien évidemment note — en particulier ceux à propos de points améliorables !


jeudi 27 novembre 2008

PHP 5.3 : Conclusion

Après un mois et demi d’articles sur PHP 5.3, et à peu de choses près une trentaine de nouveautés, voici le trentième et dernier article de cette série…

Forum PHP Paris 2008

Pour commencer[1], l’AFUP m’a proposé d’animer une session à propos des Nouveautés de PHP 5.3 au Forum PHP Paris 2008 :

Forum PHP Paris 2008 les 8 et 9 décembre : j'y serai !

J’ai accepté !

Donc rendez-vous mardi 9 décembre, en fin de matinée !


A propos de PHP 5.3 et de sa sortie

La prochaine étape pour PHP 5.3 est la sortie de la version alpha3, qui a été régulièrement repoussée depuis quelques mois, en particulier à cause des problématiques rencontrées autour de l’implémentation des espaces de noms, qui ont entrainé quantité de discussions…

La date actuellement prévue pour la sortie de cette troisième version alpha est le 2 décembre 2008.

La sortie de cette dernière alpha doit marquer la fin d’ajouts de fonctionnalités à PHP 5.3. Elle devrait être suivie d’au minimum deux versions Beta, et de quelque chose comme entre deux et quatre versions Release Candidate

Quant à la sortie en version « finale / stable », aucune date n’est actuellement définie… Peut-être au premier trimestre 2009, mais ce n’est même pas certain… Quoi qu’il en soit, PHP 5.3 sortira quand elle sera prête !


A propos de cette série d’articles

J’étudie les nouveautés de PHP 5.3 depuis une conférence que Damien Seguy est venu donner à Lyon début avril 2008 à propos des nouveautés de PHP 5.3 et de PHP 6 ; merci à lui et à l’AFUP, donc, sans qui cette série d’articles ne serait probablement pas ce qu’elle est !

Voila donc plus d’une demie-année que j’ai commencé à mettre en place des exemples pour tester les nouveautés de cette future version… Ce qui m’a permis de voir dans PHP 5.3 tellement de nouveautés intéressantes que je me suis dit qu’il était impossible qu’elles n’intéressent que moi !

Le résultat ? 30 articles — quelque chose comme 210 pages de texte brut[2] à propos de quelque chose comme 25 nouveautés ; certaines tout à fait mineures, et d’autres plus impactantes ; certaines qui faciliteront sans aucun doute notre travail quotidien, et d’autres qui, mal utilisées, pourraient fort bien nous complexifier les tâches de maintenance applicative…


Développer en PHP 5.3 ?

Après plusieurs semaines à parler de nouveautés, d’évolutions, d’améliorations, de fonctionnalités facilitant les développements, je n’ai pour ainsi dire qu’une envie : développer en PHP 5.3 pour profiter de tous ces points !

J’espère d’ailleurs avoir réussi à vous faire suffisament envie pour ne pas être le seul ;-)


Bien entendu, ce n’est pas demain que cette nouvelle version de PHP 5.3 sera suffisamment largement déployée, que ce soit en hébergement « grand public » ou dans un contexte « professionnel », pour nous permettre de développer nos applications en profitant pleinement de ses nouveautés, ce qui implique perdre la compatibilité avec PHP <= 5.2.x…

Compter sur quelque chose comme un délai de un an pour laisser à PHP 5.3 le temps de se répandre un peu me semble raisonnable… Vivement 2010, donc !


Pour ce qui est de la migration PHP 5.1 ou PHP 5.2 vers PHP 5.3, elle est censée se faire relativement facilement : seul le numéro de version mineur change, ce qui indique que la compatibilité entre PHP 5.3 et les versions précédentes de la branche 5.x est censée être bonne : en pratique, quelques classes ont été ajoutées, et quelques fonctionnalités modifiées, mais la majeure partie des améliorations ne devrait pas avoir d’impact (majeur, du moins…) sur votre code existant — ni sur vos applications, donc.

Pour plus d’informations à ce sujet, n’hésitez pas à consulter PHP 5.3 upgrading notes, d’ailleurs !


Par contre, si vous développez encore en PHP 4, ou que vous maintenez des applications écrites en PHP 4, n’oubliez pas que PHP 4 n’est plus maintenu !
Il est donc plus que temps de passer à PHP 5 — 5.2 pour l’instant… Et peut-être 5.3 d’ici quelques mois ? ;-)


Suivez l’actualité PHP !

Si l’actualité PHP vous intéresse, si ce langage vous passionne, et si vous êtes prêt à passer du temps en veille techno, n’hésitez pas à faire un tour régulier sur les blogs et sites d’actualités parlant de PHP ;-)

Une des solutions les plus simples pour cela est de vous abonner aux flux RSS de Planete PHP FR, pour les actualités en français, et à celui de Planet PHP, si vous êtes à l’aise en anglais, pour les actualités « internationales » !


Vous pouvez aussi, bien entendu, vous abonner au flux RSS de ce blog — même si je vais me calmer sur le rythme de publication, et recommencer à parler d’autres points que de PHP 5.3 ^^
J’ai notamment quelques articles en cours d’étude autour de Google Maps et Google Gears, plus orientés Javascript, donc… Et je meurs d’envie d’avoir à nouveau un peu plus de temps pour travailler sur d’autres projets, indépendants de ce blog, que j’ai un peu trop mis de côté ces dernières semaines !


Merci à tous ;-)

Et enfin, pour terminer : Merci à vous tous pour vos commentaires, vos remarques, et vos encouragements !

Et ceci s’adresse à la fois aux lecteurs de ce blog, à vous que je ne connais que par Internet, et aux développeurs PHP que j’ai l’occasion de croiser « IRL », en particulier en contexte professionnel !


Notes

[1] Vous êtes probablement déjà au courant si vous suivez un peu la blogosphère PHP francophone, d’ailleurs

[2] si j’importe sous OpenOffice le source au format Dotclear de ces articles, sans les images, donc

mercredi 26 novembre 2008

PHP 5.3 : Ce qui n'est pas pour tout de suite... Peut-être pour plus tard ?

Avant de terminer cette série d’articles sur les nouveautés de PHP 5.3, je me suis dit qu’il pourrait être « marrant / intéressant » de parler de quelques points qui ont été évoqués pendant le développement de cette nouvelle version, et qui n’ont finalement pas été retenus… Ainsi que de jeter un très bref coup d’oeil à ce que pourrait nous réserver l’avenir.

Sommaire :

Lire la suite...

mardi 25 novembre 2008

PHP 5.3 : namespace : les espaces de noms (partie 2)

Voici la seconde partie de cet article traitant des namespaces, une des grosses nouveautés de PHP 5.3 — la première partie ayant été publiée hier, lundi 24 novembre 2008.

Nous avons vu hier comment déclarer des espaces de noms, et les utiliser pour regrouper des fonctions, des classes, et des constantes… Voici venu le moment de passer à la suite :

Sommaire de cette seconde partie :

Lire la suite...

lundi 24 novembre 2008

PHP 5.3 : namespace : les espaces de noms (partie 1)

Les « Espaces de noms », ou « namespaces », sont probablement une des fonctionnalités les plus attendues de PHP 5.3… Et sans le moindre doute celle qui a fait couler le plus d’encre et de pixels !

Pour éviter que cet article ne soit trop long, je l’ai découpé en deux parties : une que je publie aujourd’hui (lundi 24/11), et l’autre qui sera pour demain, mardi 25 novembre 2008.

Sommaire de cette première partie :

Lire la suite...

- page 1 de 5