聚合吞吐量的多个连接(Linux)的
-
20-09-2019 - |
题
为什么来自同一主机的多个连接不是来自不同主机的多个连接实现更高的吞吐量?
我怀疑是什么内核相关的(Linux的),但确认将有很大的帮助。
的更多细节我有1点接收器的过程,让我们称之为R.它接受传入的连接,并使用接收的数据的select()。
我有3个发件人处理S1,S2,S3。它们连接到R和以固定的速率发送数据,即高达200Mbit每秒每
如果S1,S2和S3是在同一台机器上,我得到更好的结果比具有不同的机器上它们中的每一个。 (R是在这两种情况下的一些其他的机器上)
实施例:R于host0,S1,S2,S3在host2,R接收在600Mbit / s的
上host0 R,S1 host1上,S2在host2,S3上host3上,R在接收每秒480Mbit / s的
这看起来反直觉对我来说,我的预期相反,因为在第二种情况下发送者不必共享网络卡和处理器(不,期待处理器或网卡是瓶颈...)
[该主机以上都与一个专用的全双工千兆位开关一个Linux群集节点。它们正在运行2.6.24-24泛型(最新的Ubuntu我想)]
解决方案
这大概是因为当发送者都是一台计算机上,输出数据包均能排队,并发送一在-A-时间(仅仅凭借的事实,即它们都通过一个NIC去)。
而在多发送者的情况下,两台机器往往会在同一时间发送数据包,并将其然后由网络交换机排队它们。这将本身表现到发送TCP作为抖动的延迟 - 有时一个分组将直接穿过到所述接收器被切换,其他时间它将必须等待一个或两个分组来自开关队列内的其他发送器
我希望在自己的时延抖动就足以让那么多了你的带宽 - 记住,维持200Mbps的标准TCP窗口,你最少需要2.6ms的往返时间,这是非常紧
不隶属于 StackOverflow