在数据包丢失较少的网络上提高 TCP 性能

在数据包丢失较少的网络上提高 TCP 性能

我正在尝试通过 Linux 机器之间的“高延迟网络”来提高 TCP 吞吐量,但会出现一些数据包丢失。

我将tcp_memtcp_wmem和设置tcp_rmem为“8192 20530752 20530752”。
我将 、 和 设置rmem_maxwmem_maxrmem_default20530752 wmem_default”。
我将netdev_max_backlog和设置txqueuelen为 50000。
我设置tcp_congestion_control为“scalable”。

我使用“nist”(cnistnet)模拟延迟 50ms(每个方向 25ms)和下降 0.5%(每个方向 0.25%),我达到的带宽约为 7.48mbps。
以下是结果表(使用 iperf 测量速率):

     |   0ms    |   50ms
0%   | 710mbps  | 276mbps
0.5% | 181mbps  | 7.48mbps

我没想到延迟会对吞吐量产生如此大的影响(在这些大的 TCP 窗口下)。我也没想到丢包会产生如此大的影响。尤其是使用“可扩展”算法时,因为它的“拥塞窗口”应该能够从丢包中快速恢复。

我使用tcpdump& sar(sysstat 的一部分)尝试查看发生了什么。我没有在 sar 的报告中看到任何可疑的内容。在 tcp dump 中我看到:
“rexmt data pkts” = 88(共发送 8183 个)
“rexmt data bytes” = 127,424 字节(共发送 44,649,104 个字节)
“avg owin” = 135,964 字节。
“avg retr time” = 53.5 毫秒。

这是 TCP 所能做到的最好吗?在这种情况下,没有其他算法可以实现更好的吞吐量吗?我的场景是否与众不同(我认为 50ms 延迟和 0.5 丢包是正常的 WAN 属性)?

相关内容