1

パケット サイズが 1500 バイトの場合と比べて、小さなサイズのパケット (つまり 64 バイト) の場合、マシンのスループットが非常に悪いのはなぜですか?

私は GIGABIT NIC カードを持っており、1500 バイト サイズのパケットを 80MB/s で送信できますが、64 バイト サイズのパケットの場合、約 25MB/s をほとんど理解できません。

1500 バイトのパケットの場合、ライン レートに到達するには約 80k PPS を送信する必要があり、64 バイトの場合は約 140 万 PPS を送信する必要があることがわかっています。

しかし、サイズの小さいパケットのスループットに大きなばらつきがあるのはなぜですか??

編集:メモリ マッピングを使用して、Linux のユーザー空間からカーネル空間にパケットを送信し、ネットワーク ドライバーに直接書き込んで送信しています。また、64 バイトのパケットと 1500 バイトのパケットを比較すると、CPU 使用率が非常に低く、同じであることがわかります。

4

3 に答える 3

2

しかし、サイズの小さいパケットのスループットに大きなばらつきがあるのはなぜですか??

CPU の負担。サイズに関係なく、出力される各パケットは、インターフェイスに到達する前に多くの処理を通過します。別の言い方をすれば、小さなパケットと大きなパケットを送信する「コスト」は同程度です。

これに興味がある場合は、Linux カーネルの "GSO" と "UFO" を調べることをお勧めします。これは、このために特別に開発されたものです。

于 2012-11-16T06:21:28.717 に答える
1

パケットヘッダーの送信に時間がかかります。DMA バッファのセットアップ、パケット ヘッダーの処理などに時間がかかります。これらの余分な作業はすべて、送信できる実際のペイロードの量を減らします。

于 2012-11-16T06:21:52.953 に答える
0

これについて考えてみてください。各パケットのヘッダーには、ペイロード(データ)のサイズといくつかの一般的なデータが含まれています。ヘッダーが16バイトだとしましょう。

64バイトの1000パケットを送信する場合は、を送信します1000 * (64 + 16) = 64000 + 16000 bytes

ワンショットで送ればそれだけです64000+16 bytes

于 2012-11-16T06:24:02.557 に答える