为什么来自同一主机的多个连接比来自不同主机的多个连接获得更好的吞吐量?
我怀疑是内核相关的(Linux),但确认会有很多帮助。
更多细节我有1个接收器进程,我们称之为R.它接受传入连接并使用select()接收数据。
我有3个发件人进程S1,S2,S3。它们连接到R并以固定速率发送数据,即每秒200Mbit。
如果S1,S2和S3在同一台机器上,我得到的结果比在不同机器上的每一台都要好。 (在其他一些机器上都是R)
示例:主机0上的R,主机2上的S1,S2,S3,R接收速率为600Mbit / s
主机0上的R,主机1上的S1,主机2上的S2,主机3上的S3,R接收速率为480Mbit / s
这看起来与我相反,我期望相反,因为在第二种情况下,发件人不必共享网卡和处理器(不要指望处理器或网卡成为瓶颈......)
[上面的主机是具有专用全双工千兆交换机的Linux集群中的节点。他们正在运行2.6.24-24-generic(最新的Ubuntu我猜)]
答案 0 :(得分:2)
这可能是因为当发件人都在一台机器上时,传出的数据包都很好地排队并一次一个地发送(只是因为它们都通过一个NIC)。
在多发送者的情况下,两台机器通常会同时发送数据包,然后由网络交换机排队。这将表明发送TCP作为一种紧张的延迟 - 有时一个数据包将直接切换到接收器,有时它将不得不等待来自交换机队列内其他发送器的一个或两个数据包。
我希望它本身的延迟抖动足以让你的带宽大大减少 - 请记住,使用标准TCP窗口维持200mbps,你需要的最小往返时间为2.6ms,这非常紧张