qdisc classful :: Admirável Mundo Novo




Muito Bem Vindo

Prezado Leitor, a proposta desse Blog é compartilhar conhecimento com as pessoas que trabalham com Linux, Asterisk, OpenSER, e com tecnologia de voz sobre a rede IP em geral, através de tutoriais, dicas, howto, notícias entre outros assuntos.

Atente para termo de uso do conteúdo do blog no rodapé da página.

segunda-feira, 9 de fevereiro de 2009

qdisc classful




Autor Original do texto:

Martin A. Brown
martin@linux-ip.net
http://linux-ip.net




7. Disciplinas de Enfileiramento Classful (qdisc’s)

A flexibilidade e o controle do sistema de controle de tráfego Linux poder ser desatado através das qdisc’s classful. Lembre-se que as disciplinas de enfileiramento classful podem ter filtros associados a elas, permitindo que pacotes sejam direcionados para classes e subclasses particulares.

Existem vários termos comuns para descrever classes diretamente associadas à qdisc root e classes terminais. Classes associadas à qdisc root são conhecidas como classes root, e mais genericamente classes internas. Qualquer classe terminal em uma disciplina de enfileiramento particular é conhecida como uma classe folha como uma analogia à estrutura de árvore das classes. Além do uso de linguagem figurada que descreve como uma árvore, a linguagem de relacionamentos de família é também muito comum.


7.1 HTB, Hierarchical Token Bucket

O HTB usa os conceitos de tokens e buckets conjuntamente com o sistema baseado em classe e filtro’s para possibilitar controle complexo e granular sobre o tráfego. Com um modelo borrowing complexo, o HTB pode executar uma variante de técnicas sofisticadas de controle de tráfego. Uma das formas mais fácies para se usar imediatamente o HTB é aquele de fazer shape.

Entendendo tokens e buckets ou entendendo a função do TBF, o HTB deve ser meramente um passo lógico. Essa disciplina de enfileiramento permite ao usuário definir as características dos tokens e bucket usados e permite ao usuário aninhar esses baldes de um modo arbitrário. Quando acoplado com um esquema de classificação, o tráfego pode ser controlado de uma maneira muito granular.

Abaixo é a saída exemplo da sintaxe para o HTB na linha de comando com a ferramenta tc. Embora a sintaxe para o comando tcng seja uma linguagem própria dele, as regras para HTB são as mesmas.



Exemplo 10. Uso de tc para HTB

Usage: ... qdisc add ... htb [default N] [r2q N]
default minor id of class to which unclassified packets are sent {0}
r2q DRR quantums are computed as rate in Bps/r2q {10}
debug string of 16 numbers each 0-3 {0}

... class add ... htb rate R1 burst B1 [prio P] [slot S] [pslot PS]
[ceil R2] [cburst B2] [mtu MTU] [quantum Q]
rate rate allocated to this class (class can still borrow)
burst max bytes burst which can be accumulated during idle period {computed}
ceil definite upper class rate (no borrows) {rate}
cburst burst but for ceil {computed}
mtu max packet size we create rate map for {1600}
prio priority of leaf; lower are served first {0}
quantum how much bytes to serve from leaf at once {use r2q}

TC HTB version 3.3



7.1.1 Requerimentos de Software

Diferente de quase todos os outros softwares discutido, o HTB é uma disciplina de enfileiramento mais recente e sua distribuição pode não ter todas as ferramentas e capacidades que você precisa para usar o HTB. O kernel precisa suportar o HTB; a versão do kernel 2.4.20 e posteriores o suportam na distribuição final, mesmo que versões anteriores do kernel exijam aplicação de patch. Para habilitar suporte ao espaço de usuário para o HTB, veja o HTB para um patch do iproute2 para o tc.



7.1.2 Modelagem (Shaping)

Uma das aplicações mais comuns do HTB envolve fazer o shape do tráfego transmitido em uma taxa específica.

Todo trabalho de shape ocorre nas classes folhas. Nenhum trabalho de shape ocorre nas classes internas ou root porque elas existem somente para sugerir como o modelo borrowing deve distribuir os tokens disponíveis.


