Скажем, у меня пропускная способность 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 кбит / с здесь только для указания отношения.