如何使用 tc 添加延迟和带宽限制接口?

如何使用 tc 添加延迟和带宽限制接口?

我知道我可以使用此命令为接口添加延迟:

# 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 的更多信息。

相关内容