Think Distributed

Database and Distributed Systems

Erlang OTP 21 の変更点

My OTP 21 Highlights – A Blog from the Erlang/OTP team – The Erlang/OTP team at Ericsson, the implementors and maintainers of Erlang/OTP.

  • IO で port ではなく nif を使うようになった。
    • ベンチマークでは read で 2.8 倍スループットが上がっていた。
    • もともと port 上で動いていたのは dirty IO scheduler 上で IO を動かすためだった模様。
  • I/O polling options in OTP 21 – A Blog from the Erlang/OTP team – The Erlang/OTP team at Ericsson, the implementors and maintainers of Erlang/OTP.
    • +K option が消えてカーネル空間での poll 実装がデフォルトになった。
    • これまではユーザー空間(というか Erlang スケジューラー)での poll だった。
    • OTP 21 では --disable-kernel-poll を指定すれば OTP 20 までの挙動にできるらしいが、コンパイル時に指定する必要がある。
    • +IOt 3 とかで IO イベントを通知するためのスレッド数を指定できる。
    • +IOp 4 で pollset の数を指定できる。カーネル空間で複数スレッドからの pollset へのロック競合が起きている場合に増やすとよいが普通は 1 で良い。
  • プロセスへのシグナルの変更
    • link と monitor のシグナル通知が各プロセスに直接送られるようになった。
    • 従来は supervisor が connection (link や monitor される/するの関係)を一元管理していたためボトルネックになっていた。
  • logger が追加された
  • maps:iterator/0 and maps:next/1が追加された
  • io_lib:format/3 が追加された
    • ログ出力ライブラリを作る時に使える。