我有一个具有此要求的嵌入式应用程序:一个传出 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 的默认最大数据包大小的好方法吗?