Назад | Перейти на главную страницу

Как распределяется лишняя пропускная способность в linux htb?

Скажем, у меня пропускная способность 100 кбит / с

                - Root - 100kbps
                /       \
               /         \
              /           \
             /             \
            /               \
           /                 \
Assured  30kbps             10kbps

И я гарантирую класс A 30 кбит / с и класс B 10 кбит / с. 60 кбит / с - это резерв или лишняя пропускная способность

в HTB руководство это говорит

Любая неиспользованная полоса пропускания может использоваться любым классом, которому она нужна (пропорционально выделенной ему доле).

Однако когда я запускаю следующий тест, который проиллюстрирован в приведенном выше рисунке ascii:

tc qdisc add dev eno1 root handle 1: htb
tc class add dev eno1 parent 1: classid 1:1 htb rate 100kbps ceil 100kbps
tc class add dev eno1 parent 1:1 classid 1:10 htb rate 10kbps ceil 100kbps
tc class add dev eno1 parent 1:1 classid 1:20 htb rate 30kbps ceil 100kbps
tc filter add dev eno1 protocol ip parent 1:0 prio 1 u32 match ip dport 8000 0xffff flowid 1:10
tc filter add dev eno1 protocol ip parent 1:0 prio 1 u32 match ip dport 8001 0xffff flowid 1:20

Получаю следующие результаты: 56 кбит / с для класса А и 37 кбит / с для класса B

Это соотношение составляет ~ 1,5, тогда как я ожидал, что соотношение будет 3: 1, как раннее распределение.

Кажется, что были обслужены 30 и 10, затем избыток был разделен поровну между двумя классами, что имеет смысл, поскольку в коде говорится, что дерево RedBlack содержит эти два класса, планировщик выполняет RR для них.

Мой вопрос: избыточная пропускная способность делится поровну на результаты и код предлагать? (возможно, я неправильно понял код)

Или мне следует ожидать соотношения 3: 1 между классами A и B?

Посмотрите на «квант» в документации HTB. Все нераспределенные bw обрабатываются алгоритмом WRR в соответствии с квантами класса.

Насколько мне известно, «выделенная доля» означает ceil. Итак, если вы хотите соотношение 3: 1, вам нужно написать:

tc class add dev eno1 parent 1:1 classid 1:10 htb rate 10kbps ceil 100kbps
tc class add dev eno1 parent 1:1 classid 1:20 htb rate 30kbps ceil 300kbps

Поскольку у корневого класса есть поток на 100 кбит / с, он не будет предлагать более 100 кбит / с, а опция 300 кбит / с здесь только для указания отношения.