Пытаясь понять уровень подклассов HTB
В настоящее время я изучаю возможность использования сервера Ubuntu для обеспечения QoS вместо моего маршрутизатора потребительского класса. Я прочитал много ресурсов о дисциплинах очередей tc и 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
Это очень просто, когда вы знаете, как работает tc: всем трем подклассам гарантируется пропускная способность 30 кбит / с, но им разрешается занимать еще 30 кбит / с доступной пропускной способности у своего родительского класса (30 + 30 = 60 кбит / с).
Этот пример имеет смысл для меня. Общая пропускная способность родительского класса составляет 90 кбит / с, а каждому из трех подклассов гарантируется 30 кбит / с - 3 x 30 кбит / с = 90 кбит / с.
Теперь давайте посмотрим на этот другой пример из этого урока:
# 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
Вот где все становится запутанным для меня. Первому подклассу гарантируется пропускная способность 5 Мбит, в то время как второму гарантируется пропускная способность 3 Мбит. Но родительский класс имеет пропускную способность только 6 Мбит!
Какова цель такого правила? Ни один из подклассов не сможет получить гарантированную пропускную способность.
Еще более запутанным является вывод учебника:
HTB, безусловно, выглядит замечательно - если 10: 20 и 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 сможет заимствовать пропускную способность у родительского класса (разрешено занимать до 1600 кбит), поскольку гарантированная пропускная способность его родного брата составляет 1500 кбит - и 1500 кбит его родного брата плюс 500 кбит его собственная гарантированная пропускная способность уже соответствует родительской пропускной способности в 2000 кбит.
Кто-нибудь может прояснить ситуацию?
1 ответ
Вы поняли, как работает htb.
Хотя вам нужно присмотреться к своим примерам: оба родительских класса не имеют ceil
вариант, а затем будет использовать больше пропускной способности, если доступно. Если в последнем примере родительский класс имел rate 2000kbit ceil 2000kbit
дочерний класс не сможет заимствовать столько пропускной способности.
Однако я согласен с тем, что в примере 5+3 Мбит оба класса не будут иметь гарантированную пропускную способность, если пропускная способность больше 6 Мбит.
Это, вероятно, ошибка.