我知道我可以使用此命令为接口添加延迟:
# tc qdisc add dev eth0 root netem delay 50ms
除了延迟之外,我还想限制带宽将此接口的速率设置为100kbps。
我怎样才能做到这一点?
我见过一些如何限制带宽的例子。例如:
# tc qdisc add dev eth0 root handle 1: cbq avpkt 1000 bandwidth 10mbit
# tc class add dev eth0 parent 1: classid 1:1 cbq rate 512kbit \
allot 1500 prio 5 bounded isolated
# tc filter add dev eth0 parent 1: protocol ip prio 16 u32
但是,如果我在设置延迟后尝试运行这些命令,我会收到如下错误:
RTNETLINK answers: File exists
例如:
# tc qdisc add dev eth0 root netem delay 97ms
# tc qdisc add dev eth0 root handle 1: cbq avpkt 1000 bandwidth 10kbit
RTNETLINK answers: File exists
我真的希望能够同时做到这两点:限制带宽并引入延迟。有人知道如何实现这一点吗?
答案1
在您的示例中,您尝试在出口处添加两个根 qdisc。第二个命令失败,因为您已经有一个根 qdisc,并且只允许一个。相反,请创建根 qdisc,然后为其创建子类,然后将第二个 qdisc 添加为该类的子类。例如:
tc qdisc add dev eth0 root handle 1:0 cbq avpkt 1000 bandwidth 10kbit
tc class add dev eth0 parent 1:0 classid 1:1 cbq rate 512kbit \
allot 1500 prio 5 bounded isolated
tc qdisc add dev eth0 parent 1:1 netem delay 97ms
在此示例中,我们为根 qdisc 分配了句柄 1:0。然后我们将该类指定为 1:0 的子类,并为其分配句柄 1:1。然后我们将第二个 qdisc 添加为 1:1 的子类。
执行这些命令后,运行tc qdisc
应该会显示 cbq qdisc 和 netem qdisc。Linux 高级路由和流量控制指南提供关于 qdiscs 的更多信息。