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) 


Filas e Disciplinas

Com as filas pode-se determinar o modo como os dados são ENVIADOS e é importante ressaltar que não podemos modelar todos os dados, só os que enviamos. Do modo como a Internet funciona, não é possível controlar o que as pessoas nos enviam. A situação se parece um pouco com uma caixa de correio (a que fica no portão de casa): não tem como influenciar o que é jogado dentro dela.

Acontece que a Internet se baseia principalmente em TCP/IP, o que pode nos ajudar um pouco. O TCP/IP não tem como determinar a capacidade de uma rede entre dois hosts, por isto começa a enviar dados cada vez mais depressa ("slow start" - largada lenta) e, quando os pacotes começam a ser perdidos por falta de espaço para enviá-los, diminui a velocidade da transmissão. Na verdade a coisa é um pouco mais elaborada, mas falaremos disto mais tarde.

Se você possui um roteador e quiser prevenir que certos hosts da sua rede façam downloads muito rápidos, então será preciso mexer na interface *interna* do seu roteador, na que envia dados para os seus computadores.

Você também precisa se certificar de que está controlando os gargalos do link. Se você tiver uma NIC de 100 Mbits e um roteador pendurado num link de 256 Kbits, então você precisa garantir que o roteador não receba mais dados do que pode aguentar. Se você bobear, o roteador acaba controlando o link e será ele que mandará na largura de banda disponível. O jeito é "tomar posse da fila" e obrigá-lo a ser o link mais lento - por sorte, isto não só é possível como também fácil.

Filas de Disciplina simples sem classe

Com disciplinas de fila podemos mudar o modo como os dados são enviados. Disciplinas de fila sem classe são as que aceitam dados sem restrições e apenas os descartam, atrasam ou refazem seu planejamento.

As disciplinas podem ser usadas para modelar o tráfego para uma interface sem quaisquer subdivisões. É extremamente importante que você entenda as características destas filas antes de encarar as filas com classe de qdisc-contendo-qdiscs.

A disciplina mais utilizada é a pfifo_fast qdisc - aliás, é a default. Cada uma das disciplinas possui suas virtudes e suas fraquezas, mas explicam porque estas características avançadas são tão robustas - elas nada mais são do que "apenas outra fila".

pfifo_fast

Esta fila é o que o seu nome diz: First In, First Out (o primeiro a entrar é o primeiro a sair). Isto significa que nenhum pacote recebe um tratamento especial. Esta fila possui 3 "bandas" e a regra FIFO é aplicada a cada uma delas. No entanto, enquanto houver pacotes esperando na banda 0, a banda 1 não será processada. O mesmo vale para a banda 1 e para a banda 2.

O kernel respeita a chamada flag Type of Service (Tipo de Serviço) dos pacotes e se empenha em colocar os pacotes com "minimum dalay" (retardo mínimo) na banda 0.

Não confunda esta qdisc simples sem classe com a PRIO com classe! Apesar de serem parecidas, a pfifo_fast não tem classe e você não pode adicionar outra qdiscs a ela com o comando tc.

Não é possível configurar a qdiscs pfifo_fast porque ela é a default. Sua configuração é a seguinte:

priomap: determina como as prioridades do pacote, determinados pelo kernel, são mapeados
para as bandas. O mapeamento se baseia no octeto TOS do pacote que tem o seguinte aspecto:

       0     1     2     3     4     5     6     7
    +-----+-----+-----+-----+-----+-----+-----+-----+
    |                 |                       |     |
    |   PRECEDENCE    |          TOS          | MBZ |
    |                 |                       |     |
    +-----+-----+-----+-----+-----+-----+-----+-----+


Os quatro bits do TOS (o 'campo TOS') são definidos como:

    Binário Decimal  Significado
    ---------------------------------------------------------------------------
    1000      8      Minimizar o retardo (minimize dalay - md)
    0100      4      Maximizar a passagem (maximize throughput - mt)
    0010      2      Maximizar a confiabilidade (maximize reliability - mr)
    0001      1      Minimizar o custo monetário (minimize monetary cost - mmc)
    0000      0      Serviço Normal

Como existe 1 bit à direita destes 4 bits, o valor do campo TOS é o dobro do valor dos bits TOS. Um tcpdump -v -v mostra o valor do campo TOS completo e não apenas dos 4 bits. É o valor da primeira coluna da tabela a seguir:

    TOS     Bits  Significa                Prioridade Linux    Banda
    ----------------------------------------------------------------
    0x0     0     Normal Service           0 Best Effort       1
    0x2     1     Minimize Monetary Cost   1 Filler            2
    0x4     2     Maximize Reliability     0 Best Effort       1
    0x6     3     mmc+mr                   0 Best Effort       1
    0x8     4     Maximize Throughput      2 Bulk              2
    0xa     5     mmc+mt                   2 Bulk              2
    0xc     6     mr+mt                    2 Bulk              2
    0xe     7     mmc+mr+mt                2 Bulk              2
    0x10    8     Minimize Delay           6 Interactive       0
    0x12    9     mmc+md                   6 Interactive       0
    0x14    10    mr+md                    6 Interactive       0
    0x16    11    mmc+mr+md                6 Interactive       0
    0x18    12    mt+md                    4 Int. Bulk         1
    0x1a    13    mmc+mt+md                4 Int. Bulk         1
    0x1c    14    mr+mt+md                 4 Int. Bulk         1
    0x1e    15    mmc+mr+mt+md             4 Int. Bulk         1

Viiixi... um monte de números! A segunda coluna mostra o valor do quatro bits TOS e, a seguinte, o significado dos valores. Por exemplo, 15 significa um pacote com Custo Monetário Mínimo, Máximo de Confiabilidade, Máximo de Passagem e Retardo Mínimo. Este pacote deve ser do "irlandês pão-duro" smile

A quarta coluna lista o modo como o kernel do Linux interpreta os bits TOS e lhes atribui a prioridade.

A última coluna mostra o resultado do priomap (mapa de prioridades). Na linha de comando, o priomap default se mostra como:

1, 2, 2, 2, 1, 2, 0, 0 , 1, 1, 1, 1, 1, 1, 1, 1

Isto significa que a prioridade 4, por exemplo, é mapeada para a banda 1. O priomap também permite listar prioridades maiores (> 7) que não correspondem a mapeamentos TOS mas são determinadas através de outros meios.

A tabela a seguir, copiada da RFC 1349, nos mostra como aplicativos podem determinar seus bits TOS:

TELNET                   1000           (minimizar retardo)

FTP
        Controle         1000           (minimizar retardo)
        Dados            0100           (maximizar passagem)

TFTP                     1000           (minimizar retardo)

SMTP
        Fase de Comando  1000           (minimizar retardo)
        Fase de DADOS    0100           (maximizar passagem)

Domain Name Service (DNS)
    	UDP Query        1000           (minimizar retardo)
    	TCP Query        0000
    	Zone Transfer    0100           (maximizar passagem)

NNTP                     0001           (minimizar custo monetário)

ICMP
    	Erros            0000
    	Solicitações     0000 (a maioria)
    	Respostas         (a maioria)

txqueuelen: o comprimento desta fila é obtido através da configuração da interface, a qual pode ser vista e determinada com o ifconfig e o ip. Para determinar o comprimento da fila em 10, execute ifconfig eth0 txqueuelen 10. Não é possível determinar o valor deste parâmetro com tc!

Informações adicionais