HHVM/PHPNG, un coup de boost pour PHP 7

Depuis quelques années, Facebook est un acteur très actif dans l’écosystème PHP.

Nous avons eu le droit à différentes versions de HHVM, à l’arrivée de Hack, et même à la parution des spécifications de notre langage préféré fin juillet. Depuis, Zend a répondu avec sa branche PHPNG (pour PHP New Generation).

HHVM, un runtime PHP signé Facebook

En 2008, Facebook a créé HipHop, un convertisseur de code permettant la traduction du code PHP 5.2 en C++ puis la compilation d’un exécutable. Cet outil a permis aux ingénieurs de Facebook de réduire drastiquement l’utilisation de leurs CPUs et RAM.

Dès 2010, arrivés à la limite des possibilités de Hiphop, les ingénieurs de Facebook ont travaillé sur HipHop Virtual Machine (HHVM), un nouveau runtime PHP qui offre en à peine 2 ans, le double de performances. Résultat : en 2013, Facebook tourne entièrement sur HHVM.

Qu’est ce que c’est ?

HipHop Virtual Machine, comme son nom l’indique, est une machine virtuelle telle la JVM de Java. Le code PHP est transformé en HHBC (HipHop Byte Code), lui-même mis en cache en SQLite, puis executé.

Facebook a ajouté du Just-In-Time (JIT) à HHVM. La compilation JIT intervient une fois que plusieurs requêtes ont été effectuées, et que des « hot paths » ont été identifiés. Ceux-ci sont directement compilés en code machine pour un véritable gain de rapidité.

Les ingénieurs du réseau social ont annoncé une amélioration de performance de 100% par rapport à PHP 5.2 avec APC. Suite au passage de PHP 5.5 avec opcache à HHVM, nous avons constaté un gain de 10% sur une petite application Web interne, mais bien plus important sur des workers de calculs. À noter : ces deux migrations ont nécessité la modification de seulement une ligne de code par projet. De nombreux benchmarks sont disponibles sur internet, mais le mieux reste de tester soi-même.

Ouverture

Facebook a décidé de rendre HHVM open-source, et surtout de travailler activement sur sa compatibilité avec les frameworks et librairies les plus utilisées du monde PHP. Le projet voit une nouvelle release sortir toutes les 8 semaines. HHVM utilise du FastCGI, et se veut être une « drop-in replacement » de php-fpm. Les extensions les plus utilisées sont également disponibles pour HHVM, la liste est disponible sur le wiki du projet.

Faut-il l’utiliser ?

Je conseille de tester HHVM sur un de vos projets pour voir s’il est compatible et vous faire une idée des performances. C’est un « drop-in replacement » donc il est très facile de revenir au runtime PHP de base. Vous pouvez également activer HHVM sur Travis-Ci si vous utilisez la solution. Si le gain en vaut la chandelle, c’est le moment de sauter le pas !

PHPNG, la réponse de Zend

La branche a fait sa première apparition publique en mai 2014. À la base, créée pour étudier la possibilité d’intégrer un JIT à PHP, elle est au final un nettoyage des APIs core et une amélioration de l’utilisation mémoire à l’aide de changement sur les structures internes de données. On peut retrouver des détails de son implémentation sur le site de PHP.

Grâce au gain de performance constaté sur cette branche, le vote pour son intégration à la branche master est passé sans problème avec un résultat de 47 oui contre 2 non, PHP 7 sera donc basé sur PHPNG ! À noter que des extensions vont devoir s’adapter pour fonctionner correctement.

Benchmarks

D’après les benchmarks disponibles sur le blog de Zeev, PHPNG est bien plus performant que HHVM pour la grande majorité des cas.

Les chiffres ne sont pas forcément si impressionnants quand on regarde d’autres benchmarks

Qu’en pense la communauté ?

HHVM a été plutôt bien accueilli car même si c’est un produit Facebook, la communication a été bonne : des sites (hhvm.com et hacklang.org) avec des informations régulières, une documentation assez complète, une tentative d’être 100% compatible avec les frameworks les plus utilisés, … De son côté, PHPNG n’a pas été aussi bon que son « concurrent ». En effet, la branche est restée secrète jusqu’en mai et la communauté n’a donc pas été impliquée dans son développement. De plus, une fois la branche rendue publique, Zend a fait beaucoup de communication sur le gain de performance avant même que le vote de la RFC soit passé.

Vers un PHP 7 tout neuf, tout propre ?

En mettant de coté ces quelques problèmes de communication, PHPNG reste une belle avancée pour le langage. Il est bon de savoir que la prochaine version majeure aura une base de code un peu plus propre. Après 10 ans de PHP 5, on espère cependant que Zend va prendre le temps nécessaire pour pousser le nettoyage du code au plus loin, quitte à casser la rétro-compatibilité, changer des APIs publiques, … et n’essaiera pas de presser la sortie de PHP 7 pour « contrer » HHVM (une RFC parle de sortir la nouvelle version d’ici 1 an).

Pour en savoir plus sur HHVM, Facebook communique largement via son blog technique, le site dédié HHVM.com, twitter, … Pour PHP 7, vous pouvez suivre les RFC de PHP.net, et même recevoir un récapitulatif des discussions de « internals » directement dans votre boite mail grâce à l’AFUP et sa nouvelle mailing-list « php-internals@lists.afup.org », aussi disponible sous forme de blog. Un grand merci à Pascal Martin et Steven Van Poeck pour ce travail de synthèse !

blog comments powered by Disqus