9.5.5. Hierarchical Token Bucket
Martin Devera (devik) percebeu corretamente que o CBQ é complexo e não parecia otimizado para muitas situações comuns. Sua abordagem Hierárquica é bem apropriada para instalações onde você tem uma quantidade fixa de largura de banda que você deseja dividir para diferentes propósitos, dando a cada finalidade uma garantia de largura de banda, com a possibilidade de especificar quanto de banda pode ser tomada emprestada.
O algoritmo HTB funciona exatamente igual ao CBQ, mas não utiliza cálculo de tempo ocioso para fazer os ajustes conforme os critérios de prioridade de tráfego. Em vez disso, ele é um Filtro Token Bucket baseado em classe – daí o nome. Ele possui somente alguns parâmetros, que são bem documentados nesse site.
Já que sua configuração HTB começa mais complexa, sua configuração vai escalar bem. Com o CBQ que já é complexo mesmo em casos simples! O HTB3 (verifique a sua página para detalhes sobre versões do HTB) agora faz parte dos fontes oficial do kernel (do 2.4.20-prel e posteriores ao 2.5.31). No entanto, talvez você ainda precise obter uma versão com patch do HTB3 do utilitário ‘tc’: partes do kernel e do espaço de usuário do HTB precisam estar na mesma versão major, se não o utilitário ‘tc’ poderá não funcionar com o HTB.
Se você já tiver um kernel moderno, ou se já estiver a ponto de aplicar um patch em seu kernel, de todas as formas considere também o HTB.
9.5.5.1. Configuração Exemplo
Funcionalmente ele é quase idêntico à configuração exemplo do CBQ acima:
# tc qdisc add dev eth0 root handle 1: htb default 30
# 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
O autor então recomenda o SFQ para essas classes como a seguir:
# tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10
# tc qdisc add dev eth0 parent 1:20 handle 20: sfq perturb 10
# tc qdisc add dev eth0 parent 1:30 handle 30: sfq perturb 10
Adicione os filtros que direcionam o tráfego para as classes corretas:
# U32="tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32"
# $U32 match ip dport 80 0xffff flowid 1:10
# $U32 match ip sport 25 0xffff flowid 1:20
E é isso aí – nenhum número esquisito não explicado, nenhum parâmetro não documentado.
Certamente, o HTB parece maravilhoso – se as duas classes ‘10:’ e ‘20:’ tiverem suas largura de banda garantida, e, além disso, se for permitido as classes compartilhar, elas tomarão emprestados a uma taxa 5:3, justamente como você desejaria.
Tráfego não classificado é roteado pela classe ‘30:’, a qual possui pouca banda pra seu uso próprio, mas pode tomar emprestado tudo o que não estiver em uso. Como nós escolhemos a disciplina SFQ internamente, fazemos justiça deixando-a livre!
Autores Originais dos textos:
Bert Hubert (Netherlabs BV)
bert.hubert@netherlabs.nl
Thomas Graf (Autor de Seção)
tgraf@suug.ch
Gregory Maxwell (Autor de Seção)
greg@linuxpower.cx
Remco van Mook (Autor de Seção)
remco@virtu.nl
Martijn van Oosterhout (Autor de Seção)
kleptog@cupid.suninternet.com
Paul B Schroeder (Autor de Seção)
paulsch@us.ibm.com
Jasper Spaans (Autor de Seção)
jasper@spaans.ds9a.nl
Pedro Larroy (Autor de Seção)
piotr@member.fsf.org
Bert Hubert (Netherlabs BV)
bert.hubert@netherlabs.nl
Thomas Graf (Autor de Seção)
tgraf@suug.ch
Gregory Maxwell (Autor de Seção)
greg@linuxpower.cx
Remco van Mook (Autor de Seção)
remco@virtu.nl
Martijn van Oosterhout (Autor de Seção)
kleptog@cupid.suninternet.com
Paul B Schroeder (Autor de Seção)
paulsch@us.ibm.com
Jasper Spaans (Autor de Seção)
jasper@spaans.ds9a.nl
Pedro Larroy (Autor de Seção)
piotr@member.fsf.org
Nenhum comentário:
Postar um comentário