私は仮想化環境(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設定はありますか?
要するに、まったくではありません。セグメントのサイズは、NICのMTUから数バイトを引いたものです。セグメンテーションは通常のもので、「あなたのビジネスではない」に該当します。 TCPは(概念的に)_stream_です。どちらもメッセージやデータグラムなどを知りません。あなたは、そのようなものに不可知論である "ワイヤー"上で何が起こっているかにかかわらず、ストリームに書き込み、ストリームから読む。また、あなたの仮想NICによって宣伝されている11kBは、イーサネット上の最大ジャンボグラムサイズよりも大きい大きなMTUです。 – Damon
ありがとうございます。私のアプリケーションは、32のTCP接続を持つ10Gネットワークで8Gbpsに達することができます。この場合、平均パケットサイズは約20Kバイトです。 TCP接続数を256に増やすと、NICのパケットサイズが約3KByteなので、スループットは約1Gbpsにすぎません。私はパケットサイズがパフォーマンスにとって非常に重要であることを知っています。トラフィックを処理するコストはパケットごとでありバイト単位ではないので、NIC上のパケットは大きければ良いです。だから、私の質問です:私はどのようにTCPパケットサイズを増やすのですか?これを制御するTCP設定はありますか? –