Nouveu moteur maison pour PHP (par Facebook) ?

ViPHP
ViPHP | 4674 Messages

02 févr. 2010, 17:26

Hey :),

Il existe des rumeurs depuis un petit moment comme quoi Facebook aurait refait le moteur de runtime de PHP afin d'y intégrer JIT (Just-In Time, la compilation juste à temps, ou à la volée). Ce projet aurait été entamé depuis 2 ans déjà et améliorerait jusqu'à 80% les performances de PHP.
C'est une super nouvelle de voir PHP évolué à ce point.

PHP avait de bonnes performances face à Java par exemple. Mais Java est de plus en plus rapide, même si PHP ne fait que gagner en vitesse et en mémoire. Mais de là à annoncer 80% de performances, c'est un bon énorme.

Notez, avec un bon cache d'opcode (i.e. de bytecode), les performances PHP sont déjà énormément améliorées. Avec JIT, ce serait encore mieux.

Oui mais qu'est-ce que JIT ? Vous en avez peut-être entendu parlé récemment avec Javascript ? En effet, c'est un procédé qui est arrivé dans les navigateurs pour améliorer les performances de Javascript, un langage lui aussi interprété.
Les langages interprétés sont fortement dynamiques et souvent très hauts niveaux, ce sont leurs principaux avantages (mais aussi un apprentissage et utilisation rapide, pas besoin de déployer l'artillerie lourde et de tout recompiler à chaque fois). Mais à chaque exécution, il faut bien ré-interpréter tout le code. C'est à dire : analyeur lexical, analyseur syntaxique, table des symboles, contrôle de types (s'il y en a), résolution des portées (souvent en même temps que les symboles en fait), interprétation directement en mémoire ou compilation en code intermédiaire (bytecode, ou opcode dans la terminologie PHP) puis exécution dans la VM ou runtime (selon la terminologie des langages, mais notion équivalente).
Dans le cas de PHP, pas d'interprétation directement en mémoire, on passe par un runtime (sauf grosse bêtise de ma part … mais j'en doute), ce qui permet une déploiement multi-plateforme. Bah oui, on écrit un seul bytecode et c'est le runtime qui est dédié à chaque plateforme, on y gagne. C'est comme ça que Java fonctionne par exemple, sauf que lui, il conserve le bytecode ; dans PHP, il est directement consommé (sauf si on utilise des caches justement).

L'idée de JIT est d'aller encore plus loin. On repère tout ce qui est constant dans le bytecode : comme des opérations élémentaires, des conditions toujours vraies ou toujours fausses … bref des branches du code constantes, et on le compile. JIT n'est rien d'autre (si je peux me permettre) que la compilation partielle du bytecode. Ça permet de ne pas exécuter/passer à la moulinette l'ensemble du bytecode dans la VM/runtime ; une partie est directement compréhensible par la machine. On comprend alors pourquoi les performances sont améliorées.

Bien sûr, elles sont améliorées sur certains codes, certains algos, certains contextes. Ce n'est pas général à l'ensemble du bytecode. Il faut l'analyser, repérer des cas « pathologiques », i.e. bien connus, et les traiter. Cette analyse peut être longue et donc plomber les performances si elle n'est pas bien faite. C'est tout le dilemme : on gagne 5ms mais on en perd 10 pour les gagner … Ce n'est pas simple et les règles doivent être formelles/claires. Ça soulève des problématiques intéressantes.

Personnellement, je m'étais intéressé à intégrer JIT dans PHP mais la tâche est hardue. Je suis content que le travail ait été fait (si la rumeur est vérifiée), mais j'espère que Facebook et la communauté PHP sauront s'entendre …


Source possible : Facebook gets faster, debuts homegrown PHP compiler, sur ReadWriteWeb.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

ViPHP
ViPHP | 4674 Messages

03 févr. 2010, 00:23

On en sait déjà plus maintenant car la rumeur a été arrêtée.
Facebook a publié sur son blog le produit HipHop : HipHop for PHP: Move Fast.

En vrac.
Pas de JIT en fait. En réalité, ils transforment le code PHP en C++ et l'intègrent dans un environnement C++ (pour bien correspondre avec PHP). Le tout est compilé.
Ils annoncent 50% de performance en moyenne. Ils annoncent bien un « source code transformer », non un compilateur. Le but est de faire un équivalent C++ a du code PHP. On sacrifie quelques fonctions, comme eval(). Ils ont quand même réécrit un runtime. Pourquoi ? Ce n'est pas précisé (j'ai bien des idées : pour Apache pour exemple).
Le billet n'est pas très explicite. Il va falloir attendre un peu pour en savoir d'avantages.

