Релиз Erlang/OTP 24.0
Вышел важный релиз платформы для разработки высоконагруженных и отказоустойчивых систем — Erlang/OTP за номером 24.
Выпуск включает в себя более 1400 коммитов, изменивших около полумиллиона строк. Ключевым нововведением является добавление JIT-компилятора «BeamAsm» в виртуальную машину Erlang’а (BEAM). Попытки реализации данного функционала предпринимались на протяжении ~10 лет и наконец увенчались успехом.
Историю добавления JIT в BEAM можно прочитать в блоге.
Комментарии разработчиков и пользователей о производительности:
Цитата из описания pull-запроса с JIT-функционалом:
Насколько BeamAsm быстрей интерпретатора? Данный показатель в значительной степени зависит от того чем занимается ваше приложение. Например, число estone’ов, в модуле для оценки производительности, возросло на 50%, т.е. теперь, за тоже время выполняется в половину больший объём работы. Разбег в ускорении отдельных тестов варьируется от 170% (сопоставление с образцом) до близкого к нулю (обработка больших сообщений). Большой прирост наблюдается в нагрузке с интенсивными вычислениями, а код с акцентом на обмен сообщениями — практически не ускорился.
Если запустить тесты разборки JSON из комплекта Poison или Jason, наблюдается ускорение от 30 до 130 процентов (в среднем ~70%). В некоторых бенчмарках BeamAsm даже быстрее чем jiffy — json-парсер написанный на Си.
Хосе Валим, создатель языка программирования Elixir, также работающего поверх виртуальной машины BEAM, успел оценить ускорение полученное с добавлением JIT-компиляции:
Одним из многих положительных эффектов JIT оказалось сокращение времени сборки сервера hexpm (включая зависимости) с 111 секунд до 77, что на 31% быстрее. :)
Из подводных камней можно выделить:
Увеличение потребления памяти на 10% в сравнении с интерпретацией без JIT-компиляции.
JIT работает только для x86/x86–64 архитектур, но поддержка ARM64 запланирована.
Замечания по сборке Erlang/OTP 24 из исходников:
Для поддержки JIT-компиляции, сборка должна осуществляться компилятором с поддержкой C++17. Проверить работоспособность можно с помощью вызова: erlang: system_info (emu_flavor). В качестве альтернативы может быть исползован официальный докер-образ.
Другие изменения:
Выполнение EEP 54 (Erlang Enhancement Process), призванного реализовать вывод более человекочитаемых сообщений об ошибках во встроенных функциях. Этот механизм так же может быть использован в библиотеках или приложениях. Пример из твиттера Хосе Валима.
Интерфейсы графических компонентов, например Observer’а, были переписаны на wxWidgets 3.
Поздравляю сообщество разработчиков на BEAM-языках с значительным релизом, призываю обновить Erlang/OTP, для получения бесплатного прироста производительности!
>>> Подробности
Выпуск включает в себя более 1400 коммитов, изменивших около полумиллиона строк. Ключевым нововведением является добавление JIT-компилятора «BeamAsm» в виртуальную машину Erlang’а (BEAM). Попытки реализации данного функционала предпринимались на протяжении ~10 лет и наконец увенчались успехом.
Историю добавления JIT в BEAM можно прочитать в блоге.
Комментарии разработчиков и пользователей о производительности:
Цитата из описания pull-запроса с JIT-функционалом:
Насколько BeamAsm быстрей интерпретатора? Данный показатель в значительной степени зависит от того чем занимается ваше приложение. Например, число estone’ов, в модуле для оценки производительности, возросло на 50%, т.е. теперь, за тоже время выполняется в половину больший объём работы. Разбег в ускорении отдельных тестов варьируется от 170% (сопоставление с образцом) до близкого к нулю (обработка больших сообщений). Большой прирост наблюдается в нагрузке с интенсивными вычислениями, а код с акцентом на обмен сообщениями — практически не ускорился.
Если запустить тесты разборки JSON из комплекта Poison или Jason, наблюдается ускорение от 30 до 130 процентов (в среднем ~70%). В некоторых бенчмарках BeamAsm даже быстрее чем jiffy — json-парсер написанный на Си.
Хосе Валим, создатель языка программирования Elixir, также работающего поверх виртуальной машины BEAM, успел оценить ускорение полученное с добавлением JIT-компиляции:
Одним из многих положительных эффектов JIT оказалось сокращение времени сборки сервера hexpm (включая зависимости) с 111 секунд до 77, что на 31% быстрее. :)
Из подводных камней можно выделить:
Увеличение потребления памяти на 10% в сравнении с интерпретацией без JIT-компиляции.
JIT работает только для x86/x86–64 архитектур, но поддержка ARM64 запланирована.
Замечания по сборке Erlang/OTP 24 из исходников:
Для поддержки JIT-компиляции, сборка должна осуществляться компилятором с поддержкой C++17. Проверить работоспособность можно с помощью вызова: erlang: system_info (emu_flavor). В качестве альтернативы может быть исползован официальный докер-образ.
Другие изменения:
Выполнение EEP 54 (Erlang Enhancement Process), призванного реализовать вывод более человекочитаемых сообщений об ошибках во встроенных функциях. Этот механизм так же может быть использован в библиотеках или приложениях. Пример из твиттера Хосе Валима.
Интерфейсы графических компонентов, например Observer’а, были переписаны на wxWidgets 3.
Поздравляю сообщество разработчиков на BEAM-языках с значительным релизом, призываю обновить Erlang/OTP, для получения бесплатного прироста производительности!
>>> Подробности
Ещё новости по теме:
18:20