Product SiteDocumentation Site

10.3. Qualidade do Serviço

10.3.1. Princípio e Mecanismo

Quality of Service (ou QoS para abreviar) se refere a um conjunto de técnicas que garantem ou melhoram a qualidade do serviço fornecido às aplicações. A mais popular dessas técnicas envolve a classificação o tráfego de rede em categorias, e à diferenciação ao manejar esse tráfego de acordo com a categoria a qual ele pertence. A principal aplicação desse conceito de diferenciação de serviços é traffic shaping, o qual limita a taxa de transmissão de dados para conexões relacionadas a algum serviço e/ou máquinas (hosts) para que não haja saturação da largura de banda disponível e deixe outros importantes serviços sem nada. Traffic shaping se encaixa bem particularmente no tráfego TCP, já que esse protocolo se adapta automaticamente a largura de banda disponível.
Também é possível alterar as prioridades do tráfego, o que permite priorizar pacotes relacionados a serviços de interação (como o ssh e o telnet) ou a serviços que lidam apenas com pequenos blocos de dados.
Os núcleos Debian incluem os recursos necessários para o QoS junto com seus módulos associados. Esses módulos são muitos, e cada um deles provê um serviço diferente, principalmente por meio de agendamentos especiais para as filas de pacotes IP; a ampla gama de comportamentos do agendador disponível abrange todos os possíveis requisitos.

10.3.2. Configurando e implementando

Os parametros do QoS são configurados através do comando tc (fornecido pelo pacote iproute). Como sua interface é bem complexa, o uso de ferramentas de alto nível é recomendado.

10.3.2.1. Reduzindo Latências: wondershaper

O principal propósito do wondershaper (em pacote de nome similar) é minimizar latências independente da carga da rede. Isso é alcançado limitando o total de tráfego para um valor que seja pouco abaixo do valor de saturação do link.
Uma vez que uma interface de rede esteja configurada, configura-se sua limitação de tráfego executando wondershaper interface taxa_download taxa_upload. A interface pode ser eth0 ou ppp0 por exemplo, e ambas as taxas são expressas em kilobits por segundo. O comando wondershaper remove interface desabilita o controle de tráfego na interface especificada.
Para uma conexão Ethernet, é melhor chamar esse script assim que a interface esteja configurada. Isso é feito adicionando as diretivas up e down no arquivo /etc/network/interfaces permitindo que os comandos declarados sejam executados, respectivamente, após a configuração da interface e antes que ela seja desconfigurada. Por exemplo:

Exemplo 10.9. Mudanças no arquivo /etc/network/interfaces

iface eth0 inet dhcp
    up /sbin/wondershaper eth0 500 100
    down /sbin/wondershaper remove eth0
No caso do PPP, criar um script que chame wondershaper em /etc/ppp/ip-up.d/ irá habilitar o control de tráfico assim que a conexão seja feita.

10.3.2.2. Configuração Padrão

Salvo uma configuração de QoS específica, o núcleo Linux usa o agendador de fila pfifo_fast, que fornece, ele mesmo, alguns recursos interessantes. A prioridade de cada pacote IP processado é baseada no campo ToS (Type of Service) desse pacote; modicar esse campo é o suficiente para tirar vantagem dos recursos de agendamento. Existem cinco possíveis valores:
  • Normal-Service (0); (serviço normal)
  • Minimize-Cost (2); (minimizar custo)
  • Maximize-Reliability (4); (maximizar confiabilidade)
  • Maximize-Throughput (8); (maximizar vazão)
  • Minimize-Delay (16) (minimizar retardo).
O campo ToS pode ser configurado por aplicações que geram pacotes IP, ou modificado em tempo de execução pelo netfilter. As regras a seguir são suficientes para aumentar a capacidade de resposta para o serviço de um servidor SSH:
iptables -t mangle -A PREROUTING -p tcp --sport ssh -j TOS --set-tos Minimize-Delay
iptables -t mangle -A PREROUTING -p tcp --dport ssh -j TOS --set-tos Minimize-Delay