2013-03-12 54 views
-1

我有一個1Gb網絡,我需要通過將速率限制爲100MB然後1Gb來運行某些TCP性能測試。我的理解是分層令牌桶(HTB)可用於實現這一如下所示如何在tcp應用程序中使用linux tc

tc qdisc add dev eth0 root handle 1: htb default 12 
tc class add dev eth0 parent 1: classid 1:1 htb rate 1gbps ceil 1gbps 
tc class add dev eth0 parent 1: classid 1:10 htb rate 100mbps ceil 100mbps 

這應該創建兩個根類1:1和1:10,具有1GB和100MB的帶寬。如果我的理解錯誤,請糾正我。

接下來,我如何在我的tcp應用程序中使用上述類?例如,當我運行我的應用程序,應該只使用100 MB,我是否需要在套接字選項中指定某些內容,以便應用程序發送的任何消息現在屬於類1:1,因此將速率限制爲100 Mb?

+0

這可能是一個更適合serverfault站點的問題。 – Keith 2013-03-12 04:53:15

回答

1

使用流量控制匹配規則和ip表規則來標記流量。

tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 1 fw flowid 1:10 
iptables -A OUTPUT -i eth0 -p tcp -j MARK --set-mark 1 

將所有的TCP出站數據包放入每秒100兆比特的隊列中。

既然你只想匹配一個應用程序,讓我們假裝你的應用程序有一個偵聽端口7654的TCP套接字,所有連接都通過。 iptables的規則會看起來更像這個

iptables -A OUTPUT -i eth0 -p tcp -m multiport --sports 7654 -j MARK --set-mark 1 

您還應該在你的tc qdisc命令的1 Gbps的隊列中的默認,從而使系統正常流量不會以任何方式影響您的測試。

+0

--set-mark 1做什麼? – Jimm 2013-03-12 05:15:18

+0

在數據包上設置'標記'。數據包標記只存在於內核中,它們不會從一臺機器傳播到另一臺機器。當'handle 1'被指定時,'tc filter'規則查找相同的值。 – 2013-03-12 18:32:47

相關問題