Product SiteDocumentation Site

10.4. Qualidade do serviço

10.4.1. Princípio e mecanismo

Quality of Service (ou QoS para abreviar - Qualidade do Serviço) 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 do tráfego de rede em categorias, e à diferenciação ao manejar esse tráfego de acordo com a categoria à 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 à 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 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.4.2. Configurando e implementando

Os parâmetros 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.4.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 enp1s0, 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, historicamente esse script é chamado assim que a interface estiver 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. Ou no caso PPP, criar um script que chama wondershaper in /etc/ppp/ip-up.d/ vai habilitar o controle de trafego assim que a conexão estiver ativa. Há um exemplo abaixo usando o primeiro método:

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

10.4.2.2. Configuração padrão

Salvo uma configuração de QoS específica, o núcleo Linux usa o escalonador de fila pfifo_fast, que fornece, ele mesmo, alguns recursos interessantes. A prioridade de cada pacote IP processado é baseada no campo DSCP (Differentiated Services Code Point) desse pacote; modificar esse campo de 6 bits é o suficiente para aproveitar os recursos de agendamento. Consulte https://en.wikipedia.org/wiki/Differentiated_services#Class_Selector para mais informações.
O campo DSCP 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, observe que o campo DSCP deve ser definido em hexadecimal:
nft add table ip mangle
nft add rule ip mangle PREROUTING tcp sport 22 counter ip dscp set 0x04
nft add rule ip mangle PREROUTING tcp dport 22 counter ip dscp set 0x04