Для WebKit реализован JIT-компилятор на основе наработок LLVM

15 мая 2014 года

Разработчики браузерного движка WebKit представили FTL (Fourth Tier LLVM), новый режим работы JIT-компилятора, использующий оптимизатор LLVM для генерации эффективного машинного кода. FTL оценивается как стабильный и активирован по умолчанию компанией Apple для OS X и iOS. Использование оптимизатора LLVM позволило применить для JavaScript методы изощрённой оптимизации, ранее используемые только для компилируемых языков, таких как C++ и Objective-C. По сравнению с ранее доступным в WebKit JIT-компилятором DFG (Data Flow Graph), FTL в среднем обеспечивает прирост производительности на 35%. Наибольшая эффективность FTL наблюдается для длительно выполняющихся web-приложений, а также кода, использующего расширение Asm.js.

FTL рассматривается как JIT-компилятор третьей ступени и активируется только для достаточно активно выполняемого кода. Система оптимизации выполнения JavaScript в WebKit имеет многоуровневую структуру, переход на каждый следующий уровень оптимизации осуществляется при выполнении определённых условий, при которых целесообразно применять более ресурсоёмкие, но и боле эффективные, методы оптимизации. В частности, вначале JavaScript выполняется с использованием интерпретатора LLInt (Low Level Interpreter), но если накоплена статистика, что JavaScript-функция вызвана более 6 раз или цикл прокручен более 100 раз, запускается первая стадия дополнительной оптимизации, при которой используется компилятор Baseline JIT.

В процессе выполнения кода, сгенерированного Baseline JIT накапливается дополнительная статистика и если JavaScript-функция вызвана более 66 раз или цикл прокручен более 1000 раз запускается более эффективный компилятор DFG JIT, обеспечивающий более глубокую оптимизацию. Если Baseline JIT позволяет добиться увеличения скорости выполнения JavaScript-кода в 10 раз, по сравнению с интерпретатором, то прирост скорости после применения DFG JIT составляет 30 раз. Ценой ускорения выполнения JavaScript-кода является большие процессорные ресурсы, необходимые для работы оптимизатора. DFG JIT генерирует код достаточно медленно, поэтому его использование целесообразно только для активно выполняемого кода.

В свою очередь, FTL, требует ещё больше ресурсов, но выдаёт более эффективный машинный код (в 40 раз быстрее интерпретатора), адаптированный к особенностям работы web-приложения, и использует низкоуровневые оптимизации, например, производит размещение наиболее востребованных значений в процессорных регистрах. При работе FTL используется накопленная в процессе работы DFG JIT статистика, дающая информацию о типах переменных. Так как действия на данной стадии оптимизации во многом повторяют методы, используемые при компиляции C и C++, решено воспользоваться существующими генератором кода и оптимизатором, развиваемыми в рамках проекта LLVM. При этом FTL применяется только для функций, суммарное время выполнение которых превысило 10 мс. Оптимизация производится в асинхронном режиме - FTL запускается в отдельной нити, до завершения которой продолжает выполняться код, сформированный на стадии DFG JIT.

Источники

править


 
 
Creative Commons
Эта статья содержит материалы из статьи «Для WebKit реализован JIT-компилятор на основе наработок LLVM», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.