
digamos que eu tenha uma hierarquia htb simples (vejaman 8 tc-htb
) configure onde a largura de banda total especificada para classes htb filhasexcedea largura de banda total especificada para a classe root htb:
tc class add dev eth0 parent 1: classid 1:1 htb rate 100kbps
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 70kbps
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 70kbps
tc class add dev eth0 parent 1:1 classid 1:12 htb rate 70kbps
Aqui o máximo para a classe htb raiz é 100kbps, mas o máximo coletivo para classes htb filhas é 160kbps.
Como o kernel lidaria com todos os três filhos gerando tráfego em suas taxas máximas? Posso usar um SFQ intermediário para garantir um tratamento justo do tráfego agregado neste caso?
Mais importante ainda, como o kernel decide qual tráfego deixar passar se o tráfego total gerado exceder a largura de banda da interface de hardware?
Responder1
A recomendação geral com HTB é garantir que "a soma das taxas da classe filha é igual ou menor que a taxa da classe pai".
Se as classes secundárias permitirem taxas mais altas, o HTB excederá o limite de largura de banda. O limite no pai não é aplicado, ele é usado apenas para cálculos de "empréstimo de largura de banda" (de acordo com a taxa máxima). A limitação real da largura de banda só é imposta pela classe filha (folha).
Ou pelo menos foi assim que foi explicado nas listas de discussão, anos e anos atrás:
Se o teto da classe pai for menor que a soma do teto dos filhos, então os filhos poderão consumir mais largura de banda do que a classe pai parece permitir. Isso ocorre porque a classe pai nunca é verificada! A classe pai só é verificada se o filho excedeu a taxa e deseja pedir emprestado ao pai.
https://www.spinics.net/lists/lartc/msg08619.html
Esta é uma documentação muito antiga, mas ainda deve ser aplicada hoje.