Veja o "quantum" nos documentos do HTB. Todo o bw não alocado é manipulado pelo algoritmo WRR de acordo com os quantums da classe.
Digamos que eu tenha 100 kbps de largura de banda
- Root - 100kbps
/ \
/ \
/ \
/ \
/ \
/ \
Assured 30kbps 10kbps
E eu asseguro Classe A 30kbps e Classe B 10kbps. 60kbps são a reserva ou o excesso de largura de banda
No manual do HTB , ele diz
Any unused bandwidth can be used by any class which needs it (in proportion of its allocated share).
No entanto, quando eu corro o seguinte teste, que é ilustrado na arte ascii acima:
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
Eu recebo os seguintes resultados: 56kbps para a classe A e 37kbps para a classe B
Qual é uma proporção de ~ 1,5, enquanto eu esperava que a proporção fosse de 3: 1, como a alocação inicial.
Parece que os 30 e 10 foram servidos, então o excesso foi dividido igualmente entre as duas classes, o que faz sentido, pois no código diz que a árvore RedBlack segurando essas duas classes, o scheduler faz um RR nelas. / p>
Minha pergunta é o excesso de largura de banda dividido igualmente como resultados e código sugerir? (talvez eu tenha entendido mal o código)
Ou devo esperar uma proporção de 3: 1 entre as classes A e B?
Tanto quanto sei, a "quota atribuída" significa ceil. Então, se você quer a proporção de 3: 1, você precisa escrever:
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
Como a classe raiz tem um ceil a 100kbps, ele não oferecerá mais de 100kbps, e a opção de 300kbps está aqui apenas para especificar a proporção.