Citrix ADC

Optimisation des performances Citrix ADC VPX sur VMware ESX, Linux KVM et Citrix Hypervisors

Les performances de Citrix ADC 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-la davantage en utilisant les meilleures pratiques fournies dans ce document.

Instance Citrix ADC 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 à optimiser les performances de l’instance Citrix ADC VPX sur les hyperviseurs VMware ESX.

Configuration recommandée sur les hôtes ESX

Pour obtenir 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 processeurs virtuels (vCPU) provisionnés sur l’hôte ESX doit être inférieur ou égal au nombre total de processeurs physiques (PCPU) sur l’hôte ESX.
  • L’affinité NUMA (Non-Uniform Memory Access) et l’affinité CPU doivent être définies pour l’hôte ESX pour 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 machine virtuelle, consultez la documentation VMware.

Citrix ADC VPX avec interfaces réseau E1000

Effectuez les paramètres suivants sur l’hôte VMware ESX :

  • Sur l’hôte VMware ESX, créez deux cartes réseau virtuelles à partir d’un commutateur 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 vSwitch pour chaque carte réseau virtuelle que vous avez créée.
  • Pour augmenter le débit de transmission vNIC (Tx), 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érieure :

       esxcli system settings advanced set -o /Net/NetVMTxType –i 1
       <!--NeedCopy-->
      
  • Pour augmenter encore le débit de la carte réseau vNIC Tx, utilisez un thread d’achèvement Tx et une file d’attente de threads Rx par périphérique (NIC) distincts. 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.

Deux cartes réseau virtuelles par déploiement de PNIC

Voici un exemple de commande de topologie et de configuration pour le modèle de déploiement de deux cartes réseau virtuelles par pNIC qui offre de meilleures performances réseau.

Deux cartes réseau virtuelles par déploiement de PNIC

Exemple de configuration Citrix ADC VPX :

Pour réaliser le déploiement indiqué dans l’exemple de topologie précédent, effectuez la configuration suivante sur l’instance Citrix ADC VPX :

  • Côté client, liez le SNIP (1.1.1.2) à l’interface réseau 1/1 et activez le mode de balise 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 balise 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 passerelle pointant vers SNIP 1.1.1.2
  • Sous-réseau 2.2.2.0/24 avec passerelle pointant vers SNIP 2.2.2.2

Citrix ADC VPX avec interfaces réseau VMXNET3

Pour obtenir des performances élevées pour VPX avec les interfaces réseau VMXNET3, effectuez les paramètres suivants sur l’hôte VMware ESX :

  • Créez deux vNIC à partir d’un commutateur virtuel 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 vSwitch pour chaque carte réseau virtuelle que vous avez créée.
  • Pour augmenter le débit de transmission vNIC (Tx), 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 ultérieure :
      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 cartes réseau virtuelles à 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 VLAN au niveau du groupe de ports vSwitch pour chaque carte réseau virtuelle que vous avez créée.
  • Pour augmenter le débit Tx d’une vNIC, utilisez un thread d’achèvement Tx et une file d’attente de threads Rx par périphérique (NIC) distincts. Utilisez la commande suivante :

     esxcli system settings advanced set -o /Net/NetNetqRxQueueFeatPairEnable -i 0
     <!--NeedCopy-->
    
  • Configurez une machine virtuelle pour qu’elle utilise un thread de transmission par vNIC, en ajoutant le paramètre suivant à la configuration de la machine virtuelle :

     ethernetX.ctxPerDev = "1"
     <!--NeedCopy-->
    

Pour plus d’informations, consultez la section Meilleures pratiques pour le réglage des performances des charges de travail Telco et NFV dans vSphere

Remarque :

Assurez-vous de redémarrer l’hôte VMware ESX pour appliquer les paramètres mis à jour.

Vous pouvez configurer VMXNET3 en tant que deux cartes réseau virtuelles par déploiement PNIC . Pour plus d’informations, consultez la section Deux cartes réseau virtuelles par déploiement de pNIC.

Citrix ADC VPX avec interfaces réseau SR-IOV et PCI passthrough

Pour obtenir des performances élevées pour VPX avec des interfaces réseau SR-IOV et PCI passthrough, reportez-vous à la section Configuration recommandée sur les hôtes ESX.

Instance Citrix ADC VPX sur plate-forme Linux-KVM

Cette section contient des détails sur les options et paramètres configurables, ainsi que d’autres suggestions qui vous aident à obtenir des performances optimales de l’instance Citrix ADC VPX sur la plate-forme Linux-KVM.

Paramètres de performance pour KVM

Effectuez les paramètres suivants sur l’hôte KVM :

Recherchez le domaine NUMA de la carte réseau à l’aide de la lstopo commande :

