Informática Numaboa - Linux
Administração de Largura de Banda no Linux
Sex 20 Abr 2007 19:22 |
- Detalhes
- Categoria: Como fazer configurações
- Atualização: Terça, 21 Abril 2009 18:16
- Autor: vovó Vicki
- Acessos: 12147
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"
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:
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!