我提到了关于大文件传输的可靠UDP与TCP的不同线程。但是,在决定选择UDP over TCP(并将可靠性机制添加到UDP)之前,我想对UDP&的性能进行基准测试。 TCP。在Linux或Windows中是否有任何可以为我提供此性能基准的实用工具?
我发现Iperf就是这样一种效用。但是当我在两台Linux机器上使用Iperf使用udp和tcp发送数据时,我发现TCP对于10MB数据的性能优于UDP。这对我来说是令人惊讶的,因为众所周知,UDP的性能优于TCP。
我的问题是:
UDP总是比TCP更好吗?还是有任何具体的 UDP优于TCP的场景。
有没有发表过的 验证这一事实的基准?
是否有任何标准实用程序可以测量特定网络上的tcp和udp性能?
先谢谢
答案 0 :(得分: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
几乎是用于网络测试的goto工具,但在Windows平台上并不总是最好的。您需要查看Microsoft自己的工具NTttcp:
http://msdn.microsoft.com/en-us/windows/hardware/gg463264.aspx
请注意,这些工具更多的是测试网络而不是应用程序性能。微软的工具走向极端,基本上是一个大的内存锁定缓冲区,排队等待NIC尽可能快地发送而没有交互性。该工具还包括一个预热会话,以确保在测试期间不需要malloc。
答案 1 :(得分:0)
UDP并不总是比TCP快。有许多TCP性能转向,包括RSS / vRSS。例如,Linux-on-HyperV上的TCP可以获得30Gbps,而在Azure-on-Azure上可以获得20G +。 //我认为对于Windows VM来说,它是相似的;同样在其他虚拟平台上,如XEN,KVM,TCP甚至做得更好。
有很多工具需要衡量:iPerf,ntttcp(Windows),ntttcp-for-Linux,netperf等:
iPerf3:https://github.com/esnet/iperf
Windows NTTTCP:https://gallery.technet.microsoft.com/NTttcp-Version-528-Now-f8b12769
ntttcp-for-Linux:https://github.com/Microsoft/ntttcp-for-linux
Netperf:http://www.netperf.org/netperf/