Assurez-vous que la mémoire du VPX et du processeur est épinglée au même emplacement. Dans la sortie suivante, la carte réseau 10G « ens2” est liée au domaine NUMA #1.

domaine NUMA #1

Allouez la mémoire VPX du domaine NUMA.

La numactl commande 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.

Noeud NUMA #0

Pour modifier le mappage des nœuds NUMA, procédez comme suit.

  1. Modifiez le .xml du VPX sur l’hôte.

    /etc/libvirt/qemu/<VPX_name>.xml
    <!--NeedCopy-->
    
  2. Ajoutez la balise suivante :

    <numatune>
    <memory mode="strict" nodeset="1"/>    This is the NUMA domain name
    </numatune>
    <!--NeedCopy-->
    
  3. Arrêtez le VPX.

  4. Exécutez la commande suivante :

    virsh define /etc/libvirt/qemu/<VPX_name>.xml
    <!--NeedCopy-->
    

    Cette commande met à jour les informations de configuration de la machine virtuelle avec les mappages de nœuds NUMA.

  5. Mettez le VPX sous tension. Vérifiez ensuite la sortie de la numactl –hardware commande sur l’hôte pour voir les allocations de mémoire mises à jour pour le VPX.

    Sortie de la commande matérielle numactl

Épinglez les vCPU de VPX aux cœurs physiques.

  • Pour afficher les mappages vCPU vers PCPU d’un VPX, tapez la commande suivante

     virsh vcpupin <VPX name>
     <!--NeedCopy-->
    

    Sortie de la commande virsh-vcpupin

    Les vCPU 0—4 sont mappés sur les cœurs physiques 8 à 11.

  • Pour afficher l’utilisation actuelle du PCPU, tapez la commande suivante :

     mpstat -P ALL 5
     <!--NeedCopy-->
    

    Sortie de la commande mpstat

    Dans cette sortie, 8 correspond au processeur de gestion et 9 à 11 aux moteurs de paquets.

  • Pour changer le vCPU en épinglage PCPU, il existe deux options.

    • Modifiez-le au moment de 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 .xml fichier comme précédemment avec les balises suivantes :

      1. Modifiez le fichier .xml du VPX sur l’hôte

        /etc/libvirt/qemu/<VPX_name>.xml
        <!--NeedCopy-->
        
      2. 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-->
        
      3. Arrêtez le VPX.

      4. Mettez à jour les informations de configuration de la machine virtuelle avec les mappages de nœuds NUMA à l’aide de la commande suivante :

        virsh define /etc/libvirt/qemu/ <VPX_name>.xml
        <!--NeedCopy-->
        
      5. Mettez le VPX sous tension. Vérifiez ensuite la sortie de la virsh vcpupin <VPX name> commande sur l’hôte pour voir l’épinglage du processeur mis à jour.

Éliminez les frais généraux d’interruption de l’hôte.

  • Détectez VM_EXITS à l’aide de la kvm_stat commande.

    Au niveau de l’hyperviseur, les interruptions de l’hôte sont mappées sur les mêmes processeurs sur lesquels les vCPU du VPX sont épinglés. Cela peut entraîner le retrait périodique des processeurs virtuels sur le VPX.

    Pour trouver les sorties de machine virtuelle effectuées par les machines virtuelles exécutant l’hôte, utilisez la kvm_stat commande.

     [root@localhost ~]# kvm_stat -1  | grep EXTERNAL
     kvm_exit(EXTERNAL_INTERRUPT)  1728349 27738
     [root@localhost ~]#
     <!--NeedCopy-->
    

    Une valeur supérieure de l’ordre de 1+M indique un problème.

    Si une seule machine virtuelle est présente, la valeur attendue est comprise entre 30 et 100 K. Tout ce qui dépasse peut indiquer qu’un ou plusieurs vecteurs d’interruption d’hôte sont mappés sur le même processeur.

  • Détectez les interruptions de l’hôte et migrez les interruptions de l’hôte.

    Lorsque vous exécutez la concatenate commande pour le fichier « /proc/interrupts », elle affiche tous les mappages d’interruption de l’hôte. Si un ou plusieurs IRQ actifs sont mappés sur le même PCPU, le compteur correspondant est incrémenté.

    Déplacez toutes les interruptions qui se chevauchent avec les processeurs Citrix ADC VPX vers des processeurs 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ésactivez la balance IRQ.

    Désactivez le démon d’équilibrage de l’IRQ, de sorte 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_stat pour vous assurer qu’il n’y a pas beaucoup de compteurs.

Citrix ADC VPX avec interfaces réseau PV

