2010-10-01 148 views
3

我有一個嵌入式應用程序,具有此要求:一個傳出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的默認最大數據包大小?

+0

這是一個您正在編碼的應用程序,您可以自己控制它,或者您是否嘗試使用網絡或操作系統來實現此目的? – Nick 2010-10-01 18:29:56

+0

這是我自己編寫的應用程序,並且完全控制套接字參數。 – Eric 2010-10-01 23:40:19

回答

1

您可能需要檢查NIC驅動程序的設置。一些驅動程序會合並中斷,這會導致更高的吞吐量以增加延遲。

http://www.29west.com/docs/THPM/latency-interrupt-coalescing.html

另外,我不知道如果NIC緩衝多輸出數據包,但如果是這樣,這將使它難以執行所需的優先級:如果有多個緩衝的低優先級數據包在NIC中,內核可能沒有辦法告訴NIC「忘記我已經發送給你的東西,先發送這個高優先級的數據包」。

---更新---

如果問題是長期TCP段,我相信你能控制什麼最大片段大小TCP層通過ip routemtu選項通告。例如:

ip route add default via 1.1.1.1 mtu 600 

(請注意,您需要做的這對收到側)。

+0

謝謝,但這在我的情況下不起作用。在剛剛添加到原始問題的「更新」部分中查看更多評論。 – Eric 2010-10-04 16:35:29