2016-04-21 102 views
-1

我正在研究虛擬化環境(Linux over HyperV)。虛擬NIC的Linux驅動程序支持TSO和GSO(tcp分段爲ON,通用分段爲ON)。Linux TCP:數據包分段?

現在,我創建TCP套接字並將發送緩衝區設置爲128K。 但基於ifconfig數據(TX字節和TX數據包),平均數據包大小約爲11 K.所以我的問題是,我的數據包在哪裏被分割(從128K到11K)?如何在套接字選項或TCP選項中控制/配置它?

謝謝!

===========編輯==================

我可以在一個10G的8Gbps達到吞吐量的應用網絡有32個TCP連接 - 在這種情況下,平均數據包大小大約爲20千字節,這非常好;但是當我將TCP連接增加到256時,吞吐量僅爲1Gbps,因爲NIC上的數據包大小降至大約3 KB。

我知道數據包的大小是對性能至關重要的,因爲處理交通的成本是每包,而不是每個字節,所以對NIC的數據包,它是否越大越好。

因此,我的問題是:如何增加TCP數據包大小?有沒有任何TCP設置控制這個?

+2

總之,根本不是。段的大小是NIC的MTU減去幾個字節的大小。細分是正常的事情,屬於「不是你的業務」。 TCP(概念上)是_stream_。它既不知道消息也不知道數據報或類似的東西。無論在「線路」上發生了什麼,您都可以寫入流中並從中讀取,而不管這些事情是什麼。另外,那些通過虛擬NIC廣告的11kB已經是一個強大的MTU了,大於以太網上最大的jumbogram大小。 – Damon

+0

謝謝。我的應用程序在具有32個TCP連接的10G網絡中可以達到8Gbps - 在這種情況下,平均數據包大小約爲20K字節,這非常好;但是當我將TCP連接數增加到256時,吞吐量僅爲1Gbps,因爲NIC上的數據包大小約爲3KBytes。我知道數據包的大小對性能至關重要,因爲處理流量的成本是每個數據包的,而不是每個字節,所以在NIC上的數據包,如果更大,它會更好。所以,我的問題是:我如何增加TCP數據包大小?有沒有任何TCP設置控制這個? –

回答

0
  • 設置套接字選項SO_SNDBUF,SO_RCVBUF可能有幫助,但TCP IP並不保證當接收/發送的大塊大小。