要約
- 受信ライブロックでは、到着割り込みがCPUを使い切り、プロトコル、送信、アプリケーションが完了しない。装置は動いているのに有効スループットはゼロになる。
- MogulとRamakrishnanは、割り込みをポーリング開始の合図に限定し、ラウンドロビン、処理量の上限、早期破棄、後段キューからの帰還、CPU時間の上限を組み合わせた。上限のないポーリングも失敗した。
- 実験は単一CPUの遅いDECstationと10 Mbit/s Ethernetによる。1回5〜10パケットという値は、その構成での結果であり、現代の既定値ではない。
忙しさと完了は別の指標だった
割り込みは、通常の処理を中断してハードウェア事象に応答する仕組みである。到着が少ないときは低遅延を実現する。しかし入力が処理能力を超えると、優先権そのものが進行を妨げる。
論文が扱った4.2BSD系の構造では、受信割り込みがパケットをインターフェースからIP入力キューへ移した。その先のプロトコル処理は低い優先度で走るため、次の到着に中断される。キューが満杯になると、すでにCPUを使ったパケットが捨てられ、アプリケーションにも出力インターフェースにも届かない。
入力が減れば復帰するのでデッドロックではない。過負荷が続く間だけ、処理は活発なのに前進がない。著者たちはスループットを「最終消費者へ届いた量」と定義し、受信件数と明確に分けた。
割り込み優先度が見えないスケジューラになった
通常のスケジューラが公平性を決める前に、固定の割り込み優先度が受信を選んでいた。送信完了、経路保守、管理処理、ユーザープロセスは後回しになる。
割り込みをまとめれば1件当たりの費用は下がり、損失なしで受け取れる上限は上がる。しかし崩壊点が移るだけで、出口の番は保証されない。
割り込みはポーラーを起こし、CPUを所有しない
変更後のカーネルは軽負荷時の割り込みを残した。負荷が高いと、ハンドラは処理要求を記録してポーリングスレッドを起こし、そのデバイスの割り込みを無効のままにした。
スレッドは受信と送信のイベント源を順番に訪れ、各コールバックにパケット数の上限を渡した。保留がなくなった時だけ割り込みを戻す。インターフェースから受け入れたパケットは、別の優先度境界に置くのではなく、可能な限り完了側へ進めた。
純粋なポーリングは静かな時間にCPUを浪費し、遅延を増やす。純粋な割り込みは飽和時に独占を生む。混合方式は、予測不能な最初の事象を割り込みで発見し、連続化した負荷を上限付きポーリングで配分した。
上限を外すと再び止まった
受信コールバックの上限をなくすと、常に次のパケットが見つかり、ポーリングループへ戻らなくなった。送信完了が処理されず、出力記述子が解放されない。出力キューが満ち、有効スループットは再びほぼゼロまで落ちた。
ポーリングという名前だけでは公平性は生まれない。実験機では5〜10パケットの上限が安定していたが、大きい単位は呼び出し費用を減らす一方、遅延と飢餓を増やす。著者は別のCPUやNICでは別の値になると明記した。
投資する前に捨て、後段の状態を返す
すべてを完了できない過負荷では、インターフェースで捨てる方が、ドライバ、プロトコル、キューを通した後で捨てるより無駄が少ない。さらに後段が排出できない事実を入口へ返さなければならない。
screendの試験では、キューが75%で入力を止め、25%で再開し、約1ミリ秒のタイマーを安全弁にした。値は恣意的だと論文自身が述べる。持ち運べるのは、後段の停滞を入場制御へ戻す考え方である。
10ミリ秒の窓でネットワーク処理のCPUサイクルを測り、割当を超えると入力を止める仕組みも試した。ローカル操作は改善したが、リモート通信では破棄の影響が残った。公平な時間配分は新しい回線容量ではない。
測定値には実験条件が付く
被験機はDigital UNIX V3.2のDECstation 3000/300で、利用可能なAlphaのうち最も遅いものを意図的に選んだ。2本の空いた10 Mbit/s Ethernetを結び、各試行で4バイトのUDPペイロードを持つ10,000パケットを送った。送信は厳密な一定間隔ではなく、レートは数秒の平均だった。
元のカーネルとscreendでは約2,000 packet/sを超えると悪化し、約6,000 packet/sで完全なライブロックになった。screendなしのピークは約4,700 packet/sだった。報告は高速LANや新しいCPUへの外挿を禁じ、真のSMP動作も未検証としている。早期破棄は「いつ捨てるか」を改善したが、「どのパケットを守るか」は解いていない。
現在のLinux NAPIも、割り込みでポーリングを予定し、処理中はIRQを抑え、予算で1回の作業を区切る。これは有用な現代的対照であり、すべての過負荷が同一原因だという証明ではない。
Google ResearchはMogulのDEC/Compaq WRL、HP Labs、Googleでのネットワーク研究を紹介している。受信ライブロック論文はRamakrishnanとの共同成果である。歴史的な基準は簡潔だ。出口に届かない忙しさを、性能と呼んではならない。
出典
- MogulとRamakrishnan — WRL Research Report 95/8
- Stanford授業アーカイブ — ACM論文ミラー
- USENIX ATC 1996 論文記録
- ACM TOCS版とDOI
- Google Researchの論文記録
- Jeffrey C. Mogul — Google Research
- Google Research公式本人写真
- LinuxカーネルNAPI文書
- Linux Symposium 2003 論文集 — NAPI
- Linuxのネットワーク予算とバックログ
- Lu Heng — Running-Code Primacy
- Lu Heng — Why Reality, Not Advocacy, Is the Product
会員向け解説
プロフィールの詳細
適切な会員レベルでログインすると、解説全文と出典メモをご覧いただけます。
Strategic Circle 限定
Strategic Circle
すべての読者に公開されています。参加してログインすると プロフィール解説 を閲覧できます。
Strategic Circle に参加Leadership Alliance 会員限定
Leadership Alliance
対象となる IP 資産の所有者・管理者向けです。ログインすると Leadership Alliance の解説を閲覧できます。
Leadership Alliance に参加
