使用 tc 限制流量,但带宽错误

使用 tc 限制流量,但带宽错误

我正在使用这些命令来设置带宽限制:

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 MByte。我通过 NFS 传输大型文件测量了该速率。如果我将“rate 1Mbit”参数修改为“rate 512 Kbit”,则传输速率仅为每秒 2.5 MByte,因此 tc 命令确实会限制流量,但不会限制到参数所规定的速率。

该服务器正在运行 Debian Linux 6.0.7 作为 Citrix XenServer VM。

我做错了什么?请指教。

答案1

您的tc规则仅适用于传出流量。

查看页:

现在请记住,我们通常只会塑造传出的流量,因为这是我们可以控制的,与传入的流量不同。

如果您路由两个接口,则可以在每个设备上设置类似的规则,并在其间进行路由/桥接。这样,传递到一个设备的传入链的内容将传递到另一个设备的传出链,从而有效地限制两个方向的带宽

另一种方法是使用IFB 伪设备哪个

允许将排队规则附加到传入的数据包。

相关内容