7.1.3 Endividamento (Borrowing)

Uma parte fundamental da qdisc HTB é o mecanismo de endividamento. As classes descendentes tomam emprestado tokens de seus genitores uma vez que elas tenham excedido a taxa rate. Uma classe descendente continuará a tentar tomar emprestado até que ela alcance ceil, nesse ponto ela começará a enfileirar pacotes para transmissão até que mais tokens/ctokens estejam disponíveis. Como só existem dois tipos de classes primárias que podem ser criadas com o HTB, a tabela seguinte e o diagrama identificam os vários estados possíveis e o comportamento dos mecanismos de endividamento.


Tabela 2. Estados de classe HTB e potenciais ações tomadas
tipo de classeclasse estadoHTB interna estadoações tomadas
folha< rateHTB_CAN_SENDClasse folha des-enfileirará bytes enfileirados até os tokens disponíveis (não mais que burstpacotes).
folha> rate,
<
ceil
HTB_MAY_BORROWClasse folha tentará pegar emprestado tokens/ctokens da classe genitor. Se tokens estiverem disponíveis, eles serão emprestados em incrementos de quantum e a classe folha des-enfileirará até cburst bytes.
folha> ceilHTB_CANT_SENDNenhum pacote será des-enfileirado. Isso causará o atraso de pacote e aumentará a latência para ajustar a taxa desejada.
inner, root< rate

HTB_CAN_SENDClasse Inner emprestará tokens às descendentes.
inner, root> rate,
<
ceil
HTB_MAY_BORROWClasse Inner tentará tomar emprestado tokens/ctokens da classe genitora, emprestando-os quando da concorrência com as classes descendentes em incrementos de quantum por requisição.
inner, root> ceilHTB_CANT_SENDClasse Inner não tentará tomar emprestado de seu genitor e não emprestará tokens/ctokens as classes descendentes.



Esse diagrama identifica o fluxo de tokens emprestados e a forma na qual os tokens são devolvidos as classes genitores. A fim de funcionar o modelo endividamento, cada classe precisa ter uma contagem precisa do número de tokens usados por si e de todas as suas descendentes. Por essa razão, qualquer token usado em uma classe descendente ou folha é devolvida a cada classe genitor até que a classe root seja alcançada.

Qualquer classe descendente que deseja pegar emprestado um token requisitará um token de sua classe genitor, a qual se estiver também além de sua taxa rate requisitará empréstimo de sua classe genitor até que um token seja localizado ou até que a classe root seja alcançada. Assim o empréstimo de tokens flui na direção das classes folhas e a devolução dos tokens usados flui na direção da classe root.

Observe nesse diagrama que existem várias classes root HTB. Cada um dessas classes root pode simular um circuito virtual.






7.1.4 Parâmetros de classe HTB

default


Um parâmetro opcional com objeto qdisc HTB, o padrão para default é 0, que faz com que qualquer tráfego não classificado seja des-enfileirado na velocidade de hardware, bypassando completamente qualquer das classes associadas a qdisc root.




rate


Usado para definir a velocidade mínima desejada pela qual limitar o tráfego transmitido. Isso pode ser considerado o equivalente a uma taxa informação combinado (CIR), ou a largura de banda garantida para uma dada classe folha.




ceil


Usado para definir a velocidade máxima desejada pela qual limitar o tráfego transmitido. O modelo de endividamento deve ilustrar como esse parâmetro é usado. Isso pode ser considerado o equivalente de “burstable bandwidth”.




burst


Esse é o tamanho do balde rate (veja Tokens e buckets). O HTB des-enfileirará burst bytes antes de aguardar pela chegada de mais tokens.




cburst


Esse é o tamanho do balde ceil (veja Tokens e buckets). O HTB des-enfileirará cburst bytes antes de aguardar pela chegada de mais ctokens.




quantum


Esse é o parâmetro-chave usado pelo HTB para controlar endividamento. Normalmente, o quantum correto é calculado pelo HTB, e não especificado pelo usuário. Fazer ajustes precisos desse parâmetro pode gerar tremendos efeitos sobre o endividamento e a modelagem (shaping) em situações de disputa por banda, porque ele é usado tanto para dividir o tráfego entre classes descendentes com taxa acima de rate (mas com taxa inferior a ceil) quanto transmitir pacotes a partir dessas mesmas classes.




