Optimiser les performances de NetScaler VPX sur VMware ESX, Linux KVM et les hyperviseurs Citrix
Les performances de NetScaler VPX varient considérablement en fonction de l’hyperviseur, des ressources système allouées et des configurations de l’hôte. Pour atteindre les performances souhaitées, suivez d’abord les recommandations de la fiche technique VPX, puis optimisez-les davantage en utilisant les meilleures pratiques fournies dans ce document.
Instance NetScaler VPX sur les hyperviseurs VMware ESX
Cette section contient des détails sur les options et paramètres configurables, ainsi que d’autres suggestions qui vous aident à atteindre des performances optimales de l’instance NetScaler VPX sur les hyperviseurs VMware ESX.
- Configuration recommandée sur les hôtes ESX
- NetScaler VPX avec interfaces réseau E1000
- NetScaler VPX avec interfaces réseau VMXNET3
- NetScaler VPX avec interfaces réseau SR-IOV et PCI passthrough
Configuration recommandée sur les hôtes ESX
Pour atteindre des performances élevées pour VPX avec les interfaces réseau E1000, VMXNET3, SR-IOV et PCI passthrough, suivez ces recommandations :
- Le nombre total de CPU virtuels (vCPU) provisionnés sur l’hôte ESX doit être inférieur ou égal au nombre total de CPU physiques (pCPU) sur l’hôte ESX.
-
L’affinité NUMA (Non-uniform Memory Access) et l’affinité CPU doivent être configurées pour l’hôte ESX afin d’obtenir de bons résultats.
– Pour trouver l’affinité NUMA d’une Vmnic, connectez-vous à l’hôte localement ou à distance, et tapez :
#vsish -e get /net/pNics/vmnic7/properties | grep NUMA Device NUMA Node: 0 <!--NeedCopy-->- Pour définir l’affinité NUMA et vCPU pour une VM, consultez la documentation VMware.
NetScaler VPX avec interfaces réseau E1000
Effectuez les réglages suivants sur l’hôte VMware ESX :
- Sur l’hôte VMware ESX, créez deux vNIC à partir d’un vSwitch pNIC. Plusieurs vNIC créent plusieurs threads Rx dans l’hôte ESX. Cela augmente le débit Rx de l’interface pNIC.
- Activez les VLAN au niveau du groupe de ports du vSwitch pour chaque vNIC que vous avez créé.
- Pour augmenter le débit de transmission (Tx) du vNIC, utilisez un thread Tx distinct dans l’hôte ESX par vNIC. Utilisez la commande ESX suivante :
-
Pour ESX version 5.5 :
esxcli system settings advanced set –o /Net/NetTxWorldlet –i <!--NeedCopy--> -
Pour ESX version 6.0 et ultérieures :
esxcli system settings advanced set -o /Net/NetVMTxType –i 1 <!--NeedCopy-->
-
-
Pour augmenter davantage le débit Tx du vNIC, utilisez un thread de complétion Tx et des threads Rx distincts par file d’attente de périphérique (NIC). Utilisez la commande ESX suivante :
esxcli system settings advanced set -o /Net/NetNetqRxQueueFeatPairEnable -i 0 <!--NeedCopy-->
Remarque :
Assurez-vous de redémarrer l’hôte VMware ESX pour appliquer les paramètres mis à jour.
Déploiement de deux vNIC par pNIC
Voici un exemple de topologie et de commandes de configuration pour le modèle de déploiement Deux vNIC par pNIC qui offre de meilleures performances réseau.

