Product SiteDocumentation Site

10.4. Qualidade do Serviço

10.4.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.4.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.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 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.4.2.2. Configuração Padrão

Barring a specific QoS configuration, the Linux kernel uses the pfifo_fast queue scheduler, which provides a few interesting features by itself. The priority of each processed IP packet is based on the DSCP field (Differentiated of Services Code Point) of this packet; modifying this 6-bit field is enough to take advantage of the scheduling features. Refer to https://en.wikipedia.org/wiki/Differentiated_services#Class_Selector for more information.
The DSCP field can be set by applications that generate IP packets, or modified on the fly by netfilter. The following rules are sufficient to increase responsiveness for a server's SSH service, note that the DSCP field must be set in 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