2020 年 9 月 10–11 日に行われた Code BEAM STO にて、Erlang VM コアコミッターの Lukas Larsson 氏が発表中に Erlang/OTP の JIT 実装である BeamAsm のプルリクエストを送りました。
JIT の実装は AsmJit を利用したもので、AsmJit が対応している x86 / x86_64 に対応した JIT で、今後は AsmJit が ARM64 への対応を予定しているのでそちらに追従していく予定だそうです。
性能向上についてですが、NIF (C 拡張) でかかれた JSON ライブラリに対していくつかのベンチマークで、BeamAsm は高速だったと書かれています。
また、より複雑なアプリケーションでは、パフォーマンスが中程度に向上する傾向があるそうです。RabbitMQ でははシナリオに応じて、1秒あたり30-50%多いメッセージを処理できるようになったそうです。
詳細については PR や発表資料を見てみてください。
AsmJit の作者もツイッターでつぶやいていました。
Erlang/OTP を利用している側の感想
自社製品がどれだけ高速化されるかはわかりませんが、大変衝撃的なことです。Erlang/OTP の JIT 実装は相当前からチャレンジされていましたが、実際に PR が出るレベルまでには至っていませんでした。
ただ、今回のはかなり期待できます。
実際 BeamAsm を有効にした Erlang VM で自社製品をコンパイルして動かしてみたところ、問題なく動作しました。
とりあえず BeamAsm 入りで erl を動かしてみたログ。
Erlang/OTP 24 [DEVELOPMENT] [erts-11.0.4] [source-38a430ef92] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1] [jit] [sharing-preserving]Eshell V11.0.4 (abort with ^G)
1> erlang:system_info(emu_flavor).
jit
自社製品を検証できるサービスで動いている自社製品は、すでに BeamAsm 上で動作させてみています。今の所は特に問題なく動作しているようです。何かあればフィードバックしていきたいと思っています。
感想
OTP 24 で BeamAsm が入り、gen_udp_socket が入ると大変うれしい感じです。Facebook (WhatsApp) が静的 Erlang/OTP を作ってるっぽいので、Erlang 界隈にはとても素敵な話題が多くて大変うれしいです。
Erlang/OTP 使ってるよアピール
時雨堂では Erlang/OTP を利用している(NIF すら使っていない)、商用プロダクトである WebRTC SFU Sora を多くの企業に導入して頂いています。