Informática Numaboa - Linux
Administração de Largura de Banda no Linux II
Dom 22 Abr 2007 18:09 |
- Detalhes
- Categoria: Como fazer configurações
- Atualização: Terça, 21 Abril 2009 18:20
- Autor: vovó Vicki
- Acessos: 10403
A qdisc PRIO
A qdisc PRIO não faz modelagem, apenas subdivide o tráfego de acordo com a configuração dos filtros. A qdisc PRIO pode ser considerada uma espécie de pfifo_fast vitaminada onde cada banda é uma classe separada ao invés de ser uma FIFO simples.
Quando um pacote entra numa fila qdisc PRIO, uma classe é escolhida de acordo com os comandos de filtragem dados. Por default, três classes são criadas. Estas classes, por default, contém qdiscs FIFO puras sem uma estrutura interna, mas é possível substituí-las por qualquer qdisc disponível.
Sempre que um pacote precisar sair da fila, a classe :1 é acionada primeiro. Classes mais altas são usadas apenas se todas as bandas mais baixas não devolverem um pacote.
Esta qdisc é muito útil quando se quer priorizar certos tipos de tráfego sem usar apenas flags TOS, mas usando todo o poder dos filtros tc. Também é possível adicionar outra qdisc às três classes predefinidas, se bem que a pfifo_fast está limitada a qdiscs fifo simples.
Como a PRIO não faz modelagem, vale o mesmo alerta dado para a SFQ: deve ser usada apenas se o link físico estiver realmente lotado ou insira-a numa qdisc com classe que faça modelagem. A segunda alternativa vale para praticamente todos os cable modems e dispositivos DSL.
Formalmente, a qdisc PRIO é um controlador de precedência com Conservação de Trabalho.
Parâmetros e uso da PRIO
Os seguintes parâmetros são reconhecidos pelo tc:
- bands (bandas): O número de bandas que devem ser criadas. Na verdade, cada banda é uma classe. Se você mudar este número então também precisa alterar o priomap.
- priomap (mapa de prioridades): Se não forem fornecidos filtros tc para classificar o tráfego, a qdisc PRIO verifica a prioridade TC_PRIO para decidir como deve fazer a fila do tráfego.
Isto funciona do mesmo modo que para a pfifo_fast. Para maiores detalhes procure a pfifo_fast em Administração de Largura de Banda no Linux.As bandas são classes e são denominadas maior:1 a maior:3 por default. Se determinada qdisc PRIO é chamada de 12:, faça um tc filter traffic para 12:1 para aumentar a sua prioridade.
Repetindo: a banda 0 vai para o número menor 1, a banda 1 para o número menor 2, etc.
Exemplo de configuração
Vamos criar a seguinte árvore:
1: qdisc raiz / | \ / | \ / | \ 1:1 1:2 1:3 classes | | | 10: 20: 30: qdiscs qdiscs sfq tbf sfq banda 0 1 2
A massa do tráfego irá para 30:, o tráfego interativo para 20: ou 10:.
Linhas de comando:
# tc qdisc add dev eth0 root handle 1: prio ## Isto cria instantaneamente as classes 1:1, 1:2, 1:3 # tc qdisc add dev eth0 parent 1:1 handle 10: sfq # tc qdisc add dev eth0 parent 1:2 handle 20: tbf rate 20kbit buffer 1600 limit 3000 # tc qdisc add dev eth0 parent 1:3 handle 30: sfq
Agora vamos ver o que criamos:
# tc -s qdisc ls dev eth0 qdisc sfq 30: quantum 1514b Sent 0 bytes 0 pkts (dropped 0, overlimits 0) qdisc tbf 20: rate 20Kbit burst 1599b lat 667.6ms Sent 0 bytes 0 pkts (dropped 0, overlimits 0) qdisc sfq 10: quantum 1514b Sent 132 bytes 2 pkts (dropped 0, overlimits 0) qdisc prio 1: bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 Sent 174 bytes 3 pkts (dropped 0, overlimits 0)
Como você pode ver, a banda 0 já tem algum tráfego e um pacote foi enviado enquanto rodamos este comando!
Agora vamos fazer uma transferência de dados em massa com uma ferramenta que define as flags TOS corretamente:
# scp tc O endereço de e-mail address está sendo protegido de spambots. Você precisa ativar o JavaScript enabled para vê-lo. :./ O endereço de e-mail address está sendo protegido de spambots. Você precisa ativar o JavaScript enabled para vê-lo. 's password: tc 100% |*****************************| 353 KB 00:00 # tc -s qdisc ls dev eth0 qdisc sfq 30: quantum 1514b Sent 384228 bytes 274 pkts (dropped 0, overlimits 0) qdisc tbf 20: rate 20Kbit burst 1599b lat 667.6ms Sent 2640 bytes 20 pkts (dropped 0, overlimits 0) qdisc sfq 10: quantum 1514b Sent 2230 bytes 31 pkts (dropped 0, overlimits 0) qdisc prio 1: bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 Sent 389140 bytes 326 pkts (dropped 0, overlimits 0)
Como pode ser visto, todo o tráfego foi para o manipulador 30:, a banda de prioridade mais baixa - justamente o que queríamos que acontecesse. Agora, para verificar se o tráfego interativo vai para bandas mais altas, vamos criá-lo:
# tc -s qdisc ls dev eth0 qdisc sfq 30: quantum 1514b Sent 384228 bytes 274 pkts (dropped 0, overlimits 0) qdisc tbf 20: rate 20Kbit burst 1599b lat 667.6ms Sent 2640 bytes 20 pkts (dropped 0, overlimits 0) qdisc sfq 10: quantum 1514b Sent 14926 bytes 193 pkts (dropped 0, overlimits 0) qdisc prio 1: bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 Sent 401836 bytes 488 pkts (dropped 0, overlimits 0)
Funcionou! Todo o tráfego interativo foi para 10:, a qdisc com a prioridade mais alta. Nenhum tráfego foi enviado para a prioridade mais baixa que, anteriormente, recebeu toda scp.