我正在研究虛擬化環境(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設置控制這個?
總之,根本不是。段的大小是NIC的MTU減去幾個字節的大小。細分是正常的事情,屬於「不是你的業務」。 TCP(概念上)是_stream_。它既不知道消息也不知道數據報或類似的東西。無論在「線路」上發生了什麼,您都可以寫入流中並從中讀取,而不管這些事情是什麼。另外,那些通過虛擬NIC廣告的11kB已經是一個強大的MTU了,大於以太網上最大的jumbogram大小。 – Damon
謝謝。我的應用程序在具有32個TCP連接的10G網絡中可以達到8Gbps - 在這種情況下,平均數據包大小約爲20K字節,這非常好;但是當我將TCP連接數增加到256時,吞吐量僅爲1Gbps,因爲NIC上的數據包大小約爲3KBytes。我知道數據包的大小對性能至關重要,因爲處理流量的成本是每個數據包的,而不是每個字節,所以在NIC上的數據包,如果更大,它會更好。所以,我的問題是:我如何增加TCP數據包大小?有沒有任何TCP設置控制這個? –