24 août 2023

Compilation PHP et JIT pour de meilleures performances

Avec l'introduction de PHP 8, les dĂ©veloppeurs peuvent s'attendre Ă  un certain nombre d'innovations rĂ©volutionnaires – de la compilation JIT, qui promet d'amĂ©liorer les performances, aux nouvelles extensions et optimisations qui redĂ©finiront l'efficacitĂ© du code.

À l’ùre numĂ©rique oĂč la vitesse et l’efficacitĂ© sont primordiales, les performances d’un site Web peuvent faire la diffĂ©rence entre le succĂšs et l’échec d’une entreprise. Dans le contexte de l’hĂ©bergement et de l’ingĂ©nierie systĂšme, la recherche de solutions pour optimiser les performances est incessante. L'une des technologies qui a suscitĂ© un grand intĂ©rĂȘt parmi les dĂ©veloppeurs PHP est la compilation JIT (Just-In-Time). Mais qu’est-ce que cela implique exactement ? Et comment peut-il influencer positivement les performances de votre site Web hĂ©bergĂ© sur un serveur Linux ? DĂ©couvrons ensemble.

Qu’est-ce que la compilation JIT ?

La compilation JIT, ou Just-In-Time, est une méthode de compilation dans laquelle le code source est traduit en code machine au moment de l'exécution, plutÎt qu'à l'avance. Fondamentalement, au lieu de compiler le code source dans un format exécutable avant de l'exécuter, le code est compilé « à la volée » lors de son exécution.

Cette approche offre plusieurs avantages. Par exemple, il permet au compilateur d'optimiser le code en fonction de conditions d'exécution spécifiques, telles que la plate-forme matérielle ou le systÚme d'exploitation. Cela peut également réduire le temps nécessaire au lancement d'une application, puisque vous n'avez pas besoin d'attendre que tout le code soit compilé avant de l'exécuter.

PHP et JIT

PHP est traditionnellement connu comme un langage de script interprĂ©tĂ©. Cela signifie que le code PHP est exĂ©cutĂ© par un interprĂ©teur qui lit et traite le code source Ă©tape par Ă©tape. Cette approche a ses avantages, tels que la facilitĂ© de dĂ©veloppement et la portabilitĂ©, mais elle peut aussi ĂȘtre moins efficace que la compilation.

Avec l'avÚnement de PHP 8, une fonctionnalité révolutionnaire a été introduite : la compilation JIT. Cette fonctionnalité permet à PHP de compiler des parties du code source en code machine pendant l'exécution, améliorant potentiellement les performances.

Comment fonctionne la compilation JIT en PHP ?

Les langages de programmation purement interprétés n'ont pas de temps de compilation et exécutent directement le code dans une machine virtuelle. La plupart des langages interprétés, dont PHP, ont en fait un temps de compilation léger pour améliorer ses performances.

Les langages de programmation avec compilation Ahead-Of-Time (AOT), en revanche, nécessitent que le code soit d'abord compilé puis exécuté.

La compilation Just-In-Time est un modÚle hybride entre l'interpréteur et la compilation Ahead-Of-Time, dans lequel tout ou partie du code est compilé, souvent au moment de l'exécution, sans que le développeur ait à le compiler manuellement.

Historiquement, PHP Ă©tait un langage interprĂ©tĂ©, oĂč tout le code Ă©tait interprĂ©tĂ© par une machine virtuelle (Zend VM). Cela a changĂ© avec l'introduction d'Opcache et d'Opcodes, qui Ă©taient gĂ©nĂ©rĂ©s Ă  partir du code PHP et pouvaient ĂȘtre mis en cache en mĂ©moire. PHP 7.0 a introduit le concept d'AST (Abstract Syntax Tree), qui sĂ©parait davantage l'analyseur du compilateur.

Diagramme PHP JIT

Le JIT de PHP utilise en interne DynASM de LuaJIT et est implémenté dans le cadre d'Opcache.

Opcache peut inspecter le code utilisĂ©, communĂ©ment appelĂ© code « chaud », et en stocker les versions compilĂ©es dans la mĂ©moire partagĂ©e d'Opcache. Quand et quel code doit ĂȘtre compilĂ© est configurable.

