要約

  • 受信ライブロックでは、到着割り込みが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との共同成果である。歴史的な基準は簡潔だ。出口に届かない忙しさを、性能と呼んではならない。

出典