Exemple de configuration NetScaler VPX :
Pour réaliser le déploiement présenté dans la topologie d’exemple précédente, effectuez la configuration suivante sur l’instance NetScaler VPX :
-
Côté client, liez le SNIP (1.1.1.2) à l’interface réseau 1/1 et activez le mode de balisage VLAN.
bind vlan 2 -ifnum 1/1 –tagged bind vlan 2 -IPAddress 1.1.1.2 255.255.255.0 <!--NeedCopy--> -
Côté serveur, liez le SNIP (2.2.2.2) à l’interface réseau 1/1 et activez le mode de balisage VLAN.
bind vlan 3 -ifnum 1/2 –tagged bind vlan 3 -IPAddress 2.2.2.2 255.255.255.0 <!--NeedCopy--> -
Ajoutez un serveur virtuel HTTP (1.1.1.100) et liez-le à un service (2.2.2.100).
add lb vserver v1 HTTP 1.1.1.100 80 -persistenceType NONE -Listenpolicy None -cltTimeout 180 add service s1 2.2.2.100 HTTP 80 -gslb NONE -maxClient 0 -maxReq 0 -cip DISABLED -usip NO -useproxyport YES -sp ON -cltTimeout 180 -svrTimeout 360 -CKA NO -TCPB NO -CMP NO bind lb vserver v1 s1 <!--NeedCopy-->
Remarque :
Assurez-vous d’inclure les deux entrées suivantes dans la table de routage :
- Sous-réseau 1.1.1.0/24 avec une passerelle pointant vers le SNIP 1.1.1.2
- Sous-réseau 2.2.2.0/24 avec une passerelle pointant vers le SNIP 2.2.2.2
NetScaler VPX avec des interfaces réseau VMXNET3
Pour obtenir des performances élevées pour VPX avec des interfaces réseau VMXNET3, effectuez les réglages suivants sur l’hôte VMware ESX :
- Créez deux vNIC à partir d’un vSwitch pNIC. Plusieurs vNIC créent plusieurs threads Rx dans l’hôte ESX. Cela augmente le débit Rx de l’interface pNIC.
- Activez les VLAN au niveau du groupe de ports du vSwitch pour chaque vNIC que vous avez créée.
- Pour augmenter le débit de transmission (Tx) des vNIC, utilisez un thread Tx distinct dans l’hôte ESX par vNIC. Utilisez les commandes ESX suivantes :
- Pour ESX version 5.5 :
esxcli system settings advanced set –o /Net/NetTxWorldlet –i <!--NeedCopy-->- Pour ESX version 6.0 et versions ultérieures :
esxcli system settings advanced set -o /Net/NetVMTxType –i 1 <!--NeedCopy-->
Sur l’hôte VMware ESX, effectuez la configuration suivante :
- Sur l’hôte VMware ESX, créez deux vNIC à partir d’un vSwitch pNIC. Plusieurs vNIC créent plusieurs threads Tx et Rx dans l’hôte ESX. Cela augmente le débit Tx et Rx de l’interface pNIC.
- Activez les VLANs au niveau du groupe de ports du vSwitch pour chaque vNIC que vous avez créé.
-
Pour augmenter le débit Tx d’une vNIC, utilisez un thread de complétion Tx séparé et des threads Rx par file d’attente de périphérique (NIC). Utilisez la commande suivante :
esxcli system settings advanced set -o /Net/NetNetqRxQueueFeatPairEnable -i 0 <!--NeedCopy--> -
Configurez une VM pour utiliser un thread de transmission par vNIC, en ajoutant le paramètre suivant à la configuration de la VM :
ethernetX.ctxPerDev = "1" <!--NeedCopy--> -
Configurez une VM pour utiliser jusqu’à 8 threads de transmission par vNIC, en ajoutant le paramètre suivant à la configuration de la VM :
ethernetX.ctxPerDev = "3" <!--NeedCopy-->Remarque :
L’augmentation des threads de transmission par vNIC nécessite davantage de ressources CPU (jusqu’à 8) sur l’hôte ESX. Assurez-vous que des ressources CPU suffisantes sont disponibles avant d’appliquer les paramètres précédents.
Remarque :
Assurez-vous de redémarrer l’hôte VMware ESX pour appliquer les paramètres mis à jour.
Vous pouvez configurer VMXNET3 comme un déploiement Deux vNICs par pNIC. Pour plus d’informations, consultez Déploiement de deux vNICs par pNIC.
Configurer la prise en charge multi-file d’attente et RSS sur VMware ESX pour les périphériques VMXNET3
Par défaut, le périphérique VMXNET3 ne prend en charge que 8 files d’attente Rx et Tx. Lorsque le nombre de vCPU sur le VPX dépasse 8, le nombre de files d’attente Rx et Tx configurées pour une interface VMXNET3 passe à 1 par défaut. Vous pouvez configurer jusqu’à 19 files d’attente Rx et Tx pour les périphériques VMXNET3 en modifiant certaines configurations sur ESX. Cette option augmente les performances et la distribution uniforme des paquets entre les vCPU de l’instance VPX.
Remarque :
À partir de la version 13.1 build 48.x de NetScaler, le NetScaler VPX prend en charge jusqu’à 19 files d’attente Rx et Tx sur ESX pour les périphériques VMXNET3.
Prérequis :
Pour configurer jusqu’à 19 files d’attente Rx et Tx sur ESX pour les périphériques VMXNET3, assurez-vous que les prérequis suivants sont remplis :
- La version de NetScaler VPX est 13.1 build 48.X et ultérieure.
- NetScaler VPX est configuré avec une machine virtuelle de version matérielle 17 et ultérieure, prise en charge par VMware ESX 7.0 et ultérieur.
Configurer les interfaces VMXNET3 pour prendre en charge plus de 8 files d’attente Rx et Tx :
- Ouvrez le fichier de configuration de la machine virtuelle (.vmx).
-
Spécifiez le nombre de files d’attente Rx et TX en configurant les valeurs
ethernetX.maxTxQueuesetethernetX.maxRxQueues(où X est le numéro des cartes réseau virtuelles à configurer). Le nombre maximal de files d’attente configurées ne doit pas être supérieur au nombre de vCPU de la machine virtuelle.Remarque :
L’augmentation du nombre de files d’attente augmente également la charge du processeur sur l’hôte ESX. Par conséquent, assurez-vous que des ressources CPU suffisantes sont disponibles sur l’hôte ESX avant d’augmenter les files d’attente. Vous pouvez augmenter le nombre maximal de files d’attente prises en charge dans les scénarios où le nombre de files d’attente est identifié comme un goulot d’étranglement pour les performances. Dans ces situations, nous recommandons d’augmenter le nombre de files d’attente progressivement. Par exemple, de 8 à 12, puis à 16, puis à 20, et ainsi de suite. Évaluez les performances à chaque réglage, plutôt que d’augmenter directement jusqu’à la limite maximale.
NetScaler VPX avec interfaces réseau SR-IOV et PCI passthrough
Pour obtenir des performances élevées pour VPX avec les interfaces réseau SR-IOV et PCI passthrough, consultez Configuration recommandée sur les hôtes ESX.
Instance NetScaler VPX sur la plateforme Linux-KVM
Cette section contient des détails sur les options et paramètres configurables, ainsi que d’autres suggestions qui vous aident à atteindre des performances optimales de l’instance NetScaler VPX sur la plateforme Linux-KVM.
- Paramètres de performance pour KVM
- NetScaler VPX avec interfaces réseau PV
- NetScaler VPX avec interfaces réseau SR-IOV et Fortville PCIe passthrough
Paramètres de performance pour KVM
Effectuez les réglages suivants sur l’hôte KVM :
Trouvez le domaine NUMA de la carte réseau à l’aide de la commande lstopo :
Assurez-vous que la mémoire du VPX et du CPU est épinglée au même emplacement. Dans la sortie suivante, la carte réseau 10G « ens2 » est liée au domaine NUMA #1.

Allouez la mémoire VPX à partir du domaine NUMA.
La commande numactl indique le domaine NUMA à partir duquel la mémoire est allouée. Dans la sortie suivante, environ 10 Go de RAM sont alloués à partir du nœud NUMA #0.

Pour modifier le mappage du nœud NUMA, suivez les étapes suivantes.
-
Modifiez le fichier .xml du VPX sur l’hôte.
/etc/libvirt/qemu/<VPX_name>.xml <!--NeedCopy--> -
Ajoutez la balise suivante :
<numatune> <memory mode="strict" nodeset="1"/> This is the NUMA domain name </numatune> <!--NeedCopy--> -
Arrêtez le VPX.
-
Exécutez la commande suivante :
virsh define /etc/libvirt/qemu/<VPX_name>.xml <!--NeedCopy-->Cette commande met à jour les informations de configuration de la VM avec les mappages de nœuds NUMA.
-
Mettez le VPX sous tension. Vérifiez ensuite la sortie de la commande
numactl –hardwaresur l’hôte pour voir les allocations de mémoire mises à jour pour le VPX.
Épingler les vCPU du VPX aux cœurs physiques.
-
Pour afficher les mappages vCPU vers pCPU d’un VPX, tapez la commande suivante
virsh vcpupin <VPX name> <!--NeedCopy-->
Les vCPU 0 à 4 sont mappés aux cœurs physiques 8 à 11.
-
Pour afficher l’utilisation actuelle du pCPU, tapez la commande suivante :
mpstat -P ALL 5 <!--NeedCopy-->
Dans cette sortie, 8 est le CPU de gestion, et 9 à 11 sont des moteurs de paquets.
-
Pour modifier l’épinglage vCPU vers pCPU, il existe deux options.
-
Modifiez-le à l’exécution après le démarrage du VPX à l’aide de la commande suivante :
virsh vcpupin <VPX name> <vCPU id> <pCPU number> virsh vcpupin NetScaler-VPX-XML 0 8 virsh vcpupin NetScaler-VPX-XML 1 9 virsh vcpupin NetScaler-VPX-XML 2 10 virsh vcpupin NetScaler-VPX-XML 3 11 <!--NeedCopy--> -
Pour apporter des modifications statiques au VPX, modifiez le fichier
.xmlcomme précédemment avec les balises suivantes :-
Modifiez le fichier .xml du VPX sur l’hôte
/etc/libvirt/qemu/<VPX_name>.xml <!--NeedCopy--> -
Ajoutez la balise suivante :
<vcpu placement='static' cpuset='8-11'>4</vcpu> <cputune> <vcpupin vcpu='0' cpuset='8'/> <vcpupin vcpu='1' cpuset='9'/> <vcpupin vcpu='2' cpuset='10'/> <vcpupin vcpu='3' cpuset='11'/> </cputune> <!--NeedCopy--> -
Arrêtez le VPX.
-
Mettez à jour les informations de configuration de la VM avec les mappages de nœuds NUMA à l’aide de la commande suivante :
virsh define /etc/libvirt/qemu/ <VPX_name>.xml <!--NeedCopy--> -
Démarrez le VPX. Vérifiez ensuite la sortie de la commande
virsh vcpupin <VPX name>sur l’hôte pour voir l’épinglage CPU mis à jour.
-
-
Éliminer la surcharge d’interruption de l’hôte.
-
Détecter les VM_EXITS à l’aide de la commande
kvm_stat.Au niveau de l’hyperviseur, les interruptions de l’hôte sont mappées aux mêmes pCPU sur lesquels les vCPU du VPX sont épinglés. Cela peut entraîner l’expulsion périodique des vCPU sur le VPX.
Pour trouver les sorties de VM effectuées par les VM exécutant l’hôte, utilisez la commande
kvm_stat.[root@localhost ~]# kvm_stat -1 | grep EXTERNAL kvm_exit(EXTERNAL_INTERRUPT) 1728349 27738 [root@localhost ~]# <!--NeedCopy-->Une valeur plus élevée de l’ordre de 1+M indique un problème.
Si une seule VM est présente, la valeur attendue est de 30 à 100 K. Tout ce qui dépasse cette valeur peut indiquer qu’il existe un ou plusieurs vecteurs d’interruption d’hôte mappés au même pCPU.
-
Détecter les interruptions de l’hôte et migrer les interruptions de l’hôte.
Lorsque vous exécutez la commande
concatenatepour le fichier « /proc/interrupts », elle affiche tous les mappages d’interruption de l’hôte. Si une ou plusieurs IRQ actives sont mappées au même pCPU, son compteur correspondant s’incrémente.Déplacez toutes les interruptions qui chevauchent les pCPU de votre NetScaler VPX vers des pCPU inutilisés :
echo 0000000f > /proc/irq/55/smp_affinity 0000000f - - > it is a bitmap, LSBs indicates that IRQ 55 can only be scheduled on pCPUs 0 – 3 <!--NeedCopy--> -
Désactiver l’équilibrage IRQ.
Désactivez le démon d’équilibrage IRQ, afin qu’aucune replanification ne se produise à la volée.
service irqbalance stop service irqbalance show - To check the status service irqbalance start - Enable if needed <!--NeedCopy-->Assurez-vous d’exécuter la commande
kvm_statpour vous assurer qu’il n’y a pas beaucoup de compteurs.
NetScaler VPX avec interfaces réseau PV
Vous pouvez configurer des interfaces réseau de para-virtualisation (PV), SR-IOV et de passthrough PCIe en tant que déploiement Deux vNIC par pNIC. Pour plus d’informations, consultez Déploiement de deux vNIC par pNIC.
Pour des performances optimales des interfaces PV (virtio), suivez ces étapes :
- Identifier le domaine NUMA auquel l’emplacement PCIe/NIC est lié.
- La mémoire et le vCPU du VPX doivent être épinglés au même domaine NUMA.
- Le thread Vhost doit être lié aux CPU du même domaine NUMA.
Lier les threads de l’hôte virtuel aux CPU correspondants :
-
Une fois le trafic démarré, exécutez la commande
topsur l’hôte.
- Identifier l’affinité du processus hôte virtuel (nommé
vhost-<pid-of-qemu>). -
Liez les processus vHost aux cœurs physiques du domaine NUMA identifié précédemment à l’aide de la commande suivante :
taskset –pc <core-id> <process-id> <!--NeedCopy-->Exemple :
taskset –pc 12 29838 <!--NeedCopy--> -
Les cœurs de processeur correspondant au domaine NUMA peuvent être identifiés à l’aide de la commande suivante :
[root@localhost ~]# virsh capabilities | grep cpu <cpu> </cpu> <cpus num='8'> <cpu id='0' socket_id='0' core_id='0' siblings='0'/> <cpu id='1' socket_id='0' core_id='1' siblings='1'/> <cpu id='2' socket_id='0' core_id='2' siblings='2'/> <cpu id='3' socket_id='0' core_id='3' siblings='3'/> <cpu id='4' socket_id='0' core_id='4' siblings='4'/> <cpu id='5' socket_id='0' core_id='5' siblings='5'/> <cpu id='6' socket_id='0' core_id='6' siblings='6'/> <cpu id='7' socket_id='0' core_id='7' siblings='7'/> </cpus> <cpus num='8'> <cpu id='8' socket_id='1' core_id='0' siblings='8'/> <cpu id='9' socket_id='1' core_id='1' siblings='9'/> <cpu id='10' socket_id='1' core_id='2' siblings='10'/> <cpu id='11' socket_id='1' core_id='3' siblings='11'/> <cpu id='12' socket_id='1' core_id='4' siblings='12'/> <cpu id='13' socket_id='1' core_id='5' siblings='13'/> <cpu id='14' socket_id='1' core_id='6' siblings='14'/> <cpu id='15' socket_id='1' core_id='7' siblings='15'/> </cpus> <cpuselection/> <cpuselection/> <!--NeedCopy-->
Lier le processus QEMU au cœur physique correspondant :
- Identifiez les cœurs physiques sur lesquels le processus QEMU s’exécute. Pour plus d’informations, consultez la sortie précédente.
-
Liez le processus QEMU aux mêmes cœurs physiques auxquels vous liez les vCPU, à l’aide de la commande suivante :
taskset –pc 8-11 29824 <!--NeedCopy-->
NetScaler VPX avec SR-IOV et interfaces réseau passthrough PCIe Fortville
Pour des performances optimales des interfaces réseau passthrough PCIe SR-IOV et Fortville, suivez ces étapes :
- Identifier le domaine NUMA auquel le slot PCIe/NIC est lié.
- La mémoire et le vCPU du VPX doivent être épinglés au même domaine NUMA.
Exemple de fichier XML VPX pour l’épinglage du vCPU et de la mémoire pour Linux KVM :
<domain type='kvm'>
<name>NetScaler-VPX</name>
<uuid>138f7782-1cd3-484b-8b6d-7604f35b14f4</uuid>
<memory unit='KiB'>8097152</memory>
<currentMemory unit='KiB'>8097152</currentMemory>
<vcpu placement='static'>4</vcpu>
<cputune>
<vcpupin vcpu='0' cpuset='8'/>
<vcpupin vcpu='1' cpuset='9'/>
<vcpupin vcpu='2' cpuset='10'/>
<vcpupin vcpu='3' cpuset='11'/>
</cputune>
<numatune>
<memory mode='strict' nodeset='1'/>
</numatune>
</domain>
<!--NeedCopy-->
Instance NetScaler VPX sur les hyperviseurs Citrix
Cette section contient des détails sur les options et paramètres configurables, ainsi que d’autres suggestions qui vous aident à atteindre des performances optimales de l’instance NetScaler VPX sur les hyperviseurs Citrix.
- Paramètres de performance pour les hyperviseurs Citrix
- NetScaler VPX avec interfaces réseau SR-IOV
- NetScaler VPX avec interfaces para-virtualisées
Paramètres de performance pour les hyperviseurs Citrix
Rechercher le domaine NUMA de la carte réseau à l’aide de la commande « xl » :
xl info -n
<!--NeedCopy-->
Épingler les vCPU du VPX aux cœurs physiques.
xl vcpu-pin <Netsclaer VM Name> <vCPU id> <physical CPU id>
<!--NeedCopy-->
Vérifier la liaison des vCPU.
xl vcpu-list
<!--NeedCopy-->
Allouer plus de 8 vCPU aux machines virtuelles NetScaler.
Pour configurer plus de 8 vCPU, exécutez les commandes suivantes depuis la console Citrix Hypervisor™ :
xe vm-param-set uuid=your_vms_uuid VCPUs-max=16
xe vm-param-set uuid=your_vms_uuid VCPUs-at-startup=16
<!--NeedCopy-->
NetScaler VPX avec interfaces réseau SR-IOV
Pour des performances optimales des interfaces réseau SR-IOV, suivez ces étapes :
- Identifiez le domaine NUMA auquel l’emplacement PCIe ou la carte réseau est lié.
- Épinglez la mémoire et le vCPU du VPX au même domaine NUMA.
- Lie le vCPU du Domaine-0 au CPU restant.
NetScaler VPX avec interfaces paravirtualisées
Pour des performances optimales, des configurations de deux vNIC par pNIC et d’une vNIC par pNIC sont conseillées, comme dans d’autres environnements PV.
Pour obtenir des performances optimales des interfaces paravirtualisées (netfront), suivez ces étapes :
- Identifiez le domaine NUMA auquel l’emplacement PCIe ou la carte réseau est lié.
- Épinglez la mémoire et le vCPU du VPX au même domaine NUMA.
- Lie le vCPU du Domaine-0 au CPU restant du même domaine NUMA.
- Épinglez les threads Rx/Tx de l’hôte de la vNIC aux vCPU du Domaine-0.
Épingler les threads de l’hôte aux vCPU du Domaine-0 :
- Trouvez l’ID Xen du VPX en utilisant la commande
xl listsur le shell de l’hôte Citrix Hypervisor. -
Identifiez les threads de l’hôte en utilisant la commande suivante :
ps -ax | grep vif <Xen-ID> <!--NeedCopy-->Dans l’exemple suivant, ces valeurs indiquent :
- vif5.0 - Les threads pour la première interface allouée à VPX dans XenCenter (interface de gestion).
- vif5.1 - Les threads pour la deuxième interface attribuée à VPX et ainsi de suite.

-
Épinglez les threads aux vCPU de Domain-0 à l’aide de la commande suivante :
taskset –pc <core-id> <process-id> <!--NeedCopy-->Exemple :
taskset -pc 1 29189 <!--NeedCopy-->