Avantages de la compilation JIT en PHP

  1. Performance améliorée: La compilation JIT peut conduire à des améliorations spectaculaires des performances, en particulier pour le code qui s'exécute de maniÚre répétée. Cela peut se traduire par des temps de chargement plus rapides et une meilleure expérience utilisateur.
  2. Optimisation Ă  la volĂ©e: Étant donnĂ© que la compilation a lieu pendant l'exĂ©cution, le compilateur peut optimiser le code en fonction de conditions d'exĂ©cution spĂ©cifiques.
  3. Plus de flexibilité: Avec la compilation JIT, les développeurs peuvent profiter pleinement des caractéristiques de la plateforme sur laquelle le code s'exécute, sans avoir à réécrire ou recompiler le code.

JIT VS Zend OpCache : quelle est la différence ?

Dans l'Ă©cosystĂšme PHP, la performance est une prioritĂ©. Au fur et Ă  mesure de l’évolution du langage et de ses extensions, diverses solutions ont vu le jour pour optimiser l’exĂ©cution des scripts. Deux des plus influents dans ce contexte sont JIT (Just-In-Time Compilation) et Zend OpCache. Mais quelles sont leurs diffĂ©rences et comment affectent-elles les performances de PHP ?

Zend OpCache : mise en cache du bytecode

Zend OpCache est une extension PHP intégrée qui agit comme un systÚme de mise en cache de bytecode. Lorsqu'un script PHP s'exécute, il passe par plusieurs étapes : analyse, compilation et enfin exécution. Lors de la phase de compilation, le script est transformé en bytecode, qui est une représentation intermédiaire du code source, optimisée pour l'exécution.

Zend OpCache intervient dans ce processus en stockant le bytecode gĂ©nĂ©rĂ© dans la mĂ©moire partagĂ©e. Cela signifie que, pour les exĂ©cutions ultĂ©rieures du mĂȘme script, PHP peut ignorer les Ă©tapes d'analyse et de compilation et passer directement Ă  l'exĂ©cution du bytecode stockĂ©. Cela rĂ©duit considĂ©rablement la surcharge et accĂ©lĂšre l’exĂ©cution du script.

Si vous souhaitez mieux comprendre le fonctionnement de Zend OpCache, nous avons dĂ©diĂ© un article spĂ©cifique : Zend OpCache. Comment accĂ©lĂ©rer PHP ?

JIT : Compiler au bon moment

D’un autre cĂŽtĂ©, JIT (Just-In-Time Compilation) est une approche d’optimisation complĂštement diffĂ©rente. Au lieu de se concentrer sur la mise en cache du bytecode, JIT compile le code PHP directement en code machine au moment de l'exĂ©cution. Ce code machine est spĂ©cifiquement optimisĂ© pour la plate-forme sur laquelle il s'exĂ©cute, ce qui lui permet de s'exĂ©cuter beaucoup plus rapidement que le bytecode interprĂ©tĂ©.

La magie du JIT rĂ©side dans le fait qu'il ne compile pas tout le code source, mais uniquement les parties « chaudes », c'est-Ă -dire les sections du code qui sont frĂ©quemment exĂ©cutĂ©es. Cela rend l’optimisation JIT extrĂȘmement efficace en termes de ressources et de temps.

Comparaison et coexistence

La principale diffĂ©rence entre Zend OpCache et JIT rĂ©side dans leur approche de l'optimisation :

  • Zend OpCache: se concentre sur le stockage du bytecode, rĂ©duisant ainsi la surcharge associĂ©e Ă  l'analyse et Ă  la compilation des scripts PHP.
  • JIT: Se concentre sur la transformation du code PHP en code machine optimisĂ©, en contournant complĂštement l'interprĂ©tation du bytecode.

MĂȘme si ces deux approches peuvent paraĂźtre opposĂ©es, elles peuvent en rĂ©alitĂ© coexister et se complĂ©ter. Une application PHP peut bĂ©nĂ©ficier Ă  la fois de la vitesse d'exĂ©cution offerte par JIT et de la rĂ©duction des frais gĂ©nĂ©raux offerte par Zend OpCache. En fait, de nombreuses configurations PHP modernes utilisent les deux extensions pour obtenir les meilleures performances possibles.

Prise en charge des plates-formes

Actuellement, JIT est activé sur les systÚmes Linux et Windows fonctionnant sur des jeux d'instructions de processeur x86 et x64. Les processeurs Apple M1 et ARM ne sont actuellement pas pris en charge.

DynASM, qui est l'assembleur sous-jacent utilisé dans PHP JIT, prend également en charge les instructions ARM, mais il n'est pas clair si PHP JIT peut fonctionner sur des processeurs ARM.

JIT profite Ă©galement d'AVX s'il est pris en charge par le processeur. La plupart des processeurs et serveurs grand public Ă  partir de 2011 prennent en charge les instructions AVX.

