Red Hat Training
A Red Hat training course is available for RHEL 8
21.6. Receber a direção do fluxo
A Direção de Fluxo de Recepção (RFS) estende o comportamento RPS para aumentar a taxa de acerto do cache da CPU e assim reduzir a latência da rede. Onde o RPS encaminha os pacotes com base unicamente no comprimento da fila, o RFS usa o RPS back end para calcular a CPU mais apropriada, depois encaminha os pacotes com base na localização da aplicação que consome o pacote. Isto aumenta a eficiência do cache da CPU.
Os dados recebidos de um único remetente não são enviados a mais de uma CPU. Se a quantidade de dados recebidos de um único remetente for maior do que uma única CPU pode lidar, configure um tamanho de estrutura maior para reduzir o número de interrupções e, portanto, a quantidade de trabalho de processamento para a CPU. Alternativamente, considere as opções de descarregar NIC ou CPUs mais rápidas.
Considere o uso de numactl
ou taskset
em conjunto com RFS para fixar aplicações em núcleos específicos, soquetes ou nós NUMA. Isto pode ajudar a evitar que os pacotes sejam processados fora de ordem.
21.6.1. Habilitando a Direção do Fluxo de Recepção
Por padrão, a Direção de Fluxo de Recepção (RFS) está desativada. Este procedimento descreve como ativar a RFS.
Procedimento
Ajuste o valor do kernel
net.core.rps_sock_flow_entries
para o número máximo esperado de conexões ativas concomitantemente:# echo \i1"net.core.rps_sock_flow_entries=32768\i1 > /etc/sysctl.d/95-enable-rps.conf
A Red Hat recomenda um valor de
32768
para cargas moderadas do servidor. Todos os valores inseridos são arredondados para a potência mais próxima de2
na prática.Fixar persistentemente o valor do
net.core.rps_sock_flow_entries
:# sysctl -p /etc/sysctl.d/95-enable-rps.conf
Para definir temporariamente o valor do
sys/class/net/device/queues/rx-queue/rps_flow_cnt
arquivo ao valor do (rps_sock_flow_entries/N
), onde N é o número de filas de recebimento em um dispositivo:# echo 2048 > /sys/class/net/device/queues/rx-queue/rps_flow_cnt
Substitua device pelo nome do dispositivo de rede que você deseja configurar (por exemplo, enp1s0), e rx-queue pela fila de recepção que você deseja configurar (por exemplo, rx-0). _ Substitua N pelo número de filas de recepção configuradas. Por exemplo, se o
rps_flow_entries
estiver configurado em32768
e houver16
configurado com filas de recepção, orps_flow_cnt = 32786/16= 2048
(ou seja, o número de filas de recepção configuradas),rps_flow_cnt = rps_flow_enties/N
).Para dispositivos de fila única, o valor de
rps_flow_cnt
é o mesmo que o valor derps_sock_flow_entries
.Habilitar constantemente a RFS em todos os dispositivos de rede, criar o arquivo
/etc/udev/rules.d/99-persistent-net.rules
e adicionar o seguinte conteúdo:SUBSYSTEM=="net", ACTION=="add", RUN{program}+="/bin/bash -c 'for x in /sys/$DEVPATH/queues/rx-*; do echo 2048 > $x/rps_flow_cnt; done'"
Opcional: Para habilitar o RPS em um dispositivo de rede específico:
SUBSYSTEM==="net", ACTION===="move", NAME=="device name{program} =="/bin/bash -c 'for x in /sys/$DEVPATH/queues/rx-*; do echo 2048 > $x/rps_flow_cnt; done'"
Substituir device name pelo nome real do dispositivo de rede.
Etapas de verificação
Verificar se a RFS está habilitada:
# cat /proc/sys/net/core/rps_sock_flow_entries 32768 # cat /sys/class/net/device/queues/rx-queue/rps_flow_cnt 2048
Recursos adicionais
-
Para mais informações, consulte a página de manual
sysctl
.