2011-05-25 5 views
2

Linux 2.6.xを実行する4コアマシンがあります。マシンはシングルホーム(すなわち、1つのNICを有する)である。Linuxネットワークスタックは、マルチコアマシン上で並列に動作しますか?

このマシンでは、ネットワーク上の4つの異なるホストとのネットワークI/Oを行う4つのプロセス(または1つのプロセスで4つのスレッド)を実行します。

質問:これらの4つのネットワークI/Oスレッドは並行して実行できますか? TCP/IPスタック(NICデバイスドライバを含む)が、複数のコアを完全に並列実行するためのすべての同時コードであると仮定できますか?ネットワークI/Oのどの段階でも、これらのスレッドはTCP/IPスタック内の共有リソースを取得しようとすることをブロックし、スタックの一部、つまりトップレベルにある4つのアプリケーションレベルのスレッドを部分的に逐次で完全に平行ではない?

+1

すべてのポート/ IRQを別のCPUにバインドできるので、複数のNIC(または複数のポートを持つ1つのNIC)を追加するほうがおそらく良いでしょう。 – Marcin

+0

チップをありがとう。 +1。 – Harry

答えて

0

はい、すべての4スレッドはネットワークIOを実行します(Linux 2.4以降の大きなカーネルロックは終了しています)。

(Linux 2.6.35を使用して)このペーパーで分析したように、64コアを持つマシンで競合が発生することに気づくでしょうが、ちょうど4つのコアとそれより新しいカーネルではおそらく競合に気付かないでしょう。

PS:割り込みをCPU 0に送信するだけのチップセットまたはネットワークカードがあっても、どのプロセッサにも割り当て可能なソフトウェア割り込みが行われているため、パケットの受信はすべてのコアに分散されます。 cat/proc/interruptsを使用して、ネットワークハードウェア割り込みがすべてのコアに分散しているかどうかを確認できます。

関連する問題