14.4. Réduction des files d'attente NIC à l'aide de l'opérateur Node Tuning
L'opérateur de réglage des nœuds vous permet d'ajuster le nombre de files d'attente du contrôleur d'interface réseau (NIC) pour chaque périphérique réseau en configurant le profil de performance. Les files d'attente des périphériques réseau permettent de répartir les paquets entre différentes files d'attente physiques et chaque file d'attente dispose d'un fil d'exécution distinct pour le traitement des paquets.
Dans les systèmes en temps réel ou à faible latence, toutes les lignes de demande d'interruption (IRQ) inutiles reliées aux unités centrales isolées doivent être déplacées vers des unités centrales réservées ou de maintien.
Dans les déploiements avec des applications qui nécessitent un système, une mise en réseau OpenShift Container Platform ou dans les déploiements mixtes avec des charges de travail Data Plane Development Kit (DPDK), plusieurs files d'attente sont nécessaires pour obtenir un bon débit et le nombre de files d'attente NIC devrait être ajusté ou rester inchangé. Par exemple, pour obtenir une faible latence, le nombre de files d'attente NIC pour les charges de travail basées sur le DPDK doit être réduit au nombre de CPU réservés ou de maintenance.
Trop de files d'attente sont créées par défaut pour chaque unité centrale et elles ne s'intègrent pas dans les tables d'interruption des unités centrales de gestion lorsque l'on cherche à réduire la latence. La réduction du nombre de files d'attente permet un réglage correct. Un plus petit nombre de files d'attente signifie un plus petit nombre d'interruptions qui s'intègrent alors dans la table IRQ.
Dans les versions antérieures d'OpenShift Container Platform, l'opérateur Performance Addon permettait de régler automatiquement les performances des applications à faible latence. Dans OpenShift Container Platform 4.11 et les versions ultérieures, cette fonctionnalité fait partie de l'opérateur Node Tuning.
14.4.1. Ajuster les files d'attente NIC avec le profil de performance Copier lienLien copié sur presse-papiers!
Le profil de performance vous permet d'ajuster le nombre de files d'attente pour chaque périphérique réseau.
Périphériques réseau pris en charge :
- Dispositifs de réseau non virtuels
- Dispositifs de réseau prenant en charge plusieurs files d'attente (canaux)
Périphériques réseau non pris en charge :
- Interfaces réseau purement logicielles
- Dispositifs de blocage
- Fonctions virtuelles Intel DPDK
Conditions préalables
-
Accès au cluster en tant qu'utilisateur ayant le rôle
cluster-admin. -
Installez le CLI OpenShift (
oc).
Procédure
-
Connectez-vous au cluster OpenShift Container Platform exécutant Node Tuning Operator en tant qu'utilisateur disposant des privilèges
cluster-admin. - Créez et appliquez un profil de performance adapté à votre matériel et à votre topologie. Pour obtenir des conseils sur la création d'un profil, reportez-vous à la section "Création d'un profil de performances".
Modifier le profil de performance créé :
oc edit -f <votre_nom_de_profil>.yamlRemplir le champ
specavec l'objetnet. La liste d'objets peut contenir deux champs :-
userLevelNetworkingest un champ obligatoire spécifié sous la forme d'un indicateur booléen. SiuserLevelNetworkingesttrue, le nombre de files d'attente correspond au nombre d'unités centrales réservées pour tous les périphériques pris en charge. La valeur par défaut estfalse. devicesest un champ facultatif spécifiant une liste de périphériques dont les files d'attente seront réglées sur le nombre de CPU réservé. Si la liste des périphériques est vide, la configuration s'applique à tous les périphériques du réseau. La configuration est la suivante :interfaceName: Ce champ indique le nom de l'interface et prend en charge les caractères génériques de type shell, qui peuvent être positifs ou négatifs.-
Les exemples de syntaxe des caractères génériques sont les suivants :
<string> .* -
Les règles négatives sont précédées d'un point d'exclamation. Pour appliquer les modifications apportées à la file d'attente du réseau à tous les périphériques autres que ceux de la liste d'exclusion, utilisez
!<device>, par exemple,!eno1.
-
Les exemples de syntaxe des caractères génériques sont les suivants :
-
vendorID: L'ID du fournisseur de l'appareil réseau représenté par un nombre hexadécimal de 16 bits avec un préfixe0x. deviceID: L'ID de l'appareil réseau (modèle) représenté par un nombre hexadécimal de 16 bits avec un préfixe0x.NoteLorsqu'un
deviceIDest spécifié, levendorIDdoit également être défini. Un dispositif qui correspond à tous les identificateurs de dispositif spécifiés dans une entrée de dispositifinterfaceName,vendorID, ou une paire devendorIDplusdeviceIDest qualifié de dispositif de réseau. Le nombre de files d'attente nettes de ce périphérique réseau est alors fixé au nombre d'unités centrales réservées.Lorsque deux dispositifs ou plus sont spécifiés, le nombre de files d'attente nettes est fixé à tout dispositif net correspondant à l'un d'entre eux.
-
Définissez le nombre de files d'attente sur le nombre de CPU réservées pour tous les périphériques en utilisant cet exemple de profil de performance :
apiVersion: performance.openshift.io/v2 kind: PerformanceProfile metadata: name: manual spec: cpu: isolated: 3-51,54-103 reserved: 0-2,52-54 net: userLevelNetworking: true nodeSelector: node-role.kubernetes.io/worker-cnf: ""Définissez le nombre de files d'attente sur le nombre d'unités centrales réservées pour tous les périphériques correspondant à l'un des identifiants de périphérique définis en utilisant cet exemple de profil de performance :
apiVersion: performance.openshift.io/v2 kind: PerformanceProfile metadata: name: manual spec: cpu: isolated: 3-51,54-103 reserved: 0-2,52-54 net: userLevelNetworking: true devices: - interfaceName: “eth0” - interfaceName: “eth1” - vendorID: “0x1af4” - deviceID: “0x1000” nodeSelector: node-role.kubernetes.io/worker-cnf: ""Définissez le nombre de files d'attente sur le nombre de CPU réservées pour tous les périphériques commençant par le nom d'interface
ethen utilisant cet exemple de profil de performance :apiVersion: performance.openshift.io/v2 kind: PerformanceProfile metadata: name: manual spec: cpu: isolated: 3-51,54-103 reserved: 0-2,52-54 net: userLevelNetworking: true devices: - interfaceName: “eth*” nodeSelector: node-role.kubernetes.io/worker-cnf: ""Définissez le nombre de files d'attente sur le nombre d'unités centrales réservées pour tous les périphériques dont l'interface porte un nom autre que
eno1à l'aide de cet exemple de profil de performances :apiVersion: performance.openshift.io/v2 kind: PerformanceProfile metadata: name: manual spec: cpu: isolated: 3-51,54-103 reserved: 0-2,52-54 net: userLevelNetworking: true devices: - interfaceName: “!eno1” nodeSelector: node-role.kubernetes.io/worker-cnf: ""Définissez le nombre de files d'attente sur le nombre de CPU réservées pour tous les périphériques ayant un nom d'interface
eth0,vendorIDde0x1af4, etdeviceIDde0x1000en utilisant cet exemple de profil de performance :apiVersion: performance.openshift.io/v2 kind: PerformanceProfile metadata: name: manual spec: cpu: isolated: 3-51,54-103 reserved: 0-2,52-54 net: userLevelNetworking: true devices: - interfaceName: “eth0” - vendorID: “0x1af4” - deviceID: “0x1000” nodeSelector: node-role.kubernetes.io/worker-cnf: ""Appliquer le profil de performance mis à jour :
oc apply -f <votre_nom_de_profil>.yaml
14.4.2. Vérification de l'état de la file d'attente Copier lienLien copié sur presse-papiers!
Dans cette section, un certain nombre d'exemples illustrent différents profils de performance et la manière de vérifier que les changements sont appliqués.
Exemple 1
Dans cet exemple, le nombre de files d'attente nettes est défini sur le nombre de CPU réservé (2) pour les périphériques pris en charge par all.
La section correspondante du profil de performance est la suivante :
apiVersion: performance.openshift.io/v2
metadata:
name: performance
spec:
kind: PerformanceProfile
spec:
cpu:
reserved: 0-1 #total = 2
isolated: 2-8
net:
userLevelNetworking: true
# ...
Affichez l'état des files d'attente associées à un périphérique à l'aide de la commande suivante :
NoteExécutez cette commande sur le nœud où le profil de performance a été appliqué.
$ ethtool -l <device>Vérifier l'état de la file d'attente avant l'application du profil :
$ ethtool -l ens4Exemple de sortie
Channel parameters for ens4: Pre-set maximums: RX: 0 TX: 0 Other: 0 Combined: 4 Current hardware settings: RX: 0 TX: 0 Other: 0 Combined: 4Vérifiez l'état de la file d'attente après l'application du profil :
$ ethtool -l ens4Exemple de sortie
Channel parameters for ens4: Pre-set maximums: RX: 0 TX: 0 Other: 0 Combined: 4 Current hardware settings: RX: 0 TX: 0 Other: 0 Combined: 21
- 1
- Le canal combiné montre que le nombre total de CPU réservés pour les périphériques pris en charge par all est de 2. Cela correspond à ce qui est configuré dans le profil de performance.
Exemple 2
Dans cet exemple, le nombre de files d'attente nettes est défini sur le nombre de CPU réservé (2) pour les périphériques réseau pris en charge par all avec une adresse spécifique vendorID.
La section correspondante du profil de performance est la suivante :
apiVersion: performance.openshift.io/v2
metadata:
name: performance
spec:
kind: PerformanceProfile
spec:
cpu:
reserved: 0-1 #total = 2
isolated: 2-8
net:
userLevelNetworking: true
devices:
- vendorID = 0x1af4
# ...
Affichez l'état des files d'attente associées à un périphérique à l'aide de la commande suivante :
NoteExécutez cette commande sur le nœud où le profil de performance a été appliqué.
$ ethtool -l <device>Vérifiez l'état de la file d'attente après l'application du profil :
$ ethtool -l ens4Exemple de sortie
Channel parameters for ens4: Pre-set maximums: RX: 0 TX: 0 Other: 0 Combined: 4 Current hardware settings: RX: 0 TX: 0 Other: 0 Combined: 21
- 1
- Le nombre total d'unités centrales réservées pour tous les périphériques pris en charge avec
vendorID=0x1af4est de 2. Par exemple, s'il y a un autre périphérique réseauens2avecvendorID=0x1af4, il aura également un total de files d'attente nettes de 2. Cela correspond à ce qui est configuré dans le profil de performance.
Exemple 3
Dans cet exemple, le nombre de files d'attente nettes est défini sur le nombre d'unités centrales réservées (2) pour les périphériques réseau pris en charge par all qui correspondent à l'un des identifiants de périphérique définis.
La commande udevadm info permet d'obtenir un rapport détaillé sur un appareil. Dans cet exemple, les appareils sont les suivants
# udevadm info -p /sys/class/net/ens4
...
E: ID_MODEL_ID=0x1000
E: ID_VENDOR_ID=0x1af4
E: INTERFACE=ens4
...
# udevadm info -p /sys/class/net/eth0
...
E: ID_MODEL_ID=0x1002
E: ID_VENDOR_ID=0x1001
E: INTERFACE=eth0
...
Définissez les files d'attente nettes à 2 pour un appareil dont la valeur
interfaceNameest égale àeth0et pour tous les appareils dont la valeurvendorID=0x1af4présente le profil de performance suivant :apiVersion: performance.openshift.io/v2 metadata: name: performance spec: kind: PerformanceProfile spec: cpu: reserved: 0-1 #total = 2 isolated: 2-8 net: userLevelNetworking: true devices: - interfaceName = eth0 - vendorID = 0x1af4 ...Vérifiez l'état de la file d'attente après l'application du profil :
$ ethtool -l ens4Exemple de sortie
Channel parameters for ens4: Pre-set maximums: RX: 0 TX: 0 Other: 0 Combined: 4 Current hardware settings: RX: 0 TX: 0 Other: 0 Combined: 21 - 1
- Le nombre total d'unités centrales réservées pour tous les périphériques pris en charge avec
vendorID=0x1af4est fixé à 2. Par exemple, s'il existe un autre périphérique réseauens2avecvendorID=0x1af4, le nombre total de files d'attente nettes sera également fixé à 2. De même, un périphérique avecinterfaceNameégal àeth0aura le nombre total de files d'attente nettes fixé à 2.
14.4.3. Journalisation associée à l'ajustement des files d'attente NIC Copier lienLien copié sur presse-papiers!
Les messages de logs détaillant les appareils assignés sont enregistrés dans les logs respectifs du démon Tuned. Les messages suivants peuvent être enregistrés dans le fichier /var/log/tuned/tuned.log:
Un message
INFOest enregistré, détaillant les dispositifs attribués avec succès :INFO tuned.plugins.base: instance net_test (net): assigning devices ens1, ens2, ens3Un message
WARNINGest enregistré si aucun des dispositifs ne peut être attribué :WARNING tuned.plugins.base: instance net_test: no matching devices available