对于负载小于1470的UDP数据包,是否有可能达到1Gbit的吞吐量?由于数据包较小,实现这样的吞吐量应该存在一些瓶颈(I/O、操作系统、网络等)。我想驱动程序和硬件可能必须调整为小数据包/高吞吐量。有人尝试用小 UDP 数据包成功实现 1Gbit 吞吐量吗?

有帮助吗?

解决方案

我之前曾在相对标准的 PC 硬件上对千兆位链路的吞吐量进行过一些实验,尽管只是进行传输(通过 tc预播放),而不是 udp。

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

与评论相同 史蒂夫·莫耶, ,任何网络的利用率都存在理论上的限制。在我的实验中(在完全安静的网络上进行),我看到的最大值大约为 900Mb/s(仅在我的记忆中)。这是 CPU 负载为 30% 到 40% 的情况。

该限制更有可能是由您的系统硬件(即,PC)比您的网络基础设施 - 任何有价值的网络交换机都应该能够维持小数据包的全速网络访问 - 当然速度比大多数 PC 能够应对的要高得多。

其他提示

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

检查您正在使用的交换机的文档。交换机每秒可传输的数据包数 (pps) 受到限制,如果您发送的数据包远小于最大有效负载大小,则交换机通常无法维持 1GBps。

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top