Todos los productos
Search
Centro de documentos

Elastic Compute Service:NIC multi-queue

Última actualización: Sep 02, 2026

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

  1. Vaya a ECS Console - Elastic Network Interfaces.

  2. En la esquina superior izquierda de la página, seleccione una región y un resource group.

  3. Haga clic en el ID de la ENI secundaria deseada para abrir su página de detalles.

  4. 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:

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:

Comprobar desde la instancia

  1. Connect to a Linux instance.

    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.

  2. 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
  3. 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 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:       3

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:

Usar la consola

  1. Vaya a ECS Console - Elastic Network Interfaces.

  2. En la esquina superior izquierda de la página, seleccione una región y un resource group.

  3. Haga clic en el ID de la ENI secundaria deseada para abrir su página de detalles.

  4. 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).

  5. 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.

Nota
  • 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.

  1. Connect to a Linux instance.

  2. 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
  3. 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
  4. 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
  5. 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 N

    N es el número de colas que desea que utilice la ENI. N debe 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.

Nota
  • 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.

  1. Connect to a Linux instance.

  2. (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
  3. 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

    Correcciones en la última versión de ecs_mq

    Correcciones en la última versión de ecs_mq respecto a la versión anterior de ecs_mq:

    • Prioriza la vinculación de interrupciones a las CPU en el mismo nodo NUMA que el dispositivo PCIe de la ENI.

    • Optimiza la lógica de ajuste para múltiples dispositivos de red.

    • Ajusta la lógica de vinculación de interrupciones según la proporción entre colas NIC y núcleos de CPU.

    • Optimiza la vinculación de interrupciones según la posición de los hermanos de CPU.

    • Soluciona el aumento en la latencia de acceso a memoria causado por vinculaciones cruzadas entre nodos NUMA en la versión anterior.

    • El nuevo modo de ecs_mq está habilitado de forma predeterminada. Cambie entre modos con los siguientes comandos:

      • Modo antiguo de ecs_mq: ecs_mq_rps_rfs old

      • Modo nuevo de ecs_mq: ecs_mq_rps_rfs new

    • Soluciona un problema donde no se encontraba el comando ethtool durante la conexión en caliente de ENI en algunos sistemas, lo que provocaba fallos en ecs_mq_rps_rfs.

    Nota

    El nuevo ecs_mq ofrece una mejora del 5 % al 30 % en el rendimiento de red frente al antiguo ecs_mq para la mayoría de los valores de PPS y BPS en pruebas de red.

  4. Descomprima el paquete ecs_mq:

    tar -xzf ecs_mq_latest.tgz
  5. Cambie al directorio de trabajo:

    cd ecs_mq/
  6. Ejecute el script de instalación de ecs_mq:

    bash install.sh redhat 9
    Nota

    Reemplace redhat y 9 con el nombre y el número de versión principal de su sistema operativo.

  7. Inicie el servicio ecs_mq:

    systemctl start ecs_mq

    El 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.