低延迟10GbE-> 1GbE网络的TCP拥塞控制?


11

我有一台服务器,该服务器具有到交换机的10GbE连接,还有10个客户端,每个客户端有1GbE连接到同一交换机。

在每个客户端上并行运行nuttcp时,我可以以接近线速的速度将10个TCP数据流同时推送到服务器(即,同时从所有10个客户端上每秒传输100兆字节)。

但是,当我反转方向并将数据从服务器发送到客户端时(即10个TCP流,一个流向每个客户端),TCP重传急剧上升,性能下降到每秒30、20甚至10兆字节每个客户。我想增加这些数字,因为这种流量模式代表了我关心的某些应用程序。

我已经验证了我的服务器能够通过与类似服务器的10GbE连接执行相同的实验来饱和10GbE链接。我已经验证我的任何端口上都没有错误。

最后,当我强行限制(限制)接收器的TCP窗口大小时,我可以获得更高的带宽(30-40兆字节/秒);如果将其钳位得非常低,我可以将重传次数设为零(带宽非常低)。

因此,我有理由相信我会超出交换机中的缓冲区,导致由于拥塞而导致数据包丢失。但是,我认为TCP的拥塞控制应该可以很好地解决此问题,最终稳定在线速的50%以上。

所以我的第一个问题很简单:哪种TCP拥塞控制算法最适合我的情况?有很多可用的方法,但是它们似乎主要针对有损网络,高带宽高延迟网络或无线网络……这些都不适合我的情况。

第二个问题:还有什么我可以尝试的吗?


1
知道什么型号的开关会很有帮助。不同的交换机以不同的方式处理排队,这将有助于缩小解决方案的范围。
scottm32768

2
另外,不同的交换机具有不同的缓冲区大小,因此了解交换机模型将有助于消除问题中的硬件问题。
cpt_fink

1
另外,NIC型号,驱动程序,Linux版本,内核,发行版等。对于配备Cisco 4900M的Myricom或Solarflare NIC,我的答案将与Dell Powerconnect交换机和Intel NIC不同。
ewwhite

Answers:


2
  1. 您可能需要一种算法,该算法不会在丢包时大幅减少窗口大小。窗口大小的急剧下降导致TCP通信量吞吐量突然下降。

  2. 如果您的交换机和服务器支持流控制,请尝试启用流控制。其工作原理几乎完全取决于交换机的芯片和固件。基本上,交换机将检测连接到客户端的端口上的出口拥塞,确定数据包来自何处,并将流控制帧发送到入口端口(即,返回服务器)。如果服务器理解流控制帧,则会降低传输速度。如果一切正常,您将获得最佳吞吐量,而在交换机的出口缓冲区上发生的数据包丢弃几乎为零。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.