新しい API ( NAPIとも呼ばれる) は、 Linux カーネル内のネットワーク デバイスに割り込み軽減技術を使用するためのインターフェイスです。このようなアプローチは、パケット受信のオーバーヘッドを削減することを目的としています。その考え方は、受信メッセージの処理を、一度に処理する価値があるほど十分な量になるまで延期するというものです。
モチベーション
ネットワーク ドライバーを実装する簡単な方法は、着信パケットごとに割り込み要求(IRQ)を発行してカーネルに割り込むことです。ただし、IRQ の処理にはプロセッサ リソースと時間の面でコストがかかります。そのため、高速ネットワークでは単純な実装は非常に非効率になり、1 秒あたり数千のパケットでカーネルが絶えず割り込まれることになります。その結果、システム全体のパフォーマンスとネットワーク スループットが低下する可能性があります。
ポーリングは、割り込みベースの処理の代替手段です。カーネルは、割り込みを受けることなく、定期的に着信ネットワーク パケットの到着をチェックできるため、割り込み処理のオーバーヘッドがなくなります。ただし、最適なポーリング頻度を確立することが重要です。ポーリングが頻繁すぎると、まだ到着していない着信パケットを繰り返しチェックするため、CPU リソースが浪費されます。一方、ポーリングが低頻度すぎると、着信パケットに対するシステムの反応性が低下して遅延が発生し、着信パケット バッファーが処理される前にいっぱいになるとパケットが失われる可能性があります。
妥協策として、Linux カーネルはデフォルトで割り込み駆動モードを使用し、着信パケットのフローがネットワーク インターフェイスの「重み」と呼ばれる特定のしきい値を超えた場合にのみポーリング モードに切り替えます。
準拠ドライバー
NAPI インターフェイスを使用するドライバーは次のように動作します。
- パケット受信割り込みは無効です。
- ドライバーはカーネルにポーリング メソッドを提供します。このメソッドは、ネットワーク カードまたはDMAリング上の利用可能なすべての着信パケットを取得し、カーネルによって処理されるようにします。
- 許可されると、カーネルはデバイス ポーリング メソッドを呼び出して、一度に多数のパケットを処理できるようになります。
利点
- カーネルがポーリングする必要があるにもかかわらず、割り込みによって発生する負荷は軽減されます。
- パケットが並べ替えられる可能性は低くなりますが、順序が乱れたパケット処理がボトルネックになる可能性があります。[引用が必要]
- カーネルがすべての着信パケットを処理できない場合、カーネルはそれらをドロップするために作業を行う必要はなく、ネットワーク カードの着信リング バッファで単に上書きされるだけです。NAPI がない場合、カーネルは、処理する時間があるかどうかに関係なく、すべての着信パケットを処理する必要があり、スラッシングが発生します。
歴史
NAPI は、Alexey Kuznetsov、Jamal Hadi Salim、Robert Olsson による 3 年以上の取り組みの成果です。NAPI を組み込むための当初の取り組みは、コミュニティの一部のメンバーから抵抗を受けましたが、David Miller はNAPI の組み込みを確実にするために懸命に取り組みました。
導入前に、ウプサラ大学のネットワークで多くの実世界テストが行われました。実際、www.slu.se は最初の実稼働 NAPI ベースの OS であり、現在でも NAPI ベースの Bifrost/Linux ルーターによって稼働しています。pktgenトラフィック ジェネレーターもこの頃に誕生しました。pktgen は、実世界のトラフィックによって誘発されない NAPI シナリオのテストに広く使用されました。
参考文献
さらに読む
- Jamal Hadi Salim、Robert Olsson、Alexey Kuznetsov (2001-11-10)。Beyond softnet (PDF)。第 5 回 Linux Showcase & Conference (ALS '01)。pp. 165–172 。2011 年 3 月 6 日閲覧。古典的な NAPI 論文。
- Jonathan Corbet (2003-04-28). 「ドライバーの移植: ネットワーク ドライバー」. LWN.net . 2011-03-06に取得。
- Jonathan Corbet (2006-12-18). 「NAPI の再構築」. LWN.net . 2011-03-06閲覧。
- Jonathan Corbet、Alessandro Rubini、Greg Kroah-Hartman (2005 年 2 月)。「第 17 章: ネットワーク ドライバー」(PDF)。Linux デバイス ドライバー (第 3 版)。O'Reilly Media。ISBN 978-0-596-00590-0. 2011年3月6日閲覧。
外部リンク
- 初期の NAPI 作業[リンク切れ ]
- Linux Foundation の NAPI の説明は、Wayback Machineで 2016-06-11 にアーカイブされています。
- ネットワーク概要、2009 年 11 月 19 日、Linux Foundation、Rami Rosen 著 (2011 年 10 月 30 日のオリジナルからアーカイブ)
