我有一个嵌入式应用程序,有这个要求:一个TCP网络流需要绝对的最高优先级,高于所有其他出站网络流量。如果有任何等待传输到该流上的数据包,它们应该是下一个发送的数据包。就是这样。
我的成功指标如下:在没有后台流量的情况下测量高优先级延迟。添加后台流量并再次测量。时延的差异应为发送一个低优先级数据包的时间。在100Mbps链路、MTU=1500的情况下,大约为150微秒。我的测试系统由两个通过交叉电缆连接的Linux盒子组成。
我尝试了很多很多的方法,虽然我已经显著改善了延迟,但还没有达到目标(目前我看到有5毫秒的附加延迟)。我已经发布了另一个非常具体的问题,但认为我应该重新开始提问一个一般性的问题。
第一个问题:Linux能实现这个吗? 第二个问题:如果可以,我需要做什么?
- tc? - 我应该使用哪种qdisc? - 优化内核网络参数?哪些? - 还有什么我错过的东西吗?
谢谢您的帮助!
Eric
更新于2010年10月4日: 我在发送端和接收端都设置了tcpdump。这是我在发送端看到的(似乎拥塞的地方):
在接收方面,我看到:
问题似乎是SCP数据包的长度过长(25208字节)。根据MTU(我为此测试设置为600),它被分成多个数据包。然而,这发生在比流量控制更低的网络层中,因此我的延迟是由最大TCP传输数据包大小而不是MTU决定的!真是烦人啊...
有人知道如何在Linux上设置TCP的默认最大数据包大小吗?
我的成功指标如下:在没有后台流量的情况下测量高优先级延迟。添加后台流量并再次测量。时延的差异应为发送一个低优先级数据包的时间。在100Mbps链路、MTU=1500的情况下,大约为150微秒。我的测试系统由两个通过交叉电缆连接的Linux盒子组成。
我尝试了很多很多的方法,虽然我已经显著改善了延迟,但还没有达到目标(目前我看到有5毫秒的附加延迟)。我已经发布了另一个非常具体的问题,但认为我应该重新开始提问一个一般性的问题。
第一个问题:Linux能实现这个吗? 第二个问题:如果可以,我需要做什么?
- tc? - 我应该使用哪种qdisc? - 优化内核网络参数?哪些? - 还有什么我错过的东西吗?
谢谢您的帮助!
Eric
更新于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的默认最大数据包大小吗?