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 Copiar o linkLink copiado para a área de transferência!
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_entriespara 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
# echo \i1"net.core.rps_sock_flow_entries=32768\i1 > /etc/sysctl.d/95-enable-rps.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow A Red Hat recomenda um valor de
32768para cargas moderadas do servidor. Todos os valores inseridos são arredondados para a potência mais próxima de2na prática.Fixar persistentemente o valor do
net.core.rps_sock_flow_entries:sysctl -p /etc/sysctl.d/95-enable-rps.conf
# sysctl -p /etc/sysctl.d/95-enable-rps.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow Para definir temporariamente o valor do
sys/class/net/device/queues/rx-queue/rps_flow_cntarquivo 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
# echo 2048 > /sys/class/net/device/queues/rx-queue/rps_flow_cntCopy to Clipboard Copied! Toggle word wrap Toggle overflow 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_entriesestiver configurado em32768e houver16configurado 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.rulese 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'"SUBSYSTEM=="net", ACTION=="add", RUN{program}+="/bin/bash -c 'for x in /sys/$DEVPATH/queues/rx-*; do echo 2048 > $x/rps_flow_cnt; done'"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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'"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'"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
# cat /proc/sys/net/core/rps_sock_flow_entries 32768 # cat /sys/class/net/device/queues/rx-queue/rps_flow_cnt 2048Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Recursos adicionais
-
Para mais informações, consulte a página de manual
sysctl.