Firefox 18 перейдёт на IonMonkey, JIT-компилятор нового поколения
12 сентября 2012 года
Разработчики Mozilla сообщили о миграции JavaScript-движка экспериментальной ветки Firefox на IonMonkey, JIT-компилятор следующего поколения, который позволит значительно повысить производительность JavaScript приложений за счёт использования нового метода JIT-компиляции и передовых техник оптимизации. Первым релизом, перешедшим на IonMonkey, станет Firefox 18, выход которого запланирован на начало января.
Одним из ключевых новшеств IonMonkey является система вероятностной оценки типов, в рамках которой предложен гибридный метод статического и динамического анализа, позволяющий точно сопоставить типы для каждой переменной и каждого свойства JavaScript-программы. Напомним, что JavaScript является языком с динамической типизацией, с одной стороны это предоставляет большую гибкость для разработчиков, но с другой стороны создает трудности при создании JIT-компиляторов. Так как невозможно заранее определить какой тип данных будет содержаться в переменной, возникают трудности при сопоставлении переменной с определенными фиксированными инструкциями, рассматривающими эту переменную, например, как строку или число. IonMonkey сделал существенный шаг вперёд в плане решения данной проблемы и позволил избавиться от выполнения большого числа дополнительных проверок в процессе работы JavaScript-программы.
Другим важным улучшением является использование адаптивных методов выбора той или иной техники оптимизации для выполняемого JavaScript-кода. Если JIT-компиляторы первых двух поколений (TraceMonkey и JägerMonkey) поддерживали только прямую однонаправленную трансляцию JavaScript в машинные инструкции, то IonMonkey дополнительно снабжён средствами для обратной связи, позволяющими оценить эффективность результата выполнения сгенерированных инструкций и при необходимости внести корректировки и оптимизации, учитывающие особенности выполняемого JavaScript-кода.
Архитектура IonMonkey разделена на три компонента: трансляция JavaScript в промежуточное представление (IR), применение различных алгоритмов к IR и трансляция финального IR в машинный код. Подобное разделение значительно увеличило гибкость работы JIT-компилятора и упростило сопровождение кода и его доработку. Например, добавление новых алгоритмов оптимизации теперь напоминает написание плагинов.
Среди других улучшений можно отметить: задействование техники LICM (Loop-Invariant Code Motion) для выноса инструкций за пределы циклов; поддержка метода GVN (Global Value Numbering) для ликвидации избыточного кода; реализация линейной схемы распределения регистров LSRA (Linear Scan Register Allocation), применяемой также в таких проектах, как HotSpot JVM и LLVM; поддержка DCE (Dead Code Elimination) для удаления неиспользуемого кода; новый анализатор границ, позволяющий обойтись без лишних проверок выхода за границы буфера. В настоящее время IonMonkey поддерживает генерацию кода для архитектур i386, x86_64, и ARM.
Итогом проделанной работы стало значительное повышение производительности выполнения кода JavaScript. При выполнении тестового комплекта Kraken (Архивная копия от 1 июля 2020 на Wayback Machine) Firefox 18 с IonMonkey показал прирост производительности на 26% (по графику на 10%), по сравнению с Firefox 15 и тестовой версией Firefox 17.
В тесте V8 benchmark (Архивная копия от 2 мая 2016 на Wayback Machine) Firefox 18 опередил Firefox 17 на 7%, а текущий релиз Firefox 15 на 20%.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.