Le projet est sous licence PHP (open-source), et sera disponible sur GitHub. Je vous laisse lire l'article.

Mon avis personnel : je suis déçu. J'aurai préféré JIT, ça aurait été plus efficace et moins contraignant. Là c'est un peu tricky à mon goût et ça aura du mal à être adopté je pense, sauf de rares cas. Le truc qui me fait peur, c'est l'inférence de type de PHP. Inférer PHP est très compliqué à cause de son caractère fortement dynamique.
Bref, wait and see ;-).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

ViPHP
ViPHP | 5462 Messages

03 févr. 2010, 00:45

hello, pareil j'ai un peu suivis l'affaire, et comme toi je suis un peu dessus, je m'attendais a une extension PHP (ou Apache pk pas), et finalement je vois moins l'interet, autant faire son site en C++ et basta, mais bon W&S :wink:

en bonus un petit article sur Korben :
http://www.korben.info/hiphop-le-compil ... ebook.html

ViPHP
ViPHP | 5462 Messages

03 févr. 2010, 14:38


ViPHP
fab
ViPHP | 2657 Messages

05 févr. 2010, 16:01

C'est une excellente nouvelle pour PHP, mais il faut un peu relativiser pour le moment, principalement pour une raisons : aujourd'hui la majorité des sites ayant une certain importance se basent sur des frameworks et la majorité du temps couplé avec des ORM.
Ces technologies là utilisent la richesse de la syntaxe PHP, tels que :
$a ='plop'; $$a = 1;
ou pour un exemple encore plus courant :
call_user_func()
Et malheureusement tout ça n'est pas compatible! Alors il va avoir un bout de chemin à faire! A savoir qui va le faire?
Facebook : ça semblerait être le plus judicieux mais ça couterait énormément en performances à leurs moteurs donc...
ZF, Symfony, Dotrcine, Propel etc... : Ils seront surement pas très réactif mais le passage semble être obligé mais est-ce possible? J'avoue que mes connaissances dans la programmation de ces outils ne me permet pas de répondre!

Ceci étant dit, merci Facebook de faire profiter de son travail à toute la communauté! Et c'est peut être HipHop qui va réussir à préserver les parts de marchés du php face au futur .NET 4.0 qui semble très prometteur! Et qui chose rare de la part de microsoft sera en grande partie si ce n'est totalité Open Source! ( Ce qui ne veut pas dire libre attention :p )
Le trident Linux / Apache / PHP pourrait donc prendre un grand coup d'accélérateur! Ce qui lui ferait pas mal et aussi bizarre que cela puisse paraitre pour l'instant sur les performances de montées en charges le couple Apache / PHP et moins performant que IIS / .NET c'est pour cela que Microsoft avait sauté sur l'occasion pour tenter de refaire programmer facebook en .NET ! Bon par contre linux face a windows serveur, il n'y a même pas de débat le pingouin s'en sort de très loin devant!
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

ViPHP
ViPHP | 5462 Messages

05 févr. 2010, 17:03


ViPHP
ViPHP | 5462 Messages

09 févr. 2010, 10:42

Ça y est les loulous le GIT est open
http://github.com/facebook/hiphop-php

(mais a la date du poste y'a rien encore....)

ViPHP
ViPHP | 5462 Messages

21 févr. 2010, 18:39

vous pouvez allez récupérer les sources :wink:

ViPHP
ViPHP | 5462 Messages

22 févr. 2010, 18:40

bon après un bon moment de galère pour l'installer, je donne mon premier retour ca la l'air de bien foncer, j'ai pris un exemple de manipulation de données - tableaux , sur 1000 lignes, je passe de 0.015 seconde a 0.0001 seconde sois 100x plus rapide :mrgreen:

ViPHP
ViPHP | 4674 Messages

22 févr. 2010, 21:05

Niveau utilisation et déploiment pour la suite, c'est un peu galère pour l'utilisateur lambda. Et ce n'est pas utile à tout le monde. PHP est suffisamment rapide pour 98% des cas. C'est niveau mémoire où ce serait plus intéressant :-).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).