2011-09-07 71 views
2

我參考了有關用於大型文件傳輸的可靠UDP與TCP的不同線程。但是,在決定選擇TCP over UDP(並向UDP添加可靠性機制)之前,我想要測試UDP & TCP的性能。在Linux或Windows中是否有任何實用工具可以給我這個性能基準?用於基準udp和tcp性能用於大數據傳輸的實用程序

我發現Iperf就是這樣一個實用程序。但是當我在兩臺linux機器上使用Iperf同時使用udp和tcp發送數據時,發現TCP對於10MB數據的性能要優於UDP。這對我來說令人驚訝,因爲衆所周知的事實是UDP比TCP執行得更好。

我的問題是:

  1. UDP是否總是比TCP更好的表現?或者是否有任何特定的 情況,其中UDP比TCP更好。

  2. 是否有任何已發佈的 基準來驗證此事實?

  3. 是否有任何標準的工具來衡量特定網絡上的TCP和UDP性能?

由於提前

+0

你在調查什麼規模的性能,10GigE,40GigE +? –

回答

2

的區別是有兩個方面,概念和實踐。有關性能的許多文檔都是從90年代開始的,當時CPU的功耗顯着快於網絡速度,網絡適配器非常基礎。

考慮到,由於開銷較少,UDP在技術上可能更快,但現代硬件速度不夠快,無法使最小數據包大小的1 GigE通道飽和。從校驗和到分段到完全卸載,任何卡都可以使TCP加速。

當你需要多播時,使用UDP,即分發說不只是說幾個收件人。當TCP窗口和擁塞控制未優化時使用UDP,例如高延遲,高帶寬WAN鏈路:例如,請參閱UDT和WAN加速器。

查找10 GigE NIC的任何性能文檔。最基本的問題是硬件速度不夠飽和NIC,因此許多供應商提供全面的TCP/IP堆棧卸載。另外考慮一下文件服務器,比如NetApp等,如果使用了軟件,你可能會看到將MTU調整爲更大的尺寸以減少CPU開銷。這在低端設備中很受歡迎,例如ReadyNAS的SOHO NAS設備,Synology等。如果卸載整個堆棧,使用高端設備,那麼如果硬件能夠支持,則使用普通以太網MTU尺寸和Jumbograms可以實現更好的延遲過時。

iperf幾乎是網絡測試的一個工具,但它並不總是在Windows平臺上最好的。你需要看看微軟自己的工具NTttcp:

http://msdn.microsoft.com/en-us/windows/hardware/gg463264.aspx

注意這些工具更多的是關於測試網絡,而不是應用程序的性能。微軟的工具變得極端,基本上有一個大容量的內存鎖定緩衝區排隊等待NIC儘快發送而沒有交互性。該工具還包括一個熱身會話,以確保在測試期間不需要malloc。

+0

感謝您的回覆史蒂夫。有一些應用程序級別的開源實現,例如UDT,用於大型和可靠的文件傳輸,這些傳輸依賴於udp更快的相同原理。我想說服自己,在我的網絡中,UDP比TCP快X倍。如果它提供了巨大的性能優勢,那麼值得嘗試一些可靠的UDP實現。 – atv

+0

@atv我在回答中提到了UDT,它在廣域網加速器中用於高延遲高帶寬鏈接。 –

0
  1. UDP並不總是比TCP更快。有很多TCP性能轉換包括RSS/vRSS。例如,Linux-on-HyperV上的TCP可以獲得30Gbps,而Linux上的Azure可以獲得20G +。 //我認爲對於Windows VM來說,它是相似的;也在其他virt平臺上,例如XEN,KVM,TCP做得更好。

  2. 有很多工具來衡量:iperf的,ntttcp(Windows)中,ntttcp換Linux的,的netperf等:

    iPerf3:https://github.com/esnet/iperf

    的Windows NTTTCP:https://gallery.technet.microsoft.com/NTttcp-Version-528-Now-f8b12769

    ntttcp - 用於Linux的:https://github.com/Microsoft/ntttcp-for-linux

    Netperf的:http://www.netperf.org/netperf/

相關問題