The OpenNET Project / Index page

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

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

15.05.2014 23:31

Разработчики браузерного движка 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.



  1. Главная ссылка к новости (https://www.webkit.org/blog/33...)
  2. OpenNews: Первый предварительный выпуск Qt WebEngine, переведённый на браузерный движок Blink
  3. OpenNews: Компания Google представила Blink, форк движка WebKit
  4. OpenNews: Доступен WebKitGTK+ 2.4.0
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/39784-web
Ключевые слова: web, jit, javascript
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (37) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 23:48, 15/05/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –10 +/
    После демарша гугла, эпл начинает потихоньку открывать разработки. Вообще, несмотря на более тормозной движок и отсутствие ряда фич, WebKit выглядит более привлекательно, ибо не является комбайном, которым рулит лишь узкая группа лиц из корпорации добра.
     
     
  • 2.6, Аноним (-), 00:35, 16/05/2014 [^] [^^] [^^^] [ответить]  
  • +16 +/
    Эй парень, они взяли другой проект с открытым исходным кодом, поэтому не имеют право закрывать его. А именно KHTML из Konqueror. В те годы всему миру было начихать на технические превосходства веб-движков, так как у 99% всё равно IE5/IE6. Поэтому интересную разработку никто не замечал. И тут пришла Apple и сделала на его основе Webkit. Именно поэтому Konqueror 4.3 KHTML заменили на Webkit. Это была эволюция, а не как с Opera 12.
     
     
  • 3.15, Константавр (ok), 11:51, 16/05/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Блеен... Прям в сердце ёкнуло, вспомнился Konqueror, было же время... А не у него ли первого вкладки появились? Фича - которую никак было не втолковать пользователям IE

    А теперь некому толкать паровоз, да и интернет уже не тот. Хочу машину времени.

     
     
  • 4.16, iZEN (ok), 12:09, 16/05/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > А не у него ли первого вкладки появились?

    Первые вкладки появились где-то в 1998-99гг в Mozilla Firebird v.0.97.

     
     
  • 5.19, Andrey Mitrofanov (?), 14:48, 16/05/2014 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Первые вкладки появились где-то в 1998-99гг в Mozilla Firebird v.0.97.

    iZEN даже при чтении википепии вслух врёт. Бе-е-едный!

    Не первые, не в морзиле, не в 98-99.
    ""Mozilla 0.9.5 in October 2001, Phoenix 0.1 (now Mozilla Firefox) in October 2002
    en.wikipedia.org/wiki/Tab_(GUI)

     
     
  • 6.22, iZEN (ok), 19:20, 16/05/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >> Первые вкладки появились где-то в 1998-99гг в Mozilla Firebird v.0.97.
    > iZEN даже при чтении википепии вслух врёт. Бе-е-едный!
    > Не первые, не в морзиле, не в 98-99.
    > ""Mozilla 0.9.5 in October 2001, Phoenix 0.1 (now Mozilla Firefox) in October
    > 2002
    > en.wikipedia.org/wiki/Tab_(GUI)

    Видишь, как интересно. Я не нашёл фактоидов, а ты нашёл. ;)


     
  • 5.34, arisu (ok), 15:25, 17/05/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> А не у него ли первого вкладки появились?
    > Первые вкладки появились где-то в 1998-99гг в Mozilla Firebird v.0.97.

    opera смотрит на тебя как на изю.

     
  • 4.18, rshadow (ok), 14:44, 16/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Им не надо втолковывать. Идеалогия винды - многооконность на одном рабочем столе.
     
     
  • 5.20, rob pike (?), 16:54, 16/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Какие новости.
    Вообще-то у них изначально был http://en.wikipedia.org/wiki/Multiple_document_interface
    от которого только совсем недавно (всего 15 лет назад) отказались по просьбам пользователей
     
  • 2.11, Аноним (-), 06:52, 16/05/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > комбайном, которым рулит лишь узкая группа лиц из корпорации добра.

    А чем эппл принципиально от гугли отличается?

     
     
  • 3.14, 1 (??), 10:45, 16/05/2014 [^] [^^] [^^^] [ответить]  
  • +10 +/
    Одни причиняют добро, другие наносят пользу.
     
     
  • 4.17, Константавр (ok), 12:20, 16/05/2014 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Шуточки? Чойта я не слышал про Эппл Саммнр оф Коде. У Эппла только:
    "Кто похвалит меня лучше все-е-ех,

       тот

         получит

            вкусную конфету!"


    Блин, советские мультики добру учили.

     
     
  • 5.25, Аноним (-), 20:25, 16/05/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Эппл как минимум активно контрибьютит в LLVM/Clang, Webkit и BSD libc и cups, не считая всякой мелочевки.
     
     
  • 6.29, Константавр (ok), 11:49, 17/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    В этих проектах Эппл заинтересован непосредственно. Тоже самое Андроид, Хромиуи и пр. для Гугла.
     
     
  • 7.30, Куяврег (?), 13:12, 17/05/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Как бы это и есть то самое "впрягли корпорастов. работают на себя - работают на всех".
     
     
  • 8.33, Константавр (ok), 15:16, 17/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    В том и отличие Google Summer Of Code, Гугл в данном случае является спонсором и... текст свёрнут, показать
     
     
  • 9.37, rob pike (?), 07:45, 18/05/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Гугл, разумеется, не является в полном смысле меценатом - GSoC по сути это очень... текст свёрнут, показать
     
  • 5.31, Куяврег (?), 13:16, 17/05/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Чойта я не слышал про Эппл Саммнр оф Коде.

    Так ещё и не вечер. Тут же вопрос стоит именно так: либо опенсорц даёт эффективные методы заработка, и тогда "все там будут", вопрос только кто раньше созреет. Либо есть "патологические враги опенсорц". Я думаю - первое. С одним "но". Сейчас уже видно, что революцию надо распространять на хардварь.

     
     
  • 6.32, Константавр (ok), 14:50, 17/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Вопрос стоял:

    >А чем эппл принципиально от гугли отличается?

    Так что отпрыгни.

     

  • 1.2, Аноним (-), 23:51, 15/05/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    время бурного роста абы как, прошло, наступило время оптимизации. во многих проектах заметно, что внедрение качественных универсальных инструментов дает очень быстрый и хороший результат.
     
  • 1.3, Аноним (-), 00:28, 16/05/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    бгг, аббревиатура faster than light совершенно незаметна
     
  • 1.4, yaleks (??), 00:31, 16/05/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Мир сходит с ума - сначала перегоняем в JS при помощи LLVM, а затем им же JS в машинный код.
     
  • 1.10, Аноним (-), 06:41, 16/05/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Блин, поздно. Qt уже на Blink же переходить стал и неизвестно сколько он оперативки после этого начнет жрать.
    Мне Эппловский вебкит гораздо больше в этом плане нравится, начиная где-то с 10.8 он даже более-менее стабильно работать стал и без всякого 1 процесс на вкладку/плагин. Вот этот жор 2-3 гигов Private Memory в Blink/Webkit на 10-15 вкладках дико утомляет, Эппловский не уступает по скорости(но был их JS-engine был проприетарным блобом) и жрет в 2-3 раза меньше.
     
     
  • 2.12, Аноним (-), 08:24, 16/05/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Продолжай доделывать QtWebkit
    У тебя еще есть время
     
  • 2.21, Аноним (-), 18:03, 16/05/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >Qt уже на Blink же переходить стал

    Оно и к лучшему. Этот полупроприетарный LLVM в Qt нафиг не упёрся.

     
     
  • 3.23, iZEN (ok), 19:23, 16/05/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >>Qt уже на Blink же переходить стал
    > Оно и к лучшему. Этот полупроприетарный LLVM в Qt нафиг не упёрся.

    Правильно! На С++ давно уже есть JIT — Sun HotSpot ( http://ru.wikipedia.org/wiki/HotSpot ). :))


     
     
  • 4.26, rob pike (?), 21:12, 16/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Ладно б ты еще про Zing упомянул, говоря про приличный JIT.
    Который, кстати, на LLVM строят.
     
  • 3.24, Аноним (-), 20:12, 16/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    А ничего, что у конкурента тож BSD licence? http://changelogs.ubuntu.com/changelogs/pool/universe/libv/libv8/libv8_2.0.3-
     

  • 1.28, Аноним (-), 06:56, 17/05/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    LuaJIT уже рвёт? (без asm.js-мухлежа)
     
     
  • 2.35, arisu (ok), 15:37, 17/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > LuaJIT уже рвёт? (без asm.js-мухлежа)

    да оно и с мухлежом не особо. а если сравнить размер кодовой базы… нет, лучше не надо.

     
  • 2.36, rob pike (?), 07:37, 18/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >"With proper design and engineering, there's no reason a JS JIT compiler couldn't compete with LuaJIT."
    >--Mike Pall
     
     
  • 3.38, arisu (ok), 15:23, 18/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >>"With proper design and engineering, there's no reason a JS JIT compiler couldn't compete with LuaJIT."
    >>--Mike Pall

    осталось найти того, кто это сделает. СуперМайк не заинтересован.

     
     
  • 4.39, rob pike (?), 15:27, 18/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Заинтересован, но его не зовут. Потому злорадствует.

    >Umm, but LuaJIT does loop peeling and LICM. Or rather an equivalent that actually works for dynamic languages and provides both code hoisting and unswitching. It's 300 lines of code. Oh, and it performs selective unrolling, too.
    >Sure, let's go down the list of advanced compiler optimizations! Muchnick to the rescue ... LuaJIT also does: constant folding, constant propagation, copy propagation, algebraic simplifications, reassociation, common-subexpression elimination, alias analysis, load-forwarding, store-forwarding, dead-store elimination, store sinking, scalar replacement of aggregates, scalar-evolution analysis, narrowing, specialization, loop inversion, dead-code elimination, reverse-linear-scan register allocation with a blended cost-model, register hinting, register renaming, memory operand fusion.
    >Due to the nature of a trace compiler, it implicitly performs partial and interprocedural variants of all of them. And many traditional optimizations, like straightening or unreachable code elimination are unnecessary.
    >All of that in 120KB for the VM and 80KB for the JIT compiler. And I didn't need 15 years and a billion dollar budget for that, either.
    >I'm planning to add value-range propagation, array-bounds-check elimination, escape analysis, allocation sinking, if conversion, hyperblock scheduling and auto-vectorization. Anything I forgot? I'll see what I can do. :-)

     
     
  • 5.40, arisu (ok), 15:32, 18/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Заинтересован, но его не зовут.

    я имел в виду «не заинтересован делать это бесплатно». а денег на jsjit корпорасты ему не несут, предпочитая оные деньги весело просирать.

    впрочем, я бы вообще все попытки сделать jit'ы для js уничтожал бы вместе с авторами.

     
     
  • 6.41, rob pike (?), 04:09, 19/05/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >все попытки сделать jit'ы для js уничтожал бы вместе с авторами

    Потому что технологии бывают вредные, полезные и антинародные, да?

    > Кибернетика является, таким образом, реакционной механистической теорией, стремящейся отбросить современную научную мысль, основанную на материалистической диалектике, далеко вспять — к изжитой и опровергнутой более ста лет назад механистической философии.
    > — «Наука современных рабовладельцев», «Наука и жизнь», июнь 1953, стр.42

     
     
  • 7.42, arisu (ok), 09:07, 19/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >>все попытки сделать jit'ы для js уничтожал бы вместе с авторами
    > Потому что технологии бывают вредные, полезные и антинародные, да?

    нет. потому что дебилы-хипстеры пытаются впихнуть невпихуемое.

     
     
  • 8.43, rob pike (?), 19:06, 19/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Так ведь по просьбам трудящихся Всё для рабочего человека ... текст свёрнут, показать
     

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



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

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