The OpenNET Project / Index page

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

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

Разработчики браузерного движка 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
Тип: К сведению
Ключевые слова: web, jit, javascript
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение Ajax/Линейный | Раскрыть все сообщения | RSS
 
  • 1.1, Аноним (-), 23:48, 15/05/2014 [ответить] [показать ветку] [···]     [к модератору]
  • –10 +/
    После демарша гугла, эпл начинает потихоньку открывать разработки Вообще, несмо... весь текст скрыт [показать]
     
     
  • 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, было же время А не у нег... весь текст скрыт [показать]
     
     
  • 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 +/
    iZEN даже при чтении википепии вслух врёт Бе-е-едный Не первые, не в морзиле, ... весь текст скрыт [показать]
     
     
  • 6.22, iZEN (ok), 19:20, 16/05/2014 [^] [ответить]     [к модератору]  
  • –2 +/
    Видишь, как интересно Я не нашёл фактоидов, а ты нашёл ... весь текст скрыт [показать]
     
  • 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 же переходить стал и неизвестно сколько он операти... весь текст скрыт [показать]
     
     
  • 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:
    Заголовок:
    Текст:


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