0

为什么来自同一主机的多个连接比来自不同主机的多个连接获得更好的吞吐量?

我怀疑是与内核相关的东西(Linux),但确认会有很大帮助。

更多细节我有 1 个接收器进程,我们称之为 R。它接受传入连接并使用 select() 接收数据。

我有 3 个发件人进程 S1、S2、S3。它们连接到 R 并以固定速率发送数据,即每个每秒 200Mbit。

如果 S1、S2 和 S3 在同一台机器上,我会比将它们中的每一个放在不同的机器上得到更好的结果。(R 在这两种情况下都在其他机器上)

示例:主机 0 上的 R,主机 2 上的 S1、S2、S3,R 以 600Mbit/s 的速度接收

R 在 host0 上,S1 在 host1 上,S2 在 host2 上,S3 在 host3 上,R 以 480Mbit/s 接收

这对我来说看起来违反直觉,我期望相反,因为在第二种情况下,发件人不必共享网卡和处理器(不希望处理器或网卡成为瓶颈......)

[以上主机是具有专用全双工千兆交换机的 linux 集群中的节点。他们正在运行 2.6.24-24-generic(我猜是最新的 Ubuntu)]

4

1 回答 1

2

这可能是因为当发送者都在一台机器上时,传出的数据包都很好地排队并一次发送一个(只是因为它们都通过一个 NIC)。

而在多发送者的情况下,两台机器通常会同时发送数据包,然后由网络交换机将它们排队。这将对发送 TCP 表现为抖动延迟 - 有时数据包将直接切换到接收器,有时它必须等待来自交换队列中其他发送者的一两个数据包。

我预计延迟抖动本身就足以让您的带宽大幅减少 - 请记住,要使用标准 TCP 窗口维持 200mbps,您需要至少 2.6 毫秒的往返时间,这非常紧凑。

于 2009-10-08T00:33:13.623 回答