注目★★★★★Hacker News
epoll vs io_uring:Linuxの非同期I/Oはどちらが速いか
30秒で把握
- 1epollは1イベント2システムコール・io_uringはバッチ処理でコストを大幅削減
- 2io_uringのSQPOLLで定常時のシステムコールをほぼゼロ化できるがCPU常時消費がトレードオフ
- 3Linux 5.1以降の環境であればio_uring移行を検討・カーネルバージョン確認が先決
要約
著者はリバースプロキシ「TinyGate」の性能改善を目的に、Linuxの非同期I/O機構であるepollとio_uringを比較検証した。epollは「I/Oが可能になったとき」を通知する準備モデルで、1イベントごとにepoll_wait+read()の2システムコールが発生し、コネクション数が増えるとコンテキストスイッチのオーバーヘッドが大きくなる。io_uring(Linux 5.1以降・2019年)は「I/Oが完了したとき」を通知する完了モデルで、共有リングバッファを使い、バッチ単位でシステムコールをまとめられる。SQPOLL設定では専用カーネルスレッドがポーリングを担い、定常時のシステムコールをほぼゼロにできる一方、CPUを常時消費する点がトレードオフとなる。
あなたへの影響
Linuxサーバを開発・運用するエンジニアは、高負荷な非同期I/Oが必要なアプリにおいてepollからio_uringへの移行を検討する価値がある。
推奨:ただしio_uringはLinux 5.1以降が前提のため、まず自環境のカーネルバージョンを確認し、古いディストリビューション使用時は対応状況を把握した上で評価してほしい。