2009-06-18 10 views
3

私は、複数のIntelネットワークカード(Intel EXPI9402PT、82571EBチップに基づく)用にドライバe1000eを使用しています。問題は、複数のインターフェイスで最大速度(1GB)を利用しようとすると、各インターフェイスの速度が低下し始めることです。複数のネットワークカードの同じドライバ - パフォーマンスのボトルネック?

カーネルスペースに私のドライバがあり、パケットを送信したばかりです。それだけでパケットをallocs:

skb = dev_alloc_skb(packet->len); 

、それらをすることによって、それらを送信します。

result = dev->hard_start_xmit(skb,dev); 

各インタフェースはドライバのその自身インスタンスを持っています。

1つのインターフェイスに対しては、120435948バイト/秒が得られます。

2つのインターフェイスの場合、61080233バイト/秒と60515294バイト/秒が得られます。

私は、28564020バイト/秒、27111184バイト/秒、27118907バイト/秒という3つのインターフェースを取得しています。

何が原因なのですか? hard_start_xmit関数は再入可能ですか?

答えて

3

これは、マザーボードの帯域幅が不足している可能性が高いためです。

3 Gb/sよりも遅いバスで3 Gb/sの情報をポンピングしようとすると、問題が発生します。これらのカードはどのようなバスに入っていますか?

修正があるかもしれませんが、これはボードの物理的な制限だと思いますが、必ずしもあなたのドライバではありません。

+0

私はPCI Express x4とx8を持っていますが、それらは十分に速くなければなりません。 –

0

2つのインターフェイスで数値を加算すると、結果は1つのインターフェイスの出力よりわずかに大きくなります。私にとっては、これは、両方のインターフェースを使用するとシステムの効率が少し向上していることを意味します。考えられる理由の1つは、CPU使用率の向上またはバス使用率の向上です。しかし、その結果はわずかに改善され、おそらくボトルネックを引き起こすリソースが121MB/sに制限されていることを示していることに注意してください。負荷(3つのアクティブインターフェイス)がこの制限を超えると、パフォーマンスは82MB/sに急激に低下します。

いくつかの追加の測定せずに正確な原因を突き止めるのは難しいですが、私の推測が

  1. CPUが制限されることになります。システムに複数のCPUを追加すると、問題としてこれを排除するでしょう。
  2. メモリ制限:デバイスがx4またはx8スロットにあっても、メインメモリ(つまりSKBが存在する場所)への接続がその負荷を維持できない場合があることに注意してください。
  3. 割り込みが制限されています:1秒あたりのパケット数が多いため、割り込みコンテキストの入出力がパフォーマンスを低下させる可能性があります。これは、ほとんどのドライバが割り込みの合体に適している可能性は低いですが、可能であればドライバをポーリングモードに切り替えてこれを排除します。
関連する問題