Répartissez le traitement des paquets sur plusieurs cœurs CPU pour augmenter le débit réseau et réduire la latence.
Pourquoi utiliser la file d'attente multiple de la carte réseau
Une interface réseau à file d'attente unique s'appuie sur un seul cœur CPU pour traiter tous les paquets, ce qui peut entraîner une surcharge du processeur, une augmentation de la latence et une perte de paquets. La fonctionnalité de file d'attente multiple de la carte réseau (NIC multi-queue) répartit le trafic sur plusieurs cœurs afin d'améliorer l'utilisation des ressources.
Dans des conditions identiques de PPS (paquets par seconde) et de bande passante, l'utilisation de deux files d'attente améliore les performances réseau de 50 % à 100 % par rapport à une file d'attente unique. L'utilisation de quatre files d'attente offre des gains encore plus importants :
Meilleure utilisation des multicœurs : répartition du trafic sur les cœurs CPU pour un équilibrage de charge et une utilisation optimisée.
Débit accru : le traitement parallèle des paquets augmente le débit, en particulier sous forte charge.
Latence réduite : la répartition des paquets entre plusieurs files d'attente diminue la congestion et la latence.
Perte de paquets minimisée : évite la perte de paquets due à la surcharge d'une file d'attente unique lors d'un trafic élevé.
Une configuration incorrecte peut dégrader les performances. Par exemple, un nombre de files d'attente inadapté ou des paramètres d'affinité CPU mal configurés provoquent des commutations de contexte inutiles, tandis qu'un nombre insuffisant de files d'attente sous-utilise les ressources matérielles.
Lorsqu'une ENI est attachée à une instance, son nombre de files d'attente correspond par défaut au paramètre défini pour le type d'instance. Pour ajuster manuellement ce nombre, évaluez d'abord votre cas d'utilisation et les conditions matérielles.
Fonctionnement de la file d'attente multiple de la carte réseau
-
Architecture des files d'attente
Une ENI prend en charge plusieurs files d'attente combinées, chacune traitée par un cœur CPU indépendant. Cette approche permet un traitement parallèle des paquets, réduit la contention des verrous et exploite pleinement les performances des architectures multicœurs.
Les files d'attente de réception (RX) et de transmission (TX) sont les deux types de files utilisées pour le traitement des paquets. Chaque file d'attente combinée comprend une file RX et une file TX :
-
File d'attente RX : traite les paquets entrants. L'interface réseau distribue chaque paquet vers une file RX spécifique selon les règles RSS (Receive Side Scaling), telles que le tourniquet (round-robin) ou le hachage basé sur le flux.
Certaines familles de types d'instance prennent en charge la fonctionnalité RSS personnalisé pour les ENI, qui utilise des algorithmes de hachage pour distribuer le trafic vers différentes files RX.
File d'attente TX : gère les paquets sortants. Les applications placent les paquets dans une file TX, et l'interface réseau les envoie en fonction de leur séquence ou de leur priorité.
-
-
Prise en charge de l'affinité IRQ
Chaque file d'attente dispose d'une interruption indépendante. L'affinité IRQ répartit la gestion des interruptions sur les cœurs CPU pour éviter la surcharge d'un cœur unique.
L'affinité IRQ est activée par défaut sur toutes les images publiques, à l'exception de Red Hat Enterprise Linux. Consultez la section Configurer l'affinité IRQ.
Limites
-
Seuls certains types d'instance prennent en charge la file d'attente multiple de la carte réseau. Consultez la rubrique Familles de types d'instance. Si la valeur de la colonne Multi-queue est supérieure à 1, le type d'instance prend en charge cette fonctionnalité.
Pour les types d'instance pris en charge, la file d'attente multiple de la carte réseau est activée automatiquement lorsque vous attachez une ENI.
Le nombre de files d'attente indiqué pour un type d'instance correspond au nombre maximal de files d'attente par ENI pris en charge par ce type.
-
Appelez l'opération API DescribeInstanceTypes avec le paramètre InstanceTypeFamily pour interroger les métriques relatives aux files d'attente :
-
Nombre de files d'attente par défaut
PrimaryEniQueueNumber : nombre de files d'attente par défaut pour l'ENI principale. SecondaryEniQueueNumber : nombre de files d'attente par défaut pour une ENI secondaire.
-
Nombre maximal de files d'attente par ENI
MaximumQueueNumberPerEni : nombre maximal de files d'attente par ENI pour la famille de types d'instance.
-
Quota total de files d'attente
TotalEniQueueQuantity : quota total de files d'attente pour la famille de types d'instance.
-
Les images publiques dont la version du noyau est antérieure à 2,6 peuvent ne pas prendre en charge la file d'attente multiple de la carte réseau. Utilisez les dernières versions des images publiques.
Consulter le nombre de files d'attente de l'ENI
Utiliser la console
Accédez à la page Console ECS - Interfaces réseau élastiques.
Dans le coin supérieur gauche de la page, sélectionnez une région et un groupe de ressources.
Cliquez sur l'ID de l'ENI secondaire cible pour ouvrir sa page de détails.
-
Dans la section Informations de base, repérez le paramètre Queues. Cette valeur correspond au nombre actuel de files d'attente.
Si vous avez modifié le nombre de files d'attente, la valeur modifiée s'affiche.
-
Si vous n'avez pas modifié le nombre de files d'attente :
Si l'ENI n'est attachée à aucune instance, aucune valeur ne s'affiche.
Si l'ENI est attachée à une instance, le nombre de files d'attente par défaut pour le type d'instance s'affiche.
Utiliser l'API
Appelez l'opération DescribeNetworkInterfaceAttribute. Le paramètre de réponse QueueNumber indique le nombre de files d'attente.
Si vous avez modifié le nombre de files d'attente, la valeur modifiée s'affiche.
-
Si vous n'avez pas modifié le nombre de files d'attente :
Si l'ENI n'est attachée à aucune instance, aucune valeur ne s'affiche.
Si l'ENI est attachée à une instance, le nombre de files d'attente par défaut pour le type d'instance s'affiche.
Vérifier depuis l'instance
-
Connectez-vous à une instance Linux.
RemarquePour les instances Windows, consultez le nombre de files d'attente de l'ENI dans la console ECS ou en appelant une opération API.
-
Affichez la configuration réseau à l'aide de la commande
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 -
Vérifiez si l'ENI principale eth0 prend en charge la file d'attente multiple de la carte réseau.
Cet exemple utilise l'ENI principale. Pour vérifier une ENI secondaire, remplacez l'identifiant par eth1, eth2 ou une autre valeur.
ethtool -l eth0Analysez le résultat :
Si la valeur « Combined » sous « Pre-set maximums » est supérieure à 1, l'ENI prend en charge la file d'attente multiple de la carte réseau. Cette valeur représente le nombre maximal de files d'attente.
La valeur « Combined » sous « Current hardware settings » correspond au nombre actuel de files d'attente utilisées.
Dans cet exemple, l'ENI prend en charge un maximum de trois files combinées (RX+TX) et en utilise actuellement trois.
[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: 3Pour modifier le nombre maximal de files d'attente, consultez la section Modifier le nombre de files d'attente d'une ENI.
Pour modifier le nombre de files d'attente au niveau du système d'exploitation, consultez la section Modifier le nombre de files d'attente utilisé par le système d'exploitation.
Modifier le nombre de files d'attente de l'ENI
Lorsque vous attachez une ENI à une instance, son nombre de files d'attente correspond par défaut au paramètre défini pour le type d'instance. Vous pouvez l'ajuster via la console ou en appelant une opération API. Tenez compte des points suivants :
Vous ne pouvez modifier le nombre de files d'attente que lorsque l'état de l'ENI est Available ou Bound et que l'instance associée est Stopped.
Le nombre de files d'attente ne peut pas dépasser le nombre maximal de files d'attente par ENI pour le type d'instance.
Le nombre total de files d'attente de toutes les ENI d'une instance ne peut pas dépasser le quota total de files d'attente pour le type d'instance.
Utiliser la console
Accédez à la page Console ECS - Interfaces réseau élastiques.
Dans le coin supérieur gauche de la page, sélectionnez une région et un groupe de ressources.
Cliquez sur l'ID de l'ENI secondaire cible pour ouvrir sa page de détails.
-
Cliquez sur Modify Queue Count.
Cliquez sur l'icône de modification à côté du champ NIC Queue Number et saisissez le nombre de files d'attente souhaité dans la zone de saisie (plage valide : 1 à 2048).
Cliquez sur OK.
Utiliser l'API
Appelez l'opération ModifyNetworkInterfaceAttribute et définissez le paramètre QueueNumber pour modifier le nombre de files d'attente.
Le nouveau nombre de files d'attente prend effet au prochain démarrage de l'instance associée.
Modifier le nombre de files d'attente utilisé par le système d'exploitation
Lorsque vous modifiez le nombre de files d'attente de l'ENI, le système d'exploitation applique automatiquement le nouveau paramètre.
Vous pouvez également ajuster le nombre de files d'attente que l'ENI utilise activement. Cette valeur doit être inférieure ou égale au nombre de files d'attente configuré.
La modification du nombre de files d'attente utilisé par le système d'exploitation n'affecte pas le nombre de files d'attente configuré pour l'ENI et n'apparaît pas dans la console ni dans les réponses API.
Cette modification est temporaire et ne persiste pas après le redémarrage de l'instance.
L'exemple suivant ajuste le nombre de files d'attente sur une instance Alibaba Cloud Linux 3 avec la file d'attente multiple de la carte réseau activée.
-
Affichez la configuration réseau à l'aide de la commande
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 -
Vérifiez si l'ENI principale eth0 prend en charge la file d'attente multiple de la carte réseau.
Cet exemple utilise l'ENI principale. Pour vérifier une ENI secondaire, remplacez l'identifiant par eth1, eth2 ou une autre valeur.
ethtool -l eth0 -
Analysez le résultat :
Si la valeur « Combined » sous « Pre-set maximums » est supérieure à 1, l'ENI prend en charge la file d'attente multiple de la carte réseau. Cette valeur représente le nombre maximal de files d'attente.
La valeur « Combined » sous « Current hardware settings » correspond au nombre actuel de files d'attente utilisées.
Dans cet exemple, l'ENI prend en charge un maximum de trois files combinées (RX+TX) et trois sont actuellement utilisées.
[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 -
Définissez le nombre de files actives pour l'ENI principale eth0 sur 2.
Cet exemple utilise l'ENI principale. Pour ajuster une ENI secondaire, remplacez l'identifiant par eth1, eth2 ou une autre valeur.
sudo ethtool -L eth0 combined NNreprésente le nombre de files d'attente que vous souhaitez que l'ENI utilise.Ndoit être inférieur ou égal à la valeur « Combined » sous « Pre-set maximums ».Définissez le nombre de files d'attente de l'ENI principale sur 2 :
sudo ethtool -L eth0 combined 2
Configurer l'affinité IRQ
La file d'attente multiple de la carte réseau nécessite généralement une configuration de l'affinité IRQ pour attribuer les interruptions des différentes files à des cœurs CPU spécifiques, réduisant ainsi la contention et améliorant les performances.
L'affinité IRQ est activée par défaut sur toutes les images publiques, à l'exception de Red Hat Enterprise Linux.
Red Hat Enterprise Linux prend en charge l'affinité IRQ, mais ne l'active pas par défaut. Suivez les étapes ci-dessous pour la configurer.
Les étapes suivantes utilisent le script ecs_mq pour configurer l'affinité IRQ sur une image Red Hat Enterprise Linux 9.2. Les autres images ont l'affinité IRQ activée par défaut.
-
(Facultatif) Arrêtez le service irqbalance.
Le service irqbalance ajuste dynamiquement l'affinité IRQ, ce qui peut entrer en conflit avec le script
ecs_mq. Arrêtez-le d'abord.systemctl stop irqbalance.service -
Téléchargez la dernière version du script
ecs_mq:wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/ecs_mq/ecs_mq_latest.tgz -
Décompressez le package
ecs_mq:tar -xzf ecs_mq_latest.tgz -
Accédez au répertoire de travail :
cd ecs_mq/ -
Exécutez le script d'installation de
ecs_mq:bash install.sh redhat 9RemarqueRemplacez
redhatet9par le nom et le numéro de version majeure de votre système d'exploitation. -
Démarrez le service
ecs_mq:systemctl start ecs_mqLe service active automatiquement l'affinité IRQ.
Testez différentes combinaisons de nombre de files d'attente et d'affinité IRQ tout en surveillant le débit et la latence pour trouver l'équilibre optimal.