A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa - Linux

Administração de Largura de Banda no Linux

Sex

20

Abr

2007


19:22

(5 votos, média 4.80 de 5) 


Nível avançado O Linux 2.2/2.4 tem um sistema parrudo de administração de largura de banda, comparável a sistemas dedicados topo de linha. Aliás, oferece muito mais recursos do que o Frame e o ATM.

Glossário

Quando comecei a ler textos sobre este tema, me embananei todinha com os termos que fui encontrando pelo caminho. Para tentar evitar que isto aconteça com você, começo este artigo com um pequeno glossário.

  • Queueing Discipline (qdisc) - Fila de Disciplina: Um algoritmo que manipula a fila de um dispositivo, seja a entrada (ingresso) ou a saída (egressão).
  • root qdisc - qdisc raiz: A qdisc raiz é a qdisc associada ao dispositivo.
  • Classless qdisc - qdisc sem classe: Uma qdisc sem subdivisões internas configuráveis.
  • Classful qdisc - qdisc com classe: Uma qdisc com classe contém várias classes. Algumas delas contém outras qdiscs, que podem ser com ou sem classe. De acordo com a definição estrita, pfifo_fast é uma qdisc com classe porque contém três bandas, estas sem classe. No entanto, do ponto de vista do usuário, ela é sem classe porque suas classes não podem ser tocadas com a ferramenta tc.
  • Classes: Uma qdisc com classe pode ter muitas classes, cada uma delas no interior da qdisc. Por outro lado, uma classe pode ter várias classes associadas. Desta forma, uma classe pode ter como pais uma qdisc ou outra classe. Uma classe folha é uma classe sem classes filhas - esta classe possui uma classe qdisc associada a ela. Esta qdisc é responsável pelo envio de dados desta classe. Quando você cria uma classe, uma qdisc fifo é anexada a ela. Quando você cria uma classe filha, esta qdisc é removida. Para uma classe folha, esta qdisc fifo pode ser substituída por outra qdisc mais apropriada. Você pode até substituir esta qdisc fifo por uma qdisc com classe para adicionar classes extras.
  • Classifier - Classificador: Toda qdisc com classe precisa determinar para qual classe ela deve enviar um pacote. Isto é feito através do classificador.
  • Filter - Filtro: A classificação pode ser feita através de filtros. Um filtro contém as condições que, se forem preenchidas, fazem o filtro funcionar.
  • Scheduling - Precedência: Uma qdisc pode, com a ajuda de um classificador, decidir que determinados pacotes precisam sair antes que outros. Este processo é chamado de Scheduling ou Precedência. A Precedência também é chamada de reordenamento, mas isto é um pouco confuso.
  • Shaping - Modelagem: O processo de retardar pacotes antes que eles saiam para confirmar o tráfego numa taxa máxima configurada. A modelagem é aplicada na saída (egresso). Coloquialmente, descartar pacotes para diminuir a velocidade do tráfego também é chamado de Modelagem.
  • Policing - Policiamento: Retardar ou descartar pacotes para manter o tráfego abaixo de uma determinada largura de banda. No Linux, o policiamento pode apenas descartar um pacote - não pode retardá-lo - porque não existe uma 'fila de ingresso'.
  • Work-Conserving - Conservação de Trabalho: Uma qdisc que conserva trabalho sempre entrega um pacote quando houver um disponível. Em outras palavras, nunca retarda um pacote se o adaptador de rede estiver pronto para enviar um (nos casos de qdisc de egresso).
  • non-Work-Conserving - Sem Conservação de Trabalho: Algumas filas, como por exemplo o Filtro Balde de Token (Token Bucket Filter), podem precisar reter um pacote por um certo período de tempo para limitar a largura de banda. Isto significa que algumas vezes estas filas se recusam a passar um pacote, mesmo que tenham um disponível.

Com a terminologia definida, vamos ver onde ficam todas estas coisas.


                Programas no espaço do usuário
                     ^
                     |
     +---------------+-----------------------------------------+
     |               Y                                         |
     |    -------> Pilha IP                                    |
     |   |              |                                      |
     |   |              Y                                      |
     |   |              Y                                      |
     |   ^              |                                      |
     |   |  / ----------> Redespacho ->                        |
     |   ^ /                           |                       |
     |   |/                            Y                       |
     |   |                             |                       |
     |   ^                             Y          /-qdisc1-\   |
     |   |                        Classificador  /--qdisc2--\  |
  --->->Qdisc de                  de Egressão    ---qdisc3---- | ->
     |  Ingresso                                 \__qdisc4__/  |
     |                                            \-qdiscN_/   |
     |                                                         |
     +---------------------------------------------------------+

Representação ASCII de Jamal Hadi Salim.

O bloco grande representa o kernel. A seta mais à esquerda representa o tráfego que entra na máquina vindo da rede. Ele alimenta a Qdisc de Ingresso que pode aplicar Filtros a um pacote e decidir descartá-lo. Isto é chamado de 'Policiamento'.

Isto acontece num estágio muito precoce, antes que o pacote tenha contato com a maior parte do kernel. É, portanto, um ponto muito bom para descartar tráfego precocemente sem consumir muito processamento da CPU.

Se o pacote tiver permissão para continuar, ele pode ser destinado para um aplicativo local. Neste caso, ele entra na Pilha IP para ser processado e entregue a um programa no espaço do usuário. O pacote também pode ser despachado sem entrar num aplicativo. Neste caso ele é destinado para egressão (saída). Programas no espaço do usuário também podem entregar dados que são examinados e redespachados para o Classificador de Egressão.

O Classificador de Egressão investiga o pacote e o coloca na fila de uma das várias qdiscs. No caso default (não configurado) há apenas uma qdisc de egressão instalada, a pfifo_fast, que sempre recebe o pacote. Isto é chamado de 'enfileirar' (enqueueing).

O pacote agora está na qdisc, esperando que o kernel o chame para transmiti-lo através da interface de rede. Isto é chamado de 'desenfileirar' (dequeueing).

Esta figura também é válida quando existir apenas um adaptador de rede - as setas que entram e saem do kernel não devem ser consideradas muito literalmente. Cada adaptador de rede possui ganchos de ingresso e de egressão.

Informações adicionais