r2q


Também, normalmente calculado pelo usuário, r2q é uma pista para o HTB ajudar a determinar o quantum ótimo para uma classe particular.




mtu
prio





7.1.5 Regras

A seguir estão algumas orientações gerais para o uso do HTB que foi catado de http://docum.org e da lista de email do LARTC. Essas regras são simplesmente recomendações para iniciantes maximizar o benefício do HTB até que adquiram um domínio melhor da aplicação prática do HTB.

• A execução de shape com o HTB ocorre somente nas classes folhas. Veja também a Seção 7.1.2, “Modelagem”.

• Como o HTB não faz shape em qualquer classe exceto a classe folha, a soma das rate’s das classes folhas não deve exceder o valor ceil de uma classe genitora. Idealmente, a soma das rate´s das classes descendentes devem bater com a taxa rate da classe genitor, permitindo a classe genitor distribuir a sobra de banda (ceil - rate) entre as classes descendentes.

Esse conceito chave na implementação HTB produz repetição. Somente classes folhas realmente fazem shape de pacotes; pacotes são atrasados somente naquelas classes folhas. As classes internas (completamente até a classe root) existem para definir quando tomar/dar empréstimo (veja também a Seção 7.1.3, “Endividamento”).

• O quantum é usado somente quando uma classe está acima da taxa rate, mas abaixo da taxa ceil.

• O quantum deve ser definido no MTU ou superior. O HTB des-enfileirará um único pacote pelo menos por oportunidade de serviço mesmo que quantum seja muito pequeno. Em tal caso, ele não será capaz de calcular precisamente a largura de banda real consumida [9].

• Classes genitoras emprestam tokens as classes descendentes em incrementos de quantum, assim para um máximo de granularidade e mais largura de banda distribuída igualmente instantaneamente, quantum deve ser tão baixo quanto possível enquanto ainda não for menor do que MTU.

• Uma distinção entre tokens e ctokens é somente significante em uma classe folha, porque classes não folhas somente emprestam tokens as classes descendentes.

• A tomada de empréstimo no HTB pode ser mais precisamente descrita como “usando”.



7.2 HFSC, Hierarchical Fair Service Curve

A qdisc classful HFSC balanceia tráfego sensível a atraso contra tráfego sensível throughput. Em um estado de congestionamento ou backlogged, a disciplina de enfileiramento HFSC intercala tráfego sensível a atraso quando for exigido em conformidade com as definições da curva de serviço. Leia a respeito da implementação Linux na Alemanha, HFSC Scheduling mit Linux leia uma tradução dele para o Inglês, HFSC Scheduling with Linux. O artigo original da pesquisa, A Hierarchical Fair Service Curve Algorithm For Link-Sharing, Real-Time and Priority Services, também está disponível.

Essa seção será completada em uma data posterior.



7.3 PRIO, escalonador priority

A qdisc classful PRIO funciona sobre um preceito muito simples. Quando está pronta para desenfileirar um pacote, a primeira classe é verificada por um pacote. Se existir um pacote, ela retira da fila. Se não existir pacote, então a classe seguinte é verificada, ate que o mecanismo de enfileiramento não tenha mais nenhuma classe para verificar.

Essa seção será completada em uma data posterior.



7.4 CBQ, Class Based Queuing

O CBQ é a implementação clássica (também chamada de a venerável) de um sistema de controle de tráfego. Essa seção será completada em uma data posterior.




________________________________________
[9] O HTB vai relata o uso de largura de banda nesse cenário incorretamente. Ele calculará a largura de banda usada pelo quantum em vez do tamanho de pacote des-enfileirado. Isso pode enviesar resultados rapidamente.

















Nenhum comentário:




Creative Commons License
Admirável Mundo Novo: Tudo Sobre Asterisk, OpenSER, Linux e Tecnologias de Voz sobre IP
by Cléviton Mendes de Araújo is licensed under a Creative Commons Atribuição 2.5 Brasil License.