HHVM : Mode « turbo boost on » pour vos applications PHP ?

J'ai découvert il y a peu HHVM et ai voulu savoir s'il fonctionnait avec un blog Wordpress et quel gain de performance il pouvait apporter.

Me faire une première opinion de la chose en quelque sorte !

HHVM, qu’est ce que c’est ?

D’après le site officel, HHVM se définit comme suit :

HHVM est une machine virtuelle Open Source créée pour exécuter des programmes écrits en Hack et PHP. HHVM utilise la compilation à la volée « Just In Time » pour obtenir des performances supérieures tout en maintenant la fexibilité de développement que procure PHP.

Ce projet développé par facebook pour ses besoins internes est comptatible avec la majorité des frameworks PHP qui comptent dans le monde libre.

Alléchant non ? Quel gain peut-on espérer au niveau performance ? L’installation de Wordpress va t’elle continuer à fonctionner correctement ? Pour cela, rien de tel qu’un petit banc de test.

Installation et test de HHVM

L’installation de Wordpress utilisée est la dernière version disponible à l’écriture de cet aricle ; soit la 4.0. Aucune manipulation n’est faite après installation, c’est donc une installation « out of the box ».

Installation de HHVM

L’installation sur Ubuntu 14.04 LTS 64 bits ne pose pas de problème particulier puisque des binaires existent pour la plateforme. Il suffit d’ajouter le bon dépôt et zou !

wget -O - http://dl.hhvm.com/conf/hhvm.gpg.key | sudo apt-key add -
echo deb http://dl.hhvm.com/ubuntu trusty main | sudo tee /etc/apt/sources.list.d/hhvm.list
sudo apt-get update
sudo apt-get install hhvm

Si vous souhaitez que HHVM soit automatiquement démarré au boot de la machine :

sudo update-rc.d hhvm defaults

Et enfin, la génération de la configuration de HHVM pour Nginx

sudo /usr/share/hhvm/install_fastcgi.sh

Ce script installe le fichier de configuration HHVM nécessaire à Nginx dans /etc/nginx/hhvm.conf. Il contient ceci :

location ~ \.(hh|php)$ {
    fastcgi_keep_conn on;
    fastcgi_pass   localhost:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

Il est maintenant possible de complètement désinstaller PHP et ses modules, en bref virer php5-fpm.

sudo apt-get remove php5-fpm php5-common

Ça fait bizarre quand même !

Configuration de Nginx pour HHVM

Dans le fichier de configuration du site, je remplace complètement la déclaration du traditionnel bloc location ~ \.php$ par un include hhvm.conf; qui est le fichier généré automatiquement par la commande utilisée ci-dessus.

Les performances, ça donne quoi ?

Nous commençons par tester un blog Wordpress posé sur un setup classique; soit Nginx + MariaDB + php5-fpm et ensuite ce même blog avec un setup HHVM.

J’ai procédé au test avec Check my Website, ce qui me permet de voir si ce changement peut avoir un impact sur les métriques principales d’un site web.

Dès que HHVM est mis en œuvre, le site gagne quelques précieuses millisecondes sur le temps de réponse du serveur. Sur les tests effectués, j’ai gagné à chaque fois environ 20% de temps de réponse avec HHVM.

Temps de réponse après bascule sur HHVM
Temps de réponse après bascule sur HHVM

Cette tendance est confirmée par le même graphe mais sur une échelle de temps plus longue. On continue à bien voir la rupture qui correspond à la mise en route de HHVM?

La rupture reste visible longtemps après
La rupture reste visible longtemps après

À l’inverse, dès que je stoppe HHVM et repasse sur un setup plus classique, le temps de réponse du serveur remonte inexorablement.

Temps de réponse qui remontent après désactivation de HHVM
Temps de réponse qui remontent après désactivation de HHVM

Par contre, le temps total de chargement de la page ne bouge pas ou peu. la conclusion semble donc être que HHVM joue beaucoup plus sur la capacité pour le serveur à répondre rapidement à la requête qu’à servir la page complète.

Ce test n’est qu’un test rapide du potentiel de HHVM et il conviendrait de le pousser plus loin pour affiner ces résultats. Ça donne envie d’aller plus loin par contre car le potentiel semble intéressant.

Ça sent la migration

Pour le moment, que du bon donc ! J’ai aussi testé HHVM avec Dokuwiki et n’ai pas rencontré de problème particulier après bascule vers celui-ci. Il me reste à voir comment on peut balancer la charge entre plusieurs instances HHVM comme on le fait depuis Nginx vers plusieurs php5-fpm et le compte sera bon.

Je pourrais alors gentiment entreprendre la migration des quelques sites Wordpress et consorts que j’opère pour le compte de tiers vers cette nouvelle architecture.

Olivier Jan

À propos de l’auteur

| Cofondateur de Check my Website.

Check My Website a arrêté son activité en 2017, n'hésitez pas à vous tourner vers Dareboost.