Vous pouvez configurer des interfaces réseau de para-virtualisation (PV), SR-IOV et PCIe passthrough en tant que déploiement de deux cartes réseau virtuelles par pNIC . Pour plus d’informations, consultez la section Deux cartes réseau virtuelles par déploiement de pNIC.

Pour des performances optimales des interfaces PV (virtio), procédez comme suit :

  • Identifiez le domaine NUMA auquel le slot/carte d’interface réseau PCIe est lié.
  • La mémoire et le processeur virtuel du VPX doivent être épinglés au même domaine NUMA.
  • Le thread Vhost doit être lié aux processeurs du même domaine NUMA.

Liez les threads de l’hôte virtuel aux processeurs correspondants :

  1. Une fois le trafic démarré, exécutez la top commande sur l’hôte.

    Exécutez la commande supérieure

  2. Identifiez l’affinité du processus hôte virtuel (nommé sous le nom vhost-<pid-of-qemu>).
  3. 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-->
    
  4. 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-->
    

Liez le processus QEMU au cœur physique correspondant :

  1. Identifiez les cœurs physiques sur lesquels le processus QEMU est exécuté. Pour plus d’informations, reportez-vous à la sortie précédente.
  2. 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-->
    

Citrix ADC VPX avec interfaces réseau relais SR-IOV et Fortville PCIe

Pour des performances optimales des interfaces réseau relais SR-IOV et Fortville PCIe, procédez comme suit :

  • Identifiez le domaine NUMA auquel le slot/carte d’interface réseau PCIe est lié.
  • La mémoire et le processeur virtuel du VPX doivent être épinglés au même domaine NUMA.

Exemple de fichier XML VPX pour vCPU et épinglage de 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 Citrix ADC VPX sur Citrix Hypervisors

Cette section contient des détails sur les options et paramètres configurables, ainsi que d’autres suggestions qui vous aident à obtenir des performances optimales de l’instance Citrix ADC VPX sur Citrix Hypervisors.

Paramètres de performance pour Citrix Hypervisors

Recherchez le domaine NUMA de la carte réseau à l’aide de la commande « xl » :

xl info -n
<!--NeedCopy-->

Épinglez les vCPU de VPX aux cœurs physiques.

xl vcpu-pin <Netsclaer VM Name>  <vCPU id>  <physical CPU id>
<!--NeedCopy-->

Vérifiez la liaison des vCPU.

xl vcpu-list
<!--NeedCopy-->

Allouez plus de 8 processeurs virtuels aux machines virtuelles Citrix ADC.

Pour configurer plus de 8 processeurs virtuels, exécutez les commandes suivantes à partir de 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-->

Citrix ADC VPX avec interfaces réseau SR-IOV

Pour des performances optimales des interfaces réseau SR-IOV, procédez comme suit :

  • Identifiez le domaine NUMA auquel l’emplacement PCIe ou la carte réseau est lié.
  • Épinglez la mémoire et le processeur virtuel du VPX au même domaine NUMA.
  • Liez le vCPU Domain-0 au processeur restant.

Citrix ADC VPX avec interfaces para-virtualisées

Pour des performances optimales, deux cartes réseau virtuelles par PNIC et une configuration vNIC par pNIC sont recommandées, comme dans d’autres environnements PV.

Pour obtenir des performances optimales des interfaces para-virtualisées (netfront), procédez comme suit :

  • Identifiez le domaine NUMA auquel l’emplacement PCIe ou la carte réseau est lié.
  • Épinglez la mémoire et le processeur virtuel du VPX au même domaine NUMA.
  • Liez le vCPU Domain-0 au processeur restant du même domaine NUMA.
  • Épinglez les threads Rx/Tx hôtes de vNIC aux vCPU du domaine 0.

Épinglez les threads hôtes aux vCPU Domain-0 :

  1. Recherchez l’ID Xen du VPX à l’aide de la xl list commande sur le shell hôte Citrix Hypervisor.
  2. Identifiez les threads hôtes à l’aide de la commande suivante :

    ps -ax | grep vif <Xen-ID>
    <!--NeedCopy-->
    

    Dans l’exemple suivant, ces valeurs indiquent :

    • vif5.0 - Les threads de la première interface allouée à VPX dans XenCenter (interface de gestion).
    • vif5.1 - Les threads de la deuxième interface affectée à VPX et ainsi de suite.

    Sortie de la commande xl list

  3. Épinglez les threads aux vCPU du domaine 0 à l’aide de la commande suivante :

    taskset –pc <core-id> <process-id>
    <!--NeedCopy-->
    

    Exemple :

    taskset -pc 1 29189
    <!--NeedCopy-->
    
Optimisation des performances Citrix ADC VPX sur VMware ESX, Linux KVM et Citrix Hypervisors