Ajouter un commentaire

Google améliore les performances de son moteur JavaScript V8 avec un nouveau compilateur : Sparkplug

Par:
fredericmazue

jeu, 03/06/2021 - 09:00

Pourquoi écrire un nouveau compilateur pour améliorer le moteur JavaScript v8 ? Google explique :  L'écriture d'un moteur JavaScript hautes performances ne se limite pas à un compilateur hautement optimisé comme TurboFan. En particulier pour les sessions de courte durée, comme le chargement de sites Web ou d'outils de ligne de commande, il y a beaucoup de travail avant que le compilateur d'optimisation ait même une chance de commencer à optimiser, sans parler d'avoir le temps de générer le code optimisé.

C'est la raison pour laquelle, depuis 2016, nous sommes passés du suivi des benchmarks synthétiques (comme Octane) à la mesure des performances dans le monde réel, et pourquoi depuis lors nous avons travaillé dur sur les performances de JavaScript en dehors du compilateur d'optimisation. Cela a nécessité du travail sur l'analyseur, sur le streaming, sur notre modèle objet, sur la concurrence dans le ramasse-miettes, sur la mise en cache du code compilé… disons simplement que nous ne nous sommes jamais ennuyés.

Cependant, alors que nous nous efforçons d'améliorer les performances de l'exécution initiale de JavaScript, nous commençons à rencontrer des limites lors de l'optimisation de notre interpréteur. L'interpréteur de V8 est hautement optimisé et très rapide, mais les interpréteurs ont des surcoûts à l'exécution inhérents dont nous ne pouvons pas nous débarrasser

Avec le modèle actuel à deux compilateurs, il n'est pas possible de passer à un code optimisé beaucoup plus rapidement. Il est possible d'accélérer l'optimisation, mais à un moment donné, on ne peut obtenir cette accélération qu'en supprimant les passes d'optimisation, ce qui réduit les performances de pointe. 

C'est là qu'intervient Sparkplug, un nouveau compilateur JavaScript non optimisé que Google publie avec V8 v9.1. Sparkplug vient se nicher entre l'interpréteur Ignition et le compilateur d'optimisation TurboFan, pour former un nouveau pipeline.

Sparkplug est conçu pour compiler rapidement. Il est tellement rapide que nous pouvons compiler à peu près quand nous le voulons, ce qui nous permet de passer au code Sparkplug de manière beaucoup plus agressive que nous ne le pouvons au code TurboFan affirme Google.

Une des raisons de cette rapidité est que les fonctions que Sparkplug compile ont déjà été compilées en bytecode, et le compilateur de bytecode a déjà fait le gros du travail. D'autre part, Sparkplug ne génère aucune représentation intermédiaire (IR) comme le font la plupart des compilateurs. Au lieu de cela, Sparkplug compile directement en code machine en un seul passage linéaire sur le bytecode, émettant du code qui correspond à l'exécution de ce bytecode.

Puisque Sparkplug ne génère aucune représentation intermédiaire, il a des opportunités d'optimisation limitées, mais ce n'est pas un problème car il y a un compilateur avec optimisation en aval dans le pipeline.

Google présente le fonctionnement de Sparkplug dans ce très intéressant billet technique.

Filtered HTML

Plain text

CAPTCHA
Cette question permet de vérifier que vous n'êtes pas un robot spammeur :-)
 FFFF  DDD   H  H  BBBB   L    
F D D H H B B L
FFF D D HHHH BBBB L
F D D H H B B L
F DDD H H BBBB LLLL