Asayomu Tech
注目★★★★★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以降が前提のため、まず自環境のカーネルバージョンを確認し、古いディストリビューション使用時は対応状況を把握した上で評価してほしい。

詳細を読む → 元記事へ※ 本文は元記事をご確認ください (asayomu は要約のみ提供)

関連する記事

※ 外部記事の権利は原著作者に帰属します。著作権削除要請は copyright@asayomu.jp までご連絡ください(受領確認 24h・実処理 72h 以内)。