En cours d'exécution cat /proc/cpuinfo | grep avx sur la plupart des systÚmes POSIX, vous pouvez vérifier si le processeur le prend en charge.

Compte tenu de la qualité de la solution et de la technologie JIT, il est facile de comprendre que le support sera probablement étendu à de nombreuses plateformes au cours des prochains mois et années, mais il est toujours préférable de se renseigner auprÚs de votre hébergeur.

Tests PHP JIT

Tous les tests suivants ont Ă©tĂ© effectuĂ©s sur un systĂšme x86-64 Ă  8 cƓurs et 16 threads. Cependant, les tests n'utilisent jamais d'entiers qui nĂ©cessitent des registres 64 bits, afin que le test reste plus pertinent pour les processeurs x86.

Le premier test a été effectué avec Opcache complÚtement désactivé et le second avec JIT désactivé, mais opcache activé.

Les deux modes JIT apportent des amĂ©liorations substantielles des performances, avec tracingle mode lĂ©gĂšrement plus puissant.

Ce benchmark ne reprĂ©sente guĂšre une vĂ©ritable application PHP. Les appels rĂ©pĂ©titifs Ă  la mĂȘme fonction et la nature plus simple et sans effets secondaires du code testĂ© profitent au JIT.

Une fonction simple de Fibonacci pour calculer le 42Ăšme nombre de la sĂ©quence de Fibonacci.

Benchmark des applications Web avec JIT activé

L'Ă©valuation de l'effet du JIT peut ĂȘtre complexe, car son impact varie en fonction du type de charge de travail auquel il est soumis. La plupart des exemples suivants concernent des frameworks Web concrets, mais ceux-ci ne reflĂštent pas toujours l'utilisation typique dans le contexte rĂ©el, principalement en raison de l'intervention de divers plugins et mĂ©canismes de mise en cache.

Pour les applications qui se connectent Ă  une base de donnĂ©es, le plus gros problĂšme sera probablement la performance des requĂȘtes de la base de donnĂ©es. Dans une simulation de serveur Web oĂč vous Ă©valuez les requĂȘtes traitĂ©es chaque seconde, les frais gĂ©nĂ©raux associĂ©s Ă  TLS, HTTP et FPM pourraient avoir un impact bien plus important que les amĂ©liorations offertes par JIT.

Des tests ont Ă©tĂ© rĂ©alisĂ©s sur Laravel (8.4.4) et Symfony (dĂ©mo 1.6.3, avec composants 5.1.8) en utilisant leurs configurations de base. Ces tests ont Ă©tĂ© rĂ©alisĂ©s sur le mĂȘme matĂ©riel et dans les mĂȘmes conditions que les benchmarks prĂ©cĂ©dents. Les deux frameworks ont Ă©tĂ© exĂ©cutĂ©s via le serveur Web intĂ©grĂ© de PHP et leurs performances ont Ă©tĂ© Ă©valuĂ©es Ă  l'aide d'Apache Bench (ab), avec des tests effectuĂ©s avec une concurrence de 5 et 100 requĂȘtes, et les rĂ©sultats ont Ă©tĂ© obtenus Ă  partir d'une moyenne de 5 tentatives.

Les deux applications n'ont reçu aucun avantage notable et dans Laravel, les performances Ă©taient environ 2 % moins bonnes avec JIT, probablement en raison de la surcharge de compilation qui ne compensait pas les efforts.

Analyser et comparer chaque application

Pour identifier les avantages réels en termes de performances, il est essentiel d'effectuer un benchmark spécifique pour chaque application, afin de déterminer si l'adoption du JIT peut offrir une augmentation significative des performances.

En particulier, les applications CLI, en particulier celles qui nécessitent une utilisation élevée du processeur, peuvent connaßtre une amélioration considérable des performances grùce au JIT.

En revanche, pour les applications orientées réseau ou gourmandes en fichiers, telles que Composer et PHPUnit, il y aura probablement peu ou pas d'avantages en termes de performances.

En effet, ces applications ne bĂ©nĂ©ficient pas beaucoup des optimisations au niveau du code machine proposĂ©es par JIT. Pour obtenir des amĂ©liorations dans ces contextes, il peut ĂȘtre plus efficace d’investir dans des SSD de plus grande capacitĂ©, plus de RAM ou une bande passante plus Ă©levĂ©e.

HĂ©bergement PHP avec prise en charge JIT

Managed Server Srl, toujours attentif aux derniÚres innovations technologiques, a reconnu le potentiel de la compilation JIT dÚs son annonce. Depuis le second semestre 2020, nous prenons en charge JIT pour toutes les versions de PHP égales ou supérieures à 8. Cet engagement reflÚte notre engagement à fournir à nos clients les solutions les plus avancées et les plus performantes disponibles sur le marché.

Considérations sur l'hébergement

Si vous envisagez d'utiliser JIT PHP pour votre site Web, vous devez garder Ă  l'esprit quelques considĂ©rations :

  1. Compatibilité: Assurez-vous que votre fournisseur d'hébergement, tel que Managed Server Srl, prend en charge PHP 8 ou version ultérieure. Ceci est essentiel pour profiter de la compilation JIT.
  2. Configuration: La compilation JIT peut ĂȘtre configurĂ©e de plusieurs maniĂšres, selon vos besoins. Consultez la documentation et configurez le JIT de maniĂšre optimale pour votre site et votre serveur, en vous assurant que votre hĂ©bergement de confiance a activĂ© JIT.
  3. Suivi de la performance: Comme pour tout changement, il est essentiel de surveiller les performances de votre site aprĂšs avoir activĂ© la compilation JIT. Cela vous permettra d’identifier tout problĂšme et d’optimiser davantage les performances.

Une nouvelle Ăšre pour PHP

Avec l’arrivĂ©e de la compilation JIT, PHP ne se limite plus au seul environnement web. Cette Ă©volution reprĂ©sente un changement radical pour la langue. Mais quelles sont les vĂ©ritables implications de cette rĂ©volution ?

  1. Environnements d'application Ă©tendus: La possibilitĂ© d'exploiter la compilation JIT ouvre la porte Ă  de nouveaux horizons pour PHP. On ne parle plus seulement de pages web dynamiques, mais aussi d’applications bureautiques, de systĂšmes embarquĂ©s, et mĂȘme d’applications d’intelligence artificielle ou d’analyse de donnĂ©es. PHP pourrait trouver sa place dans des contextes oĂč, jusqu'Ă  prĂ©sent, cela Ă©tait impensable.
  2. Optimisation des ressources: La compilation JIT tire pleinement parti des ressources fournies par les processeurs modernes. Cela signifie que les applications PHP seront capables d'effectuer des opérations complexes beaucoup plus efficacement, en tirant le meilleur parti de la puissance de calcul disponible.
  3. Haute performance: Dans les scĂ©narios oĂč la vitesse et l'efficacitĂ© sont critiques, comme les applications d'analyse en temps rĂ©el ou les systĂšmes informatiques hautes performances, PHP avec JIT peut offrir des performances comparables Ă  celles des langages traditionnellement plus rapides.

La compilation JIT reprĂ©sente une Ă©volution significative pour PHP, offrant le potentiel d'amĂ©liorer considĂ©rablement les performances des applications Web. Pour les sociĂ©tĂ©s d'hĂ©bergement et d'ingĂ©nierie systĂšme Linux, comme Managed Server Srl, qui proposent des solutions d'hĂ©bergement performantes, il est essentiel de rester Ă  jour sur les derniĂšres technologies et d'offrir aux clients les meilleures solutions possibles. La compilation JIT en PHP n'est qu'un des outils disponibles pour y parvenir. Assurez-vous d'en tirer le meilleur parti !

Vous avez des doutes ? Vous ne savez pas par oĂč commencer ? Contactez-nous


Nous avons toutes les réponses à vos questions pour vous aider à faire le bon choix.

Discute avec nous

Discutez directement avec notre support avant-vente.

0256569681

Contactez-nous par téléphone pendant les heures de bureau 9h30 - 19h30

Contactez-nous en ligne

Ouvrez une demande directement dans l'espace contact.

INFORMATIONS

ManagedServer.it est le premier fournisseur italien de solutions d'hébergement hautes performances. Notre modÚle d'abonnement est abordable et prévisible, afin que les clients puissent accéder à nos technologies d'hébergement fiables, à nos serveurs dédiés et au cloud. ManagedServer.it offre également d'excellents services d'assistance et de conseil sur l'hébergement des principaux CMS Open Source tels que WordPress, WooCommerce, Drupal, Prestashop, Magento.

JUSTE UN MOMENT !

Souhaitez-vous voir comment votre WooCommerce fonctionne sur nos systĂšmes sans avoir Ă  migrer quoi que ce soit ? 

Entrez l'adresse de votre site WooCommerce et vous obtiendrez une démonstration navigable, sans avoir à faire absolument quoi que ce soit et entiÚrement gratuite.

Non merci, mes clients préfÚrent le site lent.
Retour en haut de page