【发布时间】:2011-04-20 00:12:38
【问题描述】:
我有一个嵌入式应用程序,它有这个要求:一个传出 TCP 网络流需要绝对最高优先级,而不是所有其他传出网络流量。如果有任何数据包等待在该流上传输,它们应该是下一个发送的数据包。期间。
我衡量成功的标准如下:衡量没有后台流量时的高优先级延迟。添加后台流量,然后再次测量。延迟的差异应该是发送一个低优先级数据包的时间。对于 100Mbps 链路,mtu=1500,大约是 150 us。我的测试系统有两个通过交叉电缆连接的 linux 盒子。
我尝试了很多很多东西,虽然我已经大大改善了延迟,但没有达到目标(我目前看到后台流量增加了 5 毫秒的延迟)。我已经发布了另一个非常具体的问题,但我认为我应该从一个一般性问题重新开始。
第一个问题:这在 Linux 上可行吗? 第二个问题:如果是,我需要做什么?
- tc?
- 我应该使用什么 qdisc?
- 调整内核网络参数?哪些?
- 我还缺少什么其他东西?
感谢您的帮助!
埃里克
2010 年 10 月 4 日更新: 我在发送端和接收端都设置了 tcpdump。这是我在传输端看到的(事情似乎很拥挤):
0 us Send SCP (low priority) packet, length 25208
200 us Send High priority packet, length 512
在接收端,我看到了:
~ 100 us Receive SCP packet, length 548
170 us Receive SCP packet, length 548
180 us Send SCP ack
240 us Receive SCP packet, length 548
... (Repeated a bunch of times)
2515 us Receive high priority packet, length 512
问题似乎是 SCP 数据包的长度(25208 字节)。根据 mtu(我为此测试设置为 600)将其分解为多个数据包。但是,这发生在比流量控制更低的网络层中,因此我的延迟取决于最大 tcp 传输数据包大小,而不是 mtu!啊……
谁知道在 Linux 上为 TCP 设置默认最大数据包大小的好方法?
【问题讨论】:
-
这是一个您正在编写的应用程序,您可以自己控制它,还是您尝试使用网络或操作系统来实现它?
-
这是我自己编写的应用程序,可以完全控制套接字参数。