3

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

特定のパケットを送信するように設計されたカーネル空間に独自のドライバーがあります。次の方法でパケットを割り当てるだけです。

skb = dev_alloc_skb(packet->len);

そして彼らはそれらを次のように送ります:

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

各インターフェイスには、ドライバーの独自のインスタンスがあります。

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

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

3 つのインターフェイスの場合、28564020 バイト/秒、27111184 バイト/秒、27118907 バイト/秒が得られます。

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

4

2 に答える 2

3

これは、マザーボードの帯域幅が不足していることが原因である可能性が最も高いです。

3 Gb/s より遅いバスを介して 3 Gb/s の情報を送ろうとすると、問題が発生します。これらのカードはどのようなバスに搭載されていますか?

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

于 2009-06-18T11:17:27.213 に答える
0

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

追加の測定を行わずに正確な原因を特定することは困難ですが、私の推測では次のようになります。

  1. CPU の制限 : システムに複数の CPU を追加すると、これは問題から除外されます。
  2. メモリ制限 : デバイスが x4 または x8 スロットにある場合でも、メイン メモリ (つまり、SKB が存在する場所) への接続がその負荷を維持できない可能性があることに注意してください。
  3. 割り込みが制限されている : 1 秒あたりのパケット数が十分に高く、割り込みコンテキストの内外の切り替えによってパフォーマンスが低下している可能性があります。ほとんどのドライバーは割り込み合体に優れているため、これはあまり起こりそうにありませんが、可能であれば、ドライバーをポーリング モードに切り替えて、これを除外してください。
于 2009-06-18T20:03:01.750 に答える