The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

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

09.12.2010 20:55

Компания 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 не отстает и тоже работает над усовершенствованием работы системы динамической оптимизации и статического анализа.

  1. Главная ссылка к новости (http://blog.chromium.org/2010/...)
  2. OpenNews: В тестовых сборках Firefox включен новый JavaScript-движок JagerMonkey
  3. OpenNews: Для JavaScript-движка Firefox создается новый JIT-компилятор
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/28947-v8
Ключевые слова: v8, javascript, optimization, chrome, chromium, speed
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (18) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, VoDA (ok), 22:08, 09/12/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Это они JIT решили переплюнуть? ;)))
     
     
  • 2.4, Аноним (-), 22:14, 09/12/2010 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Имеется в виду Java HotSpot? Приблизиться смогут, но не догнать. Всё же в JavaScript чисто динамический диспатч по ключам-строкам.
     
     
     
    Часть нити удалена модератором

  • 4.8, поцанчик (ok), 22:48, 09/12/2010 [ответить]  
  • –1 +/
    > Для тебя русский язык родной?

    А как определить?

     
  • 2.19, ДяДя (?), 09:41, 10/12/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Не сам JIT, а подход из HotSpot-а.
    90% времени работы программы выполняется 10% кода.
    Ясен пень, что нужно оптимизировать именно эти 10%, а оптимизация остальной части кода себя не оправдает.
     

  • 1.7, Аноним (-), 22:47, 09/12/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а в Кромиум оно есть?
     
  • 1.9, gregg128 (ok), 22:56, 09/12/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +8 +/
    Ну и ну. Знали бы создатели NCSA Mosaic, как далеко всё это зайдёт :)
     
  • 1.10, pavlinux (ok), 23:28, 09/12/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/

       1-й этап - пихаем лёгкий жаба скрипт в HTML, юзер негодует.
       2-й - пишем двиган Жавы и пихаем его в браузер, юзер негодует, но бежит в магазин за новыми процами и РАМой.
       3-й - О, юзер закупил процов, можно запихать ещё больше кода в страницы!
       4-й - Юзер негодует, что заставляет разрабов оптимизировать двиган.
    LOOP:    
      5-й этап - пихаем ещё код.
      6-й этап - юзер негодует, бежит в магазин.
      7-й этап - пихаем ещё код.
      8-й этап - юзер негодует, оптимизируем двиган.
    GOTO LOOP

    Скоро задачей веб-сервера будет не выдача HTML и медиаконтента,
    а тупое переключение юзеров, как P2P-трекер и внесение корректив
    при изменении содержимого. (с) Я. Патент.


     
     
  • 2.11, User294 (ok), 23:49, 09/12/2010 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Prior art к сожалению есть - торрент-трекеры называется, так что патентовать надо было раньше :)
     
  • 2.12, develop7 (ok), 23:52, 09/12/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, вот я работаю на контору, которая пишет социалку, у которой 90% кода в client-side. На серваке хранятся ключи/значения + SP для особенных случаев. И у всех работает, и никто не жалуется.
    Так что не скоро, а уже.
     
     
  • 3.14, ноно (?), 00:39, 10/12/2010 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >работаю на контору, которая пишет социалку, у которой 90% кода в client-side

    Лучей добра твоей конторке

     
     
  • 4.17, develop7 (ok), 01:44, 10/12/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >>работаю на контору, которая пишет социалку, у которой 90% кода в client-side
    > Лучей добра твоей конторке

    Таки она не моя, но спасибо :)

     
  • 3.15, pavlinux (ok), 01:16, 10/12/2010 [^] [^^] [^^^] [ответить]  
  • +/
    > Ну, вот я работаю на контору, которая пишет социалку, у которой 90% кода в client-side.

    Хошь сказать чтоб открыть index.html сервак делает:

    if ( request == "index.html" && lang == RU && TZ == MSK && ... )

        addr = search_live_user_and_page(*connected_user->lang_ru->tz_msk, request);

    return addr;

    И Вася Пупкин со 195.34.32.118:38174 делает GET на кэш у Дуни Кулаковой на 89.179.135.67:10080

    ?

     
     
  • 4.16, develop7 (ok), 01:44, 10/12/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >> Ну, вот я работаю на контору, которая пишет социалку, у которой 90% кода в client-side.
    > Хошь сказать чтоб открыть index.html сервак делает:
    > if ( request == "index.html" && lang == RU && TZ ==
    > MSK && ... )
    >     addr = search_live_user_and_page(*connected_user->lang_ru->tz_msk, request);
    > return addr;
    > И Вася Пупкин со 195.34.32.118:38174 делает GET на кэш у Дуни Кулаковой
    > на 89.179.135.67:10080

    Да-да, они там все полные дебилы, иначе и не может быть.

     
     
  • 5.22, Дуня Кулакова (?), 22:10, 10/12/2010 [^] [^^] [^^^] [ответить]  
  • +/
    А я выключу монитор!
     
     
  • 6.23, ы (?), 22:57, 10/12/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Главное камеру не отключай.
     
  • 2.13, srgazh (?), 00:31, 10/12/2010 [^] [^^] [^^^] [ответить]  
  • +/
    О здравствуйте, так уже в службах google давно так. А вот медия контент.. а вот, можно кеш использовать юзера. Пусть у друг, друга сливают.  
     
     
  • 3.18, Mna (??), 05:28, 10/12/2010 [^] [^^] [^^^] [ответить]  
  • +/
    медиа контент пусть у Дуни Кулаковой пусть друг у друга сливают.
     

  • 1.20, Аноним (-), 16:15, 10/12/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    "В настоящий момент код Crankshaft для 32-разрядных платформ Intel интегрирован в кодовую базу движка V8 и доступен в составе ежедневных тестовых сборок браузера Chrome. В настоящее время ведется работа по адаптации новой системы для архитектуры ARM и 64-разрядных платформ. "

    Непонятно, включено ли оно уже в Chromium.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру