我目前正在研究使用 Ubuntu 服务器来提供 QoS 的可能性,而不是我的消费级路由器。我读了很多关于碳和 HTB 排队规则 - 这看起来正是我的 QoS 需求所需要的规则,尽管现在看起来已经很清楚了,但是仍然有一些子类率问题困扰着我。
让我们看一下这个示例配置,它是这个问题的答案问题:
tc class add dev eth0 parent 1: classid 1:1 htb rate 90kbps ceil 90kbps
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 30kbps ceil 60kbps
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 30kbps ceil 60kbps
tc class add dev eth0 parent 1:1 classid 1:12 htb rate 30kbps ceil 60kbps
如果你知道如何做,这很简单碳有效:三个子类都保证有 30kbps 的带宽,但允许从其父类中借用另外 30kbps 的可用带宽(30 + 30 = 60kbps 上限)。
这个例子对我来说很有意义。父类的总带宽为 90kbps,三个子类分别保证 30kbps - 3 x 30kbps = 90kbps。
现在让我们看看另一个例子教程:
# tc class add dev eth0 parent 1: classid 1:1 htb rate 6mbit burst 15k
# tc class add dev eth0 parent 1:1 classid 1:10 htb rate 5mbit burst 15k
# tc class add dev eth0 parent 1:1 classid 1:20 htb rate 3mbit ceil 6mbit burst 15k
# tc class add dev eth0 parent 1:1 classid 1:30 htb rate 1kbit ceil 6mbit burst 15k
这就是让我感到困惑的地方。第一个子类保证带宽为 5mbit,而第二个子类保证带宽为 3mbit。但父类只有 6mbit 的带宽!
这样的规则的目的是什么?没有一个子类能够获得其保证的带宽。
更令人困惑的是本教程的结论:
HTB 看起来确实很棒——如果 10:和 20:都有其保证的带宽,并且还有更多可以划分,那么它们将按照 5:3 的比例借用,正如您所期望的那样。
如何才能让两个类别都获得保证的带宽和他们的父母还有带宽可以借用吗?
毫无疑问,这里有些东西我没注意到。可能是教程有缺陷,但我发现很多其他示例都有同样令人困惑的设置 -这里例如 :
/sbin/tc class add dev eth3 parent 1: classid 1:1 htb rate 2000kbit
/sbin/tc class add dev eth3 parent 1:1 classid 1:10 htb prio 1 rate 1500kbit ceil 1950kbit
/sbin/tc class add dev eth3 parent 1:1 classid 1:20 htb prio 2 rate 500kbit ceil 1600kbit
通过这种配置,在这种情况下,1:20 类是否可以向父类借用带宽(允许借用最多 1600kbit),因为其兄弟类的保证带宽为 1500kbit - 并且其兄弟类的 1500kbit 加上其自身保证带宽的 500kbit 已经与父类的 2000kbit 带宽相匹配。
有人能澄清一下情况吗?
答案1
您确实了解了 htb 的工作原理。
不过,您需要仔细查看示例:父类都没有ceil
选项,并且如果可用,将使用更多带宽。如果在最后一个示例中,父类有rate 2000kbit ceil 2000kbit
,则子类将无法借用那么多带宽。
不过,我同意在 5+3Mbit 的例子中,如果带宽大于 6Mbit,则两个等级都不会有保证的带宽。
这个可能是一个错误。