TCP/IP协议栈设计—UDP最大传输速度测试
对千兆UDP传输速度进行了全面的测试和分析,测试结果可知,千兆UDP传输性能很好,最大达到927Mbit/S的传输速度。并为进一步对于TCP的传输速度测试做准备。
目录:
测试1:使用FPGA设计延迟=1mS,进行回环测试
测试2:使用FPGA设计延迟=10uS,进行回环测试
测试3:使用FPGA设计延迟=1uS,进行回环测试
测试4:使用FPGA设计延迟=80nS,进行回环测试
0:准备工作
使用测试工具:TCP&UDP助手、WireShark(协议分级统计)
UDP速度分析:理论最大时,无间隔发送,即有效数据段1440/1500=0.960 *千兆。
程序测试版本:tcpip_stack_v1_1
测试1:使用FPGA设计延迟=1mS,进行回环测试。
组帧发送延迟:以发送1440字节为例,时间约(发送数据1440个clk+帧头约50clk+状态机控制约50clk)*8nS = 12.4uS。按13uS 发送一帧UDP数据足够了。
理论最大速度:12uS/1012uS=0.118 ,即约12兆的速度。有效发送数据时间/总时间.
下面是TCP&UDP助手作为上位机测试结果,可见发送1440字节,其接收速度约1414800B/S,即1.135MB/S。显然,这个理论算的12M相差甚远,因此这个接收速度是错误的,没有参考价值。
在前期测试的时候,就发现了这个问题。说明免费的测试助手,功能受限,接收速度受限啊!后期要做更完善的测试,看来需要自己写一个定制的上位机了。
继续分析对应WireShark抓包的结果,如下。
可见,通过WireShark的统计->协议分级能看到,正确的UDP发送速度为11MB/S。此为正确接收速度。但与千兆的速度相比,还差近100倍。所以,还有很大的提速空间。
注:WireShark是全部截获了UDP数据,所以接收速度正确。而助手的速度上不去,显示是其接收能力跟不上,“漏掉”了许多UDP数据的。
使用网络调试助手再做对比测试。
测试结果如下,这个调试助手,没有测速的功能,且性能更差,因为连接后,再点就卡死了。
对应的WireShark抓取结果如下,可见其接收速度相同,就是11M。
同时,看window管理器,网络使用率1.18%,即和理论计算的一致,约1.18MB/S。因此也可以看这个来确定网络传输速度。
测试2:使用FPGA设计延迟=10uS,进行回环测试。
此时,以此类推,理论最大速度约为12uS/(12uS+10uS+1uS) = 0.521,即能达到500多兆的传输速度。
助手可见,其接收速度依然是1429920B/S,约1.36MB/S,再次证明该助手的性能受限!
此时,再看WireShark,发现其也开始卡了。好在没死机,只是运行变得很慢。
图中可见,此时,接收速度达到了468M。
此时查看Windows管理器,千兆网卡使用率达到53.64,与理论计算的52.1%一致。即此时,网卡使用率超过一半以上。接收速度468M,是针对DATA的,还要加上帧头、检验为、传输延迟等。
测试3:使用FPGA设计延迟=1uS,进行回环测试。
理论最大速度约为12uS/(12uS+1uS+0.5uS) = 0.857,即能达到800多兆的传输速度。
对助手的不再截图,因为没有参考价值,只是作为UDP连接的客户端。
如下,现在UDP传输速度达到了816M,具有很高的速度。
此时的管理器资源使用情况。如下使用了84.18,与WireShark抓取一致。
测试4:使用FPGA设计延迟=80nS,进行回环测试。
UDP最大速度测试,理论计算为12uS/(12uS+0uS+0.5uS) = 0.96.
如下图,WireShark抓取最大速度937Mbit/S,突破900兆,达到千兆以太网的最大传输能力,到此测试全部完成,UDP性能很好。
对应的资源管理器情况,此时千兆网卡性能达到96.85%。
欢迎交流、源码分享见CSDN资源,笔者扣扣:1021100382