В движке V8 появилась новая подсистема JIT-компиляции JavaScript-кода

Компания Google представила новую технологию агрессивной оптимизации Crankshaft для открытого JavaScript-движка V8, используемого в браузерах Google Chrome и Chromium. Для участков кода, связанных с большим объемом длительных вычислений (например, математические операции, цикличная обработка данных, рекурсивные вызовы и криптография), технология Crankshaft позволяет добиться значительного прироста производительности, в некоторых случаях привести к ускорению более чем в два раза.

Кроме увеличения производительности, Crankshaft позволяет заметно сократить время запуска больших web-приложений, таких как GMail, — при использовании Crankshaft загрузка страниц, содержащих большой объем JavaScript-кода в среднем занимает на 12% меньше времени. По заявлению Google, Crankshaft является базисом для реализации дальнейших оптимизацией в движке V8, которые помогут довести производительность JavaScript до уровня, приемлемого для функционирования web-приложений следующего поколения.

В настоящий момент код Crankshaft для 32-разрядных платформ Intel интегрирован в кодовую базу движка V8 и доступен в составе ежедневных тестовых сборок браузера Chrome. В настоящее время ведется работа по адаптации новой системы для архитектуры ARM и 64-разрядных платформ.

Подобные результаты достигнуты благодаря реализации техники адаптивной JIT-компиляции, суть которой в проведении дополнительной глубокой оптимизации только для наиболее часто выполняемого кода, не тратя при этом время на оптимизацию редко используемого кода. Эффективность подобного метода оптимизации проявляется только для достаточно длительно выполняемого кода, для которого удается накопить определенный объем статистики, поэтому в синтетических тестах, подобных SunSpider, выполняемых за несколько микросекунд, эффект от технологии Crankshaft минимален.

Основные компоненты Crankshaft:

  1. Базовый компилятор, используемый для быстрой начальной генерации кода без задействования ресурсоёмких методов оптимизации. Процесс компиляции при использовании базового компилятора Crankshaft занимает примерно в два раза меньше времени и генерирует на 30% меньше кода, чем при использовании стандартного компилятора в движке V8 из состава Chrome 9;
  2. Работающая на лету система профилирования кода (runtime profiler), в реальном режиме времени анализирующая выполняемый код и выявляющая наиболее часто используемые конструкции, на выполнение которых тратится больше всего времени;
  3. Оптимизирующий компилятор, перекомпилирующий и дополнительно оптимизирующий только часто используемый код, выявленный системой профилирования. Для выявленного кода используются наиболее подходящие оптимизации, решение о задействовании которых принимается на основании накопленной статистики. Компилятор использует SSA-представление при выполнении таких оптимизаций, как вынос неиспользуемых в цикле конструкций за его пределы, распределение регистров на основе линейного сканирования и inline-подстановка кода функций;
  4. Деоптимизатор, позволяющий отменить внесенные оптимизирующим компилятором оптимизации (вернуть к коду, созданному базовым компилятором), в случае, если предположения о возможности дальнейшей оптимизации данного кода оказались слишком оптимистичными.

Дополнение: Один из разработчиков Mozilla, написал отзыв о Crankshaft, сравнив данную систему с JIT-компиляторами Tracemonkey и JaegerMonkey. Отмечено, что в Crankshaft реализованы замечательные идеи, но Mozilla не отстает и тоже работает над усовершенствованием работы системы динамической оптимизации и статического анализа.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.