关于套接字:难以实现1Gbit UDP吞吐量

关于套接字:难以实现1Gbit UDP吞吐量

Having trouble achieving 1Gbit UDP throughput

对于有效载荷小于1470的UDP数据包,是否可以实现1Gbit吞吐量?由于数据包较小,因此在实现此类吞吐量(I / O,OS,网络等)时应存在一些瓶颈。我认为可能必须将驱动程序和硬件调整为小数据包/高吞吐量。有没有人尝试通过小型UDP数据包成功实现1Gbit吞吐量?


我以前已经在相对标准的PC硬件上对千兆链路的吞吐量进行了一些实验,尽管只是通过tcpreplay进行传输(而不是通过udp进行)。

我发现的最大瓶颈是仅将数据包发送到NIC本身。通过使用高速总线连接到NIC(例如4x pci-express NIC),可以大大改善这一点。但是即使这样,还是有非常明确的数据包/秒限制。显然,增加数据包大小将使您可以利用更多带宽,同时减少处理器负载。

与史蒂夫·莫耶(Steve Moyer)的评论相同,任何网络的使用都存在理论上的限制。在我的实验中(这是在完全安静的网络上完成的),我看到的最大值约为900Mb / s(并且仅在内存顶部)。 CPU负载为30%到40%。

该限制更有可能由您的系统硬件(例如PC)而不是网络基础结构强加-任何有价值的网络交换机都应能够维持小数据包的全速网络访问-当然,其速率要比大多数PC所能应付的高得多。


我发现硬件的每秒数据包限制明显低于网络的理论容量。对于Broadcomm BCM5704S,我达到了69,000 pps的水平,而吉比特为1,488,100 pps。

我在这里报告了更多数字,http://code.google.com/p/openpgm/


查看正在使用的交换机的文档。交换机受到每秒可发送的数据包数量(pps)的限制,如果您要发送的数据包明显小于最大有效负载大小,则通常不能维持1GBps。

要检查的另一件事是您的网卡是否正在执行中断合并,并且它可以支持的最大发送/接收描述符数量是多少。在这样的吞吐量水平上,即使使用现代的CPU和内存系统,中断服务时间和上下文切换时间也可能成为主机系统的一大开销。

此外,如果您在铜缆上使用千兆位,则卡将发出的最小以太网帧为512字节,因此较小的消息将被填充为该大小。这是因为对载波侦听/冲突检测有要求。


您正在使用哪种类型的网络连接?如果您使用的是1000BaseTx / Fx链接,则对于最大大小的数据包,不要期望吞吐量超过80%。随着数据包大小的减小,间隔,同步,以太网头,IP头和UDP头的开销相对于有效负载而言会增加,因此最大吞吐量甚至会进一步降低。


这里有一个很好的教程,关于如何调整网络设置(在Linux中)以实现真正的千兆位速度:http://datatag.web.cern.ch/datatag/howto/tcp.html


推荐阅读