Linux

使用 tc 限制流量,但頻寬錯誤

  • May 26, 2013

我正在使用這些命令來設置頻寬限制:

tc qdisc del dev eth1 root
tc qdisc add dev eth1 root handle 1: cbq avpkt 1000 bandwidth 100Mbit
tc class add dev eth1 parent 1: classid 1:1 cbq rate 1Mbit allot 1500 prio 3 bounded isolated
tc filter add dev eth1 parent 1: protocol ip u32 match ip protocol 6 0xff flowid 1:1

我的理解是,這些命令應該將我的網路流量限制為每秒 1 MBit / 125 KByte,但事實並非如此。

實際的數據傳輸速率約為每秒 5 MB。我通過在 NFS 上傳輸一個大文件來衡量這一點。如果我將“rate 1Mbit”參數修改為“rate 512 Kbit”,則傳輸速率僅為每秒 2.5 MByte,因此 tc 命令實際上會限制流量,但不會像參數所說的那樣。

此伺服器將 Debian Linux 6.0.7 作為 Citrix XenServer VM 執行。

我在做什麼錯?請指教。

您的tc規則僅適用於傳出流量。

檢查頁面:

現在請記住,我們通常只會塑造傳出流量,因為這是我們可以控制的,與傳入流量不同。

如果您路由兩個介面,您可以在每個設備上放置類似的規則並在它們之間路由/橋接。這樣,傳遞到一個設備的傳入鏈的內容傳遞到另一個設備的傳出,有效地限制了兩個方向的頻寬

另一種選擇是使用IFB偽設備

允許將排隊規則附加到傳入的數據包。

引用自:https://serverfault.com/questions/510994