Distribuya el procesamiento de paquetes entre varios núcleos de CPU para mejorar el rendimiento de la red y reducir la latencia.
Por qué usar NIC multi-queue
Una interfaz de red con una sola cola depende de un único núcleo de CPU para procesar todos los paquetes, lo que puede provocar sobrecarga del procesador, alta latencia y pérdida de paquetes. NIC multi-queue distribuye el tráfico entre varios núcleos para optimizar el uso de los recursos.
Con las mismas condiciones de PPS y ancho de banda, dos colas mejoran el rendimiento de la red entre un 50 % y un 100 % en comparación con una sola cola. Cuatro colas ofrecen ganancias aún mayores:
Mejor aprovechamiento multinúcleo: Distribuye el tráfico entre los núcleos de la CPU para equilibrar la carga y aumentar la utilización.
Mayor rendimiento: El procesamiento paralelo de paquetes incrementa el rendimiento, especialmente bajo cargas elevadas.
Menor latencia: La distribución de paquetes entre varias colas reduce la congestión y la latencia.
Reducción de pérdida de paquetes: Evita la pérdida de paquetes causada por la sobrecarga de una sola cola durante picos de tráfico.
Una configuración inadecuada puede degradar el rendimiento. Por ejemplo, un número incorrecto de colas o ajustes erróneos de afinidad de CPU provocan cambios de contexto innecesarios, mientras que muy pocas colas subutilizan los recursos de hardware.
Cuando se vincula una ENI a una instancia, su número de colas toma como valor predeterminado la configuración del tipo de instancia. Para ajustar manualmente este valor, evalúe primero su caso de uso y las condiciones del hardware.
Cómo funciona NIC multi-queue
-
Arquitectura de colas
Una ENI admite varias colas combinadas, cada una procesada por un núcleo de CPU independiente. Esto permite el procesamiento paralelo de paquetes, reduce la contención de bloqueos y aprovecha al máximo el rendimiento multinúcleo.
Las colas de recepción (RX) y transmisión (TX) son los dos tipos de colas utilizados para procesar paquetes. Cada cola combinada consta de una cola RX y una cola TX:
-
Cola RX: Procesa los paquetes entrantes. La interfaz de red distribuye cada paquete a una cola RX específica según las reglas de Receive Side Scaling (RSS), como round-robin o hash basado en flujos.
Algunas familias de tipos de instancia admiten Custom RSS for ENIs, que utiliza algoritmos de hash para distribuir el tráfico entre diferentes colas RX.
Cola TX: Gestiona los paquetes salientes. Las aplicaciones colocan los paquetes en una cola TX y la interfaz de red los envía según su secuencia o prioridad.
-
-
Compatibilidad con afinidad de IRQ
Cada cola tiene una interrupción independiente. La afinidad de IRQ distribuye el manejo de interrupciones entre los núcleos de la CPU para evitar que un solo núcleo se sobrecargue.
La afinidad de IRQ está habilitada de forma predeterminada en todas las imágenes públicas, excepto en Red Hat Enterprise Linux. Consulte Configure IRQ affinity.
Limitaciones
-
Solo algunos tipos de instancia admiten NIC multi-queue. Consulte Instance type families. Si el valor de la columna Multi-queue es mayor que 1, el tipo de instancia es compatible con NIC multi-queue.
En los tipos de instancia compatibles, NIC multi-queue se habilita automáticamente al vincular una ENI.
El número de colas indicado para un tipo de instancia corresponde al número máximo de colas por ENI que admite dicho tipo.
-
Llame a la operación de API DescribeInstanceTypes con el parámetro InstanceTypeFamily para consultar las métricas relacionadas con las colas:
-
Número predeterminado de colas
PrimaryEniQueueNumber: número predeterminado de colas para la ENI principal. SecondaryEniQueueNumber: número predeterminado de colas para una ENI secundaria.
-
Máximo de colas por ENI
MaximumQueueNumberPerEni: número máximo de colas por ENI para la familia de tipos de instancia.
-
Cuota total de colas
TotalEniQueueQuantity: cuota total de colas para la familia de tipos de instancia.
-
Es posible que las imágenes públicas con versiones de kernel anteriores a la 2.6 no admitan NIC multi-queue. Utilice las imágenes públicas más recientes.
Consultar el número de colas de la ENI
Usar la consola
En la esquina superior izquierda de la página, seleccione una región y un resource group.
Haga clic en el ID de la ENI secundaria deseada para abrir su página de detalles.
-
En la sección Basic Information, localice el parámetro Queues. Este valor representa el número actual de colas.
Si modificó el número de colas, se mostrará el valor modificado.
-
Si no ha modificado el número de colas:
Si la ENI no está vinculada a ninguna instancia, no se mostrará ningún valor.
Si la ENI está vinculada a una instancia, se mostrará el default queue count for the instance type.
Usar la API
Llame a la operación DescribeNetworkInterfaceAttribute. El parámetro de respuesta QueueNumber indica el número de colas.
Si modificó el número de colas, se mostrará el valor modificado.
-
Si no ha modificado el número de colas:
Si la ENI no está vinculada a ninguna instancia, no se mostrará ningún valor.
Si la ENI está vinculada a una instancia, se mostrará el default queue count for the instance type.
Comprobar desde la instancia
-
Nota
Para instancias Windows, consulte el número de colas de la ENI en la consola de ECS o mediante una llamada a la API.
-
Consulte la configuración de red con
ip a:[root@ixxxxx ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8500 qdisc mq state UP group default qlen 1000 link/ether 00:16:3e:1b:74:12 brd ff:ff:ff:ff:ff:ff altname enp0s5 altname ens5 inet 172.16.20.226/24 brd 172.16.20.255 scope global dynamic noprefixroute eth0 valid_lft 315359814sec preferred_lft 315359814sec inet6 fe80::216:3eff:fe1b:7412/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8500 qdisc mq state UP group default qlen 1000 link/ether 00:16:3e:46:ff:fc brd ff:ff:ff:ff:ff:ff altname enp0s6 altname ens6 inet 172.16.20.227/24 brd 172.16.20.255 scope global dynamic noprefixroute eth1 valid_lft 315359814sec preferred_lft 315359814sec inet6 fe80::216:3eff:fe46:fffc/64 scope link valid_lft forever preferred_lft forever 4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8500 qdisc mq state UP group default qlen 1000 link/ether 00:16:3e:47:47:c2 brd ff:ff:ff:ff:ff:ff altname enp0s8 altname ens8 inet 172.16.20.228/24 brd 172.16.20.255 scope global dynamic noprefixroute eth2 valid_lft 315359814sec preferred_lft 315359814sec inet6 fe80::216:3eff:fe47:47c2/64 scope link valid_lft forever preferred_lft forever -
Compruebe si la ENI principal eth0 admite NIC multi-queue.
Este ejemplo utiliza la ENI principal. Para comprobar una ENI secundaria, reemplace el identificador por eth1, eth2 u otro valor.
ethtool -l eth0Revise la salida:
Si el valor "Combined" bajo "Pre-set maximums" es mayor que 1, la ENI admite NIC multi-queue. Este valor representa el número máximo de colas.
El valor "Combined" bajo "Current hardware settings" indica el número actual de colas en uso.
En este ejemplo, la ENI admite un máximo de tres colas combinadas (RX+TX) y actualmente utiliza tres.
[root@xxx ~]# ethtool -l eth0 Channel parameters for eth0: Pre-set maximums: RX: n/a TX: n/a Other: n/a Combined: 3 Current hardware settings: RX: n/a TX: n/a Other: n/a Combined: 3Para modificar el número máximo de colas, consulte Modify the queue count for an ENI.
Para modificar el número de colas del sistema operativo, consulte Modify the queue count used by the OS.
Modificar el número de colas de la ENI
Al vincular una ENI a una instancia, su número de colas toma como valor predeterminado la configuración del tipo de instancia. Puede ajustarlo desde la consola o mediante una llamada a la API. Tenga en cuenta lo siguiente:
Solo puede modificar el número de colas cuando la ENI tiene el estado Available, o cuando está Bound a una instancia con estado Stopped.
El número de colas no puede superar el maximum queues per ENI for the instance type.
El número total de colas de todas las ENI en una instancia no puede exceder el total queue quota for the instance type.
Usar la consola
En la esquina superior izquierda de la página, seleccione una región y un resource group.
Haga clic en el ID de la ENI secundaria deseada para abrir su página de detalles.
-
Haga clic en Modify Queue Count.
Haga clic en el icono de edición junto al campo NIC Queue Number e introduzca el número de colas deseado en el cuadro de entrada (rango válido: 1 a 2048).
Haga clic en OK.
Usar la API
Llame a la operación ModifyNetworkInterfaceAttribute y establezca el parámetro QueueNumber para modificar el número de colas.
El nuevo número de colas surtirá efecto la próxima vez que se inicie la instancia vinculada.
Modificar el número de colas del sistema operativo
Cuando ejecuta modify the ENI queue count, el sistema operativo aplica automáticamente la nueva configuración.
También puede ajustar el número de colas que la ENI utiliza activamente. Este valor debe ser menor o igual al número de colas configurado.
Cambiar el número de colas utilizadas por el sistema operativo no afecta el número de colas configurado de la ENI ni se refleja en la consola o en las respuestas de la API.
Este cambio es temporal y no persiste tras reiniciar la instancia.
El siguiente ejemplo ajusta el número de colas en una instancia Alibaba Cloud Linux 3 con NIC multi-queue.
-
Consulte la configuración de red con
ip address show:[ecs-user@iZbpxxx ~]$ ip address show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:16:3e:37:7a:82 brd ff:ff:ff:ff:ff:ff altname enp0s5 altname ens5 inet 172.16.0.20/24 brd 172.16.0.255 scope global dynamic noprefixroute eth0 valid_lft 315359878sec preferred_lft 315359878sec inet6 fe80::216:3eff:fe37:7a82/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:16:3e:28:b1:9e brd ff:ff:ff:ff:ff:ff altname enp0s6 altname ens6 inet 172.16.0.21/24 brd 172.16.0.255 scope global dynamic noprefixroute eth1 valid_lft 315359879sec preferred_lft 315359879sec inet6 fe80::216:3eff:fe28:b19e/64 scope link valid_lft forever preferred_lft forever -
Compruebe si la ENI principal eth0 admite NIC multi-queue.
Este ejemplo utiliza la ENI principal. Para comprobar una ENI secundaria, reemplace el identificador por eth1, eth2 u otro valor.
ethtool -l eth0 -
Revise la salida:
Si el valor "Combined" bajo "Pre-set maximums" es mayor que 1, la ENI admite NIC multi-queue. Este valor representa el número máximo de colas.
El valor "Combined" bajo "Current hardware settings" indica el número actual de colas en uso.
En este ejemplo, la ENI admite un máximo de tres colas combinadas (RX+TX) y hay tres en uso.
[root@xxx ~]# ethtool -l eth0 Channel parameters for eth0: Pre-set maximums: RX: n/a TX: n/a Other: n/a Combined: 3 Current hardware settings: RX: n/a TX: n/a Other: n/a Combined: 3 -
Establezca en 2 el número de colas activas para la ENI principal eth0.
Este ejemplo utiliza la ENI principal. Para ajustar una ENI secundaria, reemplace el identificador por eth1, eth2 u otro valor.
sudo ethtool -L eth0 combined NNes el número de colas que desea que utilice la ENI.Ndebe ser menor o igual al valor "Combined" bajo "Pre-set maximums".Establezca el número de colas de la ENI principal en 2:
sudo ethtool -L eth0 combined 2
Configurar la afinidad de IRQ
NIC multi-queue generalmente requiere configurar la afinidad de IRQ para asignar interrupciones de diferentes colas a núcleos de CPU específicos, lo que reduce la contención y mejora el rendimiento.
Todas las imágenes públicas, excepto Red Hat Enterprise Linux, tienen la afinidad de IRQ habilitada de forma predeterminada.
Red Hat Enterprise Linux admite afinidad de IRQ, pero no la habilita de forma predeterminada. Siga los pasos a continuación para configurarla.
Los siguientes pasos utilizan el script ecs_mq para configurar la afinidad de IRQ en una imagen Red Hat Enterprise Linux 9.2. Otras imágenes tienen la afinidad de IRQ habilitada de forma predeterminada.
-
(Opcional) Detenga el servicio irqbalance.
El servicio irqbalance ajusta dinámicamente la afinidad de IRQ, lo cual puede entrar en conflicto con
ecs_mq. Deténgalo primero.systemctl stop irqbalance.service -
Descargue la versión más reciente del script
ecs_mq:wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/ecs_mq/ecs_mq_latest.tgz -
Descomprima el paquete
ecs_mq:tar -xzf ecs_mq_latest.tgz -
Cambie al directorio de trabajo:
cd ecs_mq/ -
Ejecute el script de instalación de
ecs_mq:bash install.sh redhat 9NotaReemplace
redhaty9con el nombre y el número de versión principal de su sistema operativo. -
Inicie el servicio
ecs_mq:systemctl start ecs_mqEl servicio habilita automáticamente la afinidad de IRQ.
Pruebe diferentes combinaciones de número de colas y afinidad de IRQ mientras monitorea el rendimiento y la latencia para encontrar el equilibrio óptimo.