Red Hat Training
A Red Hat training course is available for RHEL 8
21.2. Gargalos em uma recepção de pacotes
Embora a pilha de rede seja em grande parte auto-optimizadora, há uma série de pontos durante o processamento de pacotes de rede que podem se tornar gargalos e reduzir o desempenho. A seguir estão as questões que podem causar gargalos:
The buffer or ring buffer of the network card
-
O buffer de hardware pode ser um gargalo se o kernel deixar cair um grande número de pacotes. Use o utilitário
ethtool
para monitorar um sistema para pacotes descartados. The hardware or software interrupt queues
- As interrupções podem aumentar a latência e a contenção do processador. Para informações sobre como o processador lida com as interrupções, consulte Ajuste de sistemas de Afinidade de Interrupção.
The socket receive queue of the application
-
Um grande número de pacotes que não são copiados ou por um aumento nos erros de entrada do UDP (
InErrors
) no arquivo/proc/net/snmp
, indica um gargalo na fila de recepção de uma aplicação.
Se um buffer de hardware deixar cair um grande número de pacotes, as poucas soluções potenciais são as seguintes:
Slow the input traffic
- Filtrar o tráfego de entrada, reduzir o número de grupos multicast unidos, ou reduzir a quantidade de tráfego de transmissão para diminuir a taxa a que a fila preenche.
Resize the hardware buffer queue
Redimensionar a fila de amortecedores de hardware: Reduzir o número de pacotes que estão sendo descartados, aumentando o tamanho da fila para que ela não transborde tão facilmente. Você pode modificar os parâmetros
rx/tx
do dispositivo de rede com o comandoethtool
:ethtool --set-ring device-name value
Change the drain rate of the queue
Diminuir a taxa de enchimento da fila filtrando ou soltando pacotes antes que eles cheguem à fila, ou baixando o peso do dispositivo. Filtrar o tráfego de entrada ou baixar o peso do dispositivo da placa de interface de rede para diminuir o tráfego de entrada.
O peso do dispositivo se refere ao número de pacotes que um dispositivo pode receber de uma vez em um único acesso programado do processador. Você pode aumentar a taxa de drenagem de uma fila aumentando o peso de seu dispositivo que é controlado pela configuração do kernel
dev_weight
. Para alterar temporariamente este parâmetro, altere o conteúdo do arquivo/proc/sys/net/core/dev_weight
, ou para alterar permanentemente, use o comandosysctl
, que é fornecido pelo pacoteprocps-ng
.Aumentar o comprimento da fila de soquetes da aplicação: Esta é normalmente a maneira mais fácil de melhorar a taxa de drenagem de uma fila de soquetes, mas é pouco provável que seja uma solução a longo prazo. Se uma fila de soquetes receber uma quantidade limitada de tráfego em rajadas, o aumento da profundidade da fila de soquetes para corresponder ao tamanho das rajadas de tráfego pode impedir que os pacotes sejam descartados. Para aumentar a profundidade de uma fila, aumente o tamanho do buffer de recepção do soquete fazendo uma das seguintes mudanças:
-
Aumentar o valor do parâmetro
/proc/sys/net/core/rmem_default
: Este parâmetro controla o tamanho padrão do buffer de recepção utilizado pelos soquetes. Este valor deve ser menor ou igual ao valor do parâmetroproc/sys/net/core/rmem_max
. -
Use o
setsockopt
para configurar um valor maiorSO_RCVBUF
: Este parâmetro controla o tamanho máximo em bytes do buffer de recepção de um soquete. Use a chamada ao sistemagetsockopt
para determinar o valor atual do buffer.
-
Aumentar o valor do parâmetro
Alterar a taxa de drenagem de uma fila é geralmente a maneira mais simples de mitigar o mau desempenho da rede. Entretanto, o aumento do número de pacotes que um dispositivo pode receber de uma vez utiliza o tempo adicional do processador, durante o qual nenhum outro processo pode ser programado, o que pode causar outros problemas de desempenho.
Recursos adicionais
-
Para mais informações, consulte as páginas de manual
ss
,socket
eethtool
. -
O arquivo
/proc/net/snmp
.