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

  1. 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 de 2 na prática.

  2. Fixar persistentemente o valor do net.core.rps_sock_flow_entries:

    # sysctl -p /etc/sysctl.d/95-enable-rps.conf
  3. 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 em 32768 e houver 16 configurado com filas de recepção, o rps_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 de rps_sock_flow_entries.

  4. 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'"
  5. 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.