Facebook a franchi une nouvelle étape dans le traitement du langage de programmation web PHP. Le réseau social a ainsi développé une machine virtuelle PHP capable d'exécuter le langage web jusqu'à neuf fois plus vite que lorsqu'il tourne en mode natif sur de grands systèmes. « Notre objectif est de parvenir à exécuter le PHP vraiment très très vite », a déclaré Joel Pobar, directeur de l'ingénierie chez Facebook, lors de l'O'Reilly Open Source Conference (OSCON) qui s'est tenue la semaine dernière (22-26 juillet) à Portland, Oregon. Pour obtenir ce résultat, le réseau social utilise depuis le début de l'année la machine virtuelle HipHop Virtual Machine (HHVM) pour l'ensemble de ses serveurs.

La HHVM n'est pas la première tentative de Facebook pour accélérer le traitement du PHP. Ce langage étant interprété, il faut que le code source soit exécuté directement par le processeur. D'une manière générale, les programmes écrits en langages interprétés comme le PHP ne tournent pas aussi vite que des langages comme le C ou le C++, qui ont été compilés à l'avance en langage machine. Facebook est resté fidèle au PHP, car il est compris par la plupart de ses programmeurs web. Pour faire face à la demande jamais satisfaite des utilisateurs, Facebook avait conçu un compilateur du nom de HipHop pour traduire le code PHP en C++ en amont et augmenter ses performances. Depuis plusieurs années, le réseau social a tiré des gains en performance considérables de l'usage de cette première version de HipHop, et il a cherché d'autres moyens pour accélérer la livraison des pages web dynamiques à son milliard et plus d'utilisateurs. « En matière de performance, on arrivait à une sorte de plafond », a reconnu le directeur de l'ingénierie.

Un compilateur just-in-time dans la VM 

Depuis environ trois ans, Facebook développe sa machine virtuelle HHVM. Celle-ci fonctionne exactement sur le même principe que la machine virtuelle Java (JVM). La machine HHVM intègre un compilateur just-in-time (JIT) qui convertit le code source lisible par l'homme en byte code machine quand c'est nécessaire. (L'ancien compilateur HipHop, rebaptisée HPHPc, n'est plus utilisé chez Facebook aujourd'hui). Cette approche JIT permet à la machine virtuelle de « prendre des décisions plus intelligentes au moment de l'exécution », a déclaré Joel Pobar. Par exemple, si une requête est envoyée à la base de données MySQL pour lire une ligne de données, le HHVM peut, à la volée, comprendre de quel type de données il s'agit, si c'est un entier ou une chaîne. Il peut à la volée générer ou appeler le code le mieux adapté pour traiter telles ou telles données.

« Le mieux que pouvait faire l'ancien HipHop était d'analyser l'ensemble du code base de Facebook, en comprendre le sens et livrer ensuite un code spécialisé en fonction de ce qu'il avait compris. Mais il n'était pas capable de réaliser le processus d'une seule traite. Mais, certaines parties du code base sont simplement impossibles à déduire », a expliqué le directeur de l'ingénierie. Ce dernier estime que la machine virtuelle HHVM est environ deux fois plus rapide que ne l'était le HPHPc, et environ neuf fois plus rapide que le PHP exécuté en natif.

Facebook a publié le code de sa machine HHVM sur le référentiel GitHub, en espérant que d'autres l'utiliseront aussi pour accélérer leurs sites web PHP. La machine virtuelle HHVM est optimisée pour traiter de très grandes quantités de code base PHP. Selon Joel Pobar, l'usage de la machine virtuelle HHVM améliorerait la performance de sites comme que ceux qui hébergent les blogs Wordpress, de cinq fois environ.