Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 无法实现1Gbit UDP吞吐量_Sockets_Networking_Udp - Fatal编程技术网

Sockets 无法实现1Gbit UDP吞吐量

Sockets 无法实现1Gbit UDP吞吐量,sockets,networking,udp,Sockets,Networking,Udp,对于有效负载小于1470的UDP数据包,是否可以实现1Gbit吞吐量?由于数据包较小,在实现这种吞吐量(I/O、操作系统、网络等)时应该存在一些瓶颈。我认为驱动程序和硬件可能必须调整为小数据包/高吞吐量。有人尝试过用小型UDP数据包成功实现1Gbit吞吐量吗?这里有一个很好的教程,介绍如何调整网络设置(在Linux中)以实现真正的千兆速度:您使用的是什么类型的网络连接?如果您使用的是1000BaseTx/Fx链路,则最大数据包的吞吐量不要超过80%。随着数据包大小的减小,间隔、同步、以太网报头、

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

这里有一个很好的教程,介绍如何调整网络设置(在Linux中)以实现真正的千兆速度:

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

请查看所用交换机的文档。交换机在每秒可传送的数据包数(pps)方面受到限制,如果发送的数据包明显小于最大有效负载大小,则交换机通常无法维持1GBps

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


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

我以前在相对标准的pc硬件上做过一些千兆链路吞吐量的实验,尽管只是传输(via),而不是udp

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

与作者的评论一样,任何网络的使用都有一个理论上的限制。在我的实验(在一个完全安静的网络上进行)中,我看到了大约900Mb/s的最大值(仅在我的内存中)。这是因为cpu负载为30%到40%


更可能的是,限制将由您的系统硬件(即PC)施加比你的网络基础设施更高——任何值得一试的网络交换机都应该能够用小数据包来维持全速网络访问——当然速度要比大多数PC机所能应付的速度高得多。

我发现硬件的每秒数据包数限制比网络理论容量要低得多。对于Broadcomm BCM5704S,我的速度是69000 pps,而千兆位的速度是1488100pps


我在这里报告了更多的数字,

对网络拓扑的更详细描述将有助于提供建议。。。