NAPIについて

Submitted by Hiroshi Miura on 水曜, 2006-12-27 11:35

ネットワークの高負荷を処理する。Linuxカーネル2.4のネットワークスタックは、ほとんどのところでとてもよく動いてくれる。ただ一つだけ課題があるとすれば、非常に高い負荷の処理なのだ。非常にたくさんのパケットをシステムが受け取ると、割り込み処理が、他の全ての処理をなおざりにしてしまうのだ。最悪の場合、ユーザスペースの処理がいっさい行われなくなる。高負荷は、2.4.10システムを完膚なきまでダウンさせることができるのだ。

Ingo Molnarは、この問題と、関連するソフトウエア割り込み処理にからむ必須事項に取り組むことを決意した。彼のパッチは、「ソフト mitigation」と呼ばれるテクニックを実装したものである。このパッチのキモは、ハードウエア割り込みの割合がある閾値を越えた場合、シンプルにもカーネルは割り込みをtickインターバル(ほとんどのシステムでは10ms)の間、不許可にするのだ。システムは、一息ついて、そのあいだに処理が追い付くことができる。

しかし、このアプローチにはいくつか問題がある。定数値の閾値をもつと、すべての状況において、動作させることができない。最大tolerable 割り込みレートは、さまざまなこと、例えば、CPU速度や割り込み処理のコスト、システムで他におこっていることなどなどに影響される。単純に割り込みを不可にするのは容易(他に協調して動くドライバやハードウエアがないことが条件で)だが、同じ割り込みラインを共有する他のデバイスのパフォーマンスを維持することは難しい。単純にネットワークインターフェースの割り込みを10mS停止すれば、大きなパケットのドロップが始まり、深刻なネットワークパフォーマンスの問題が発生してしまう。

さらに、もっとも大きな問題は、他に解決方法が存在していて、テストが続けられていることだ。NAPI("New API")コードは、Jamal Hadi Salim, Robert Olssson, Alexey Kuznetsovにより開発され、割り込み負荷問題やその他の問題を処理している。NAP:Iは昨年のKernel Summitで議論されたテクニックをベースにしていて、開発はそのときよりさらに進んでいる。たぶん、これまでは、十分に注目されてこなかったが、この議論により注目をあつめることになるに違いない。というより、プロジェクトが公式なWebサイトをたてれば、本当に良くしられることになるのだが....

NAPIは、DMAバッファ「リング」を実装した、最新のネットワークアダプタ上で動作する。各パケットは受信のたびに、リングの次のバッファへと置かれる。通常、プロセッサはパケットごとに割り込みをうけ、システムはリング上のパケットを空にしようとする。NAPIパッチは、アダプタによる最初の割り込みに対して、割り込みを抑制するようアダプタに反応する。そして、リングをチェックし、occasionally as it processes packets and pull new ones without the need for further interrupts.

長い間ネットで活動する人たちの間では、このアナロジにとて慣れている。1980年代、我々の多くは、電子メールが到着するたびに、beep音(割り込み)するよう(biff)でシステムを設定したものだ。2001年の現代、(biffによる)メール到着音はもはや使われてない。いつもなにかメールが届くし、システムが知らせる必要ももはやないからだ。同様に負荷の高いシステムの場合、処理すべきパケットが四六時中届くため、割り込む必要などないのだ。

ネットワークのコードがインターフェースをチェックし、到着したパケットがなければ、割り込みを再度有効にして、ポーリングを中止する。

NAPIは2.4ネットワークスタックで現在扱っているパケットバックログキューを取り除くことで、すこし進んで処理を行っている。そのため、システムメモリに保存されパケットは再構成される。もし負荷によりパケットをドロップしなければならないならば、カーネルにコピーされる前に始末される。

NAPIは、ネットワークドライバのインターフェースに多少の変更を必要とする。しかし、変更は追加的なものになるよう設計されてきた。対応していないドライバは、これまでと同じ機能を提供できる(そう、少なくとも2.4.xでは)が、NAPIにより提供される高い性能をだすには、変更が必要だ。

LinusはNAPIのアプローチを好んでいるが、いつマージするかについては言及していない。普通なら2.5へマージされ、そして可能なら後で 2.4へバックポートされることを期待するだろう。現代では、しかし、だれも分からないのだ。「システムレスポンスを押さえる」最後の手段として、 Ingoのパッチの一部として使われる可能性もある。

NAPIに興味を持った方は、使われているテクニックを記述したUSENIXの論文をダウンロードすることができる。実際のコードは、Robert OlssonのFTPサイトから入手可能だ。

新しいコメントの投稿

  • Allowed HTML tags: <a> <p> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • 行と段落は自動的に分けます。

フォーマットのオプションに関する詳細情報

© 2010 Your Name. m