2016-04-21 18 views
-1

私は仮想化環境(HyperV以上のLinux)に取り組んでいます。仮想NIC用のLinuxドライバはTSOとGSOをサポートしています(TCPセグメンテーションはオンで、一般セグメンテーションはオンです)。Linux TCP:パケット分割?

ここでは、TCPソケットを作成し、送信バッファを128Kに設定しました。 ifconfigデータ(TXバイトとTXパケット)に基づいて、平均パケットサイズは約11 Kです。

私の質問はどこにありますか(128Kから11Kへ)どのようにソケットオプションやTCPオプションでこれを制御/設定するのですか?

ありがとうございました!

=========== EDIT ==================

私は10Gで8Gbpsのスループットに達することができるアプリケーションを持っています32のTCP接続を持つネットワーク - この場合、平均パケットサイズは約20キロバイトです。 TCP接続を256に増やすと、NICのパケットサイズが約3 KByteになるため、スループットは約1Gbpsになります。

トラフィックを処理するコストがパケットごとにではなくバイト単位であるため、パケットサイズはパフォーマンスにとって非常に重要であることがわかっています。そのため、NIC上のパケットは大きければ良いです。

ご質問:私はどのようにしてTCPパケットサイズを増やしますか?これを制御するTCP設定はありますか?

+2

要するに、まったくではありません。セグメントのサイズは、NICのMTUから数バイトを引いたものです。セグメンテーションは通常のもので、「あなたのビジネスではない」に該当します。 TCPは(概念的に)_stream_です。どちらもメッセージやデータグラムなどを知りません。あなたは、そのようなものに不可知論である "ワイヤー"上で何が起こっているかにかかわらず、ストリームに書き込み、ストリームから読む。また、あなたの仮想NICによって宣伝されている11kBは、イーサネット上の最大ジャンボグラムサイズよりも大きい大きなMTUです。 – Damon

+0

ありがとうございます。私のアプリケーションは、32のTCP接続を持つ10Gネットワ​​ークで8Gbpsに達することができます。この場合、平均パケットサイズは約20Kバイトです。 TCP接続数を256に増やすと、NICのパケットサイズが約3KByteなので、スループットは約1Gbpsにすぎません。私はパケットサイズがパフォーマンスにとって非常に重要であることを知っています。トラフィックを処理するコストはパケットごとでありバイト単位ではないので、NIC上のパケットは大きければ良いです。だから、私の質問です:私はどのようにTCPパケットサイズを増やすのですか?これを制御するTCP設定はありますか? –

答えて

0

あなたの質問はちょっと混乱しているようですが、10GigEをLinuxで正しく動作させるには、いくつかの設定が必要です。

はこちらをご覧ください: ソケットオプションSO_SNDBUFの設定http://dak1n1.com/blog/7-performance-tuning-intel-10gbe/

0
  • を、SO_RCVBUFは役立つかもしれませんが、受信/送信されたときにTCP IPは、チャンクサイズを保証しません。