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
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 de2
en la práctica.Establece de forma persistente el valor de la
net.core.rps_sock_flow_entries
:# sysctl -p /etc/sysctl.d/95-enable-rps.conf
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 como32768
y hay16
colas de recepción configuradas, elrps_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 derps_sock_flow_entries
.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'"
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
.