Red Hat Training

A Red Hat training course is available for RHEL 8

21.6. Dirección de flujo de recepción

Receive Flow Steering (RFS) amplía el comportamiento de RPS para aumentar la tasa de aciertos de la caché de la CPU y reducir así la latencia de la red. Mientras que RPS reenvía los paquetes basándose únicamente en la longitud de la cola, RFS utiliza el back-end de RPS para calcular la CPU más adecuada y, a continuación, reenvía los paquetes basándose en la ubicación de la aplicación que los consume. Esto aumenta la eficiencia de la caché de la CPU.

Los datos recibidos de un solo emisor no se envían a más de una CPU. Si la cantidad de datos recibidos de un solo emisor es mayor que la que puede manejar una sola CPU, configure un tamaño de trama mayor para reducir el número de interrupciones y, por tanto, la cantidad de trabajo de procesamiento para la CPU. Como alternativa, considere las opciones de descarga de NIC o CPUs más rápidas.

Considere la posibilidad de utilizar numactl o taskset junto con RFS para asignar aplicaciones a núcleos, sockets o nodos NUMA específicos. Esto puede ayudar a evitar que los paquetes se procesen fuera de orden.

21.6.1. Activación de la dirección del flujo de recepción

Por defecto, la dirección de flujo de recepción (RFS) está desactivada. Este procedimiento describe cómo habilitar el RFS.

Procedimiento

  1. Establezca el valor del núcleo net.core.rps_sock_flow_entries al número máximo esperado de conexiones activas simultáneas:

    # echo \ "net.core.rps_sock_flow_entries=32768" > /etc/sysctl.d/95-enable-rps.conf

    Red Hat recomienda un valor de 32768 para cargas de servidor moderadas. Todos los valores introducidos se redondean a la potencia más cercana de 2 en la práctica.

  2. Establece de forma persistente el valor de la net.core.rps_sock_flow_entries:

    # sysctl -p /etc/sysctl.d/95-enable-rps.conf
  3. Para establecer temporalmente el valor del sys/class/net/device/queues/rx-queue/rps_flow_cnt al valor del archivo (rps_sock_flow_entries/N), donde N es el número de colas de recepción de un dispositivo:

    # echo 2048 > /sys/class/net/device/queues/rx-queue/rps_flow_cnt

    Sustituya device por el nombre del dispositivo de red que desea configurar (por ejemplo, enp1s0), y rx-queue por la cola de recepción que desea configurar (por ejemplo, rx-0). Sustituya N por el número de colas de recepción configuradas. Por ejemplo, si el rps_flow_entries está configurado como 32768 y hay 16 colas de recepción configuradas, el rps_flow_cnt = 32786/16= 2048 (es decir, rps_flow_cnt = rps_flow_enties/N ).

    Para los dispositivos de cola única, el valor de rps_flow_cnt es el mismo que el de rps_sock_flow_entries.

  4. Habilite de forma persistente la RFS en todos los dispositivos de red, cree el archivo /etc/udev/rules.d/99-persistent-net.rules y añada el siguiente contenido:

    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 activar el RPS en un dispositivo de red específico:

    SUBSYSTEM=="net", ACTION=="move", NAME="device name" RUN{program} ="/bin/bash -c 'for x in /sys/$DEVPATH/queues/rx-*; do echo 2048 > $x/rps_flow_cnt; done'"

    Sustituya device name por el nombre real del dispositivo de red.

Pasos de verificación

  • Compruebe si la RFS está activada:

    # cat /proc/sys/net/core/rps_sock_flow_entries
    32768
    
    # cat /sys/class/net/device/queues/rx-queue/rps_flow_cnt
    2048

Recursos adicionales

  • Para más información, consulte la página de manual sysctl.