无法实现1Gbit UDP吞吐量

时间:2020-03-06 14:24:27  来源:igfitidea点击:

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

解决方案

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

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

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

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

同样,如果我们在铜缆上使用千兆位,则卡将发出的最小以太网帧为512字节,因此较小的消息将被填充为该大小。这是由于对载波侦听/碰撞检测的要求。

我以前已经在相对标准的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/