我有一个嵌入式应用程序,具有此要求:一个传出TCP网络流需要绝对最高优先级,超过所有其他传出网络流量。如果有任何数据包在等待在该数据流上传输,它们应该是下一个发送的数据包。期。Linux低延迟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! Arghhh ..
任何人都知道一个很好的方法来设置在Linux上TCP的默认最大数据包大小?
这是一个您正在编码的应用程序,您可以自己控制它,或者您是否尝试使用网络或操作系统来实现此目的? – Nick 2010-10-01 18:29:56
这是我自己编写的应用程序,并且完全控制套接字参数。 – Eric 2010-10-01 23:40:19