According to Luke, for typical web applications:
~76% of the code is dead
A large percentage only runs for a short time (interpreted)
An even smaller percentage runs in the baseline JIT
An even even smaller percentage is optimized by IonMonkey
IonMonkey is proportionately expensive, almost never runs, is almost never
used on the web. According to Luke, it is used in parts of SunSpider,
Octane and Kraken benchmark suites.
- Maxime
> Ce sont des bonnes nouvelles, et c'est intéressant de voir que leurs
> compilos ne sont pas parfaits. J'aimerais bien comprendre un peu plus
> pourquoi IonMonkey n'est presque pas utilisé. Est-ce que c'est vrai aussi
> pour les benchmarks classiques (sunspider, etc)? On peut se demander
> alors pourquoi ils se sont donnés la peine d'implanter un compilateur si
> complexe. Donc, est-ce que je comprends bien que c'est le baseline JIT
> qui roule le plus souvent (et qui est responsable de la performance de FF
> sur les benchmarks)?
>
> Je te conseille de mettre la majorité de ton temps à continuer à explorer
> leur code source pour pouvoir mieux comprendre leurs JITs. C'est ce qui
> me semble le plus profitable pendant qu'ils sont à portée de main pour tes
> questions.
>
> Marc
>
>
> On 2013-02-04, at 8:39 PM, chevalma(a)iro.umontreal.ca wrote:
>
>> Je suis rentrée au bureau de Mozilla ce matin et j'ai un bureau dans le
>> "js pit", avec les gens qui travaillent sur IonMonkey. Pour commencer,
>> j'ai eu une discussion intéressante sur les moteurs JS de Mozilla avec
>> Luke Wagner. On a discuté d'IonMonkey, de TraceMonkey et de leur analyse
>> de typage.
>>
>> Il semble (encore une fois) que le TI de Mozilla soit très près de ma
>> recherche. Cette fois, je ne m'en fait pas trop cependant. Je crois que
>> mon travail est assez différent et publiable, et j'ai une longue liste
>> de
>> directions de recherche alternatives/complémentaires.
>>
>> Luke Wagner m'apprend aussi que, bien qu'IonMonkey soit assez
>> sophistiqué,
>> il y a beaucoup de choses qu'ils ne font pas:
>>
>> 1. Ils n'ont pas de contexte sur leur types d'objets.
>> 2. Leur fonction map (Array.prototype.map) est une fonction C++ qui
>> rappelle dans le code JS, de quoi faire froncer les sourcils de Marc.
>> 3. Leur analyse de typage n'as pas de contexte sur les appels non plus.
>> 4. Ils ne font aucune forme de versionnement de fonctions
>> 5. Leur inlining est basé sur des heuristiques très ad-hoc, tweakés à la
>> main
>> 6. Leur assembleur ne fait aucune passe d'optimisation sur le code
>> machine
>> généré. Il n'y a pas non plus d'instruction selection.
>>
>> Selon Luke, IonMonkey ne roule presque jamais. C'est leur JIT le plus
>> avancé, et c'est très rare que du code frappe le threshold qui le fait
>> compiler par Ion, même s'il roule longtemps. Je trouve ceci plutôt
>> étrange. Il existe un outil appellé JIT inspector, écrit par Brian
>> Hackett, qui permet d'avoir certaines infos sur le travail des JITs. Je
>> confirme que même sur des web apps qui font pas mal de CPU crunching,
>> IonMonkey n'est pas utilisé.
>>
>> L'opinion de Luke sur TraceMonkey est tout aussi négative que celle de
>> Shu. Il m'as donné plus de détails sur les hacks impliqués dans ce
>> design.
>> Il semble que la vérité est que Mozilla n'as jamais eu un tracing JIT
>> "sérieux". C'était leur premier JIT, il a été poussé très vite du stage
>> recherche en production. Le code était plein de problèmes et impossible
>> à
>> maintenir, tout le monde voulait le retirer et le remplacer par quelque
>> chose d'autre. Ceci fut la fin de l'histoire de Mozilla et du tracing.
>>
>> Personnellement, je crois qu'une de mes contributions pourrait être
>> spécifiquement au niveau du tracing. Je pense à un design de tracing JIT
>> qui n'est pas basé sur les boucles et les longues traces linéaires, mais
>> sur un graphe de fragments de code. Les bénéfices du tracing, comme la
>> spécialization des fonctions et l'inlining seraient préservés, le
>> problème
>> de l'explosion des traces pourrait être résolu assez simplement.
>>
>> Cet après-midi, j'ai pris le temps de regarder un peu le code
>> d'IonMonkey,
>> tester le JIT inspector, lire des articles recommandés par Luke. Je
>> devrais pouvoir rencontrer Michael Bebenita demain matin pour discuter
>> tracing. Les gens qui travaillent sur le baseline JIT ne sont pas
>> disponible pour me cyber-rencontrer avant mercredi. Je me sent un peu
>> inutile ici, mais j'imagine que Mozilla ne s'attend pas vraiment à ce
>> que
>> je contribue du code. Je vais en profiter pour travailler sur Higgs.
>> Comme
>> vous disiez, il faut que j'avance mon propre travail avant tout. Si je
>> me
>> retrousse les manches, je peut avoir du monitoring simple qui marche
>> d'ici
>> quelques jours.
>>
>> Je vais réécrire à Alex Gaynor de PyPy demain, j'espère avoir la chance
>> de
>> le rencontrer. Je vais aussi réécrite à Andrei Alexandrescu pour lui
>> dire
>> que vous seriez prêt à financer ma présentation à DConf 2013.
>>
>> - Maxime
>