22.06.2021

Релиз 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, для получения бесплатного прироста производительности!

>>> Подробности

Источник.