Citrix ADC

Optimieren Sie die Leistung von Citrix ADC VPX auf VMware ESX, Linux KVM und Citrix Hypervisors

Die Leistung von Citrix ADC VPX hängt stark vom Hypervisor, den zugewiesenen Systemressourcen und den Hostkonfigurationen ab. Um die gewünschte Leistung zu erzielen, befolgen Sie zunächst die Empfehlungen im VPX-Datenblatt und optimieren Sie es dann mithilfe der in diesem Dokument enthaltenen Best Practices weiter.

Citrix ADC VPX-Instanz auf VMware ESX-Hypervisoren

Dieser Abschnitt enthält Details zu konfigurierbaren Optionen und Einstellungen sowie andere Vorschläge, mit denen Sie eine optimale Leistung der Citrix ADC VPX-Instanz auf VMware ESX-Hypervisoren erzielen können.

Empfohlene Konfiguration auf ESX-Hosts

Befolgen Sie diese Empfehlungen, um eine hohe Leistung für VPX mit E1000-, VMXNET3-, SR-IOV- und PCI-Passthrough-Netzwerkschnittstellen zu erzielen:

  • Die Gesamtzahl der auf dem ESX-Host bereitgestellten virtuellen CPUs (vCPUs) muss kleiner oder gleich der Gesamtzahl der physischen CPUs (PCPUs) auf dem ESX-Host sein.
  • Affinität und CPU-Affinität für ungleichmäßigen Speicherzugriff (NUMA) müssen festgelegt werden, damit der ESX-Host gute Ergebnisse erzielt.

    — Um die NUMA-Affinität eines Vmnic zu ermitteln, melden Sie sich lokal oder remote beim Host an und geben Sie Folgendes ein:

     #vsish -e get /net/pNics/vmnic7/properties | grep NUMA
     Device NUMA Node: 0
     <!--NeedCopy-->
    
    • Informationen zum Festlegen der NUMA- und vCPU-Affinität für eine VM finden Sie in der VMware-Dokumentation

Citrix ADC VPX mit E1000-Netzwerkschnittstellen

Nehmen Sie die folgenden Einstellungen auf dem VMware ESX-Host vor:

  • Erstellen Sie auf dem VMware ESX-Host zwei vNICs aus einem pNIC vSwitch. Mehrere vNICs erstellen mehrere Rx-Threads im ESX-Host. Dies erhöht den Rx-Durchsatz der pNIC-Schnittstelle.
  • Aktivieren Sie VLANs auf der vSwitch-Portgruppenebene für jede von Ihnen erstellte vNIC.
  • Um den vNIC-Übertragungsdurchsatz (Tx) zu erhöhen, verwenden Sie einen separaten Tx-Thread im ESX-Host pro vNIC. Verwenden Sie den folgenden ESX-Befehl:
    • Für ESX Version 5.5:

       esxcli system settings advanced set –o /Net/NetTxWorldlet –i
       <!--NeedCopy-->
      
    • Für ESX ab Version 6.0:

       esxcli system settings advanced set -o /Net/NetVMTxType –i 1
       <!--NeedCopy-->
      
  • Um den vNIC Tx-Durchsatz weiter zu erhöhen, verwenden Sie einen separaten Tx-Vervollständigungs-Thread und Rx-Threads pro Gerät (NIC) -Warteschlange. Verwenden Sie den folgenden ESX-Befehl:

     esxcli system settings advanced set -o /Net/NetNetqRxQueueFeatPairEnable -i 0
     <!--NeedCopy-->
    

Hinweis:

Stellen Sie sicher, dass Sie den VMware ESX-Host neu starten, um die aktualisierten Einstellungen zu übernehmen.

Zwei vNICs pro pNIC-Bereitstellung

Im Folgenden finden Sie ein Beispiel für Topologie und Konfigurationsbefehle für das Bereitstellungsmodell mit zwei vNICs pro pNIC, das eine bessere Netzwerkleistung bietet.

Zwei vNICs pro pNIC-Bereitstellung

Citrix ADC VPX Beispielkonfiguration:

Um die in der vorherigen Beispieltopologie gezeigte Bereitstellung zu erreichen, führen Sie die folgende Konfiguration auf der Citrix ADC VPX-Instanz durch:

  • Binden Sie auf Clientseite das SNIP (1.1.1.2) an die Netzwerkschnittstelle 1/1 und aktivieren Sie den VLAN-Tag-Modus.

     bind vlan 2 -ifnum 1/1 –tagged
     bind vlan 2 -IPAddress 1.1.1.2 255.255.255.0
     <!--NeedCopy-->
    
  • Binden Sie auf der Serverseite das SNIP (2.2.2.2) an die Netzwerkschnittstelle 1/1 und aktivieren Sie den VLAN-Tag-Modus.

     bind vlan 3 -ifnum 1/2 –tagged
     bind vlan 3 -IPAddress 2.2.2.2 255.255.255.0
     <!--NeedCopy-->
    
  • Fügen Sie einen virtuellen HTTP-Server (1.1.1.100) hinzu und binden Sie ihn an einen Dienst (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-->
    

Hinweis:

Stellen Sie sicher, dass Sie die folgenden beiden Einträge in die Routentabelle aufnehmen:

  • 1.1.1.0/24 Subnetz mit Gateway, das auf SNIP zeigt 1.1.1.2
  • 2.2.2.0/24 Subnetz mit Gateway, das auf SNIP zeigt 2.2.2.2

Citrix ADC VPX mit VMXNET3-Netzwerkschnittstellen

Um eine hohe Leistung für VPX mit VMXNET3-Netzwerkschnittstellen zu erzielen, nehmen Sie die folgenden Einstellungen auf dem VMware ESX-Host vor:

  • Erstellen Sie zwei vNICs aus einem pNIC vSwitch. Mehrere vNICs erstellen mehrere Rx-Threads im ESX-Host. Dies erhöht den Rx-Durchsatz der pNIC-Schnittstelle.
  • Aktivieren Sie VLANs auf der vSwitch-Portgruppenebene für jede von Ihnen erstellte vNIC.
  • Um den vNIC-Übertragungsdurchsatz (Tx) zu erhöhen, verwenden Sie einen separaten Tx-Thread im ESX-Host pro vNIC. Verwenden Sie die folgenden ESX-Befehle:
    • Für ESX Version 5.5:
     esxcli system settings advanced set –o /Net/NetTxWorldlet –i
     <!--NeedCopy-->
    
    • Für ESX ab Version 6.0:
      esxcli system settings advanced set -o /Net/NetVMTxType –i 1
      <!--NeedCopy-->
    

Führen Sie auf dem VMware ESX-Host die folgende Konfiguration durch:

  • Erstellen Sie auf dem VMware ESX-Host zwei vNICs aus einem pNIC vSwitch. Mehrere vNICs erstellen mehrere Tx- und Rx-Threads im ESX-Host. Dies erhöht den Tx- und Rx-Durchsatz der pNIC-Schnittstelle.
  • Aktivieren Sie VLANs auf der vSwitch-Portgruppenebene für jede von Ihnen erstellte vNIC.
  • Um den Tx-Durchsatz einer vNIC zu erhöhen, verwenden Sie einen separaten Tx-Vervollständigungs-Thread und Rx-Threads pro Gerät (NIC) -Warteschlange. Verwenden Sie den folgenden Befehl:

     esxcli system settings advanced set -o /Net/NetNetqRxQueueFeatPairEnable -i 0
     <!--NeedCopy-->
    
  • Konfigurieren Sie eine VM für die Verwendung eines Übertragungs-Threads pro vNIC, indem Sie der Konfiguration der VM die folgende Einstellung hinzufügen:

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

Weitere Informationen finden Sie unter Best Practices für die Leistungsoptimierung von Telekommunikations- und NFV-Workloads in vSphere

Hinweis:

Stellen Sie sicher, dass Sie den VMware ESX-Host neu starten, um die aktualisierten Einstellungen zu übernehmen.

Sie können VMXNET3 als Bereitstellung mit zwei vNICs pro pNIC konfigurieren. Weitere Informationen finden Sie unter Zwei vNICs pro pNIC-Bereitstellung.

Citrix ADC VPX mit SR-IOV- und PCI Passthrough-Netzwerkschnittstellen

Um eine hohe Leistung für VPX mit SR-IOV- und PCI-Passthrough-Netzwerkschnittstellen zu erzielen, siehe Empfohlene Konfiguration auf ESX-Hosts.

Citrix ADC VPX-Instanz auf Linux-KVM-Plattform

Dieser Abschnitt enthält Details zu konfigurierbaren Optionen und Einstellungen sowie andere Vorschläge, mit denen Sie eine optimale Leistung der Citrix ADC VPX-Instanz auf der Linux-KVM-Plattform erzielen können.

Leistungseinstellungen für KVM

Nehmen Sie die folgenden Einstellungen auf dem KVM-Host vor:

Finden Sie die NUMA-Domäne der NIC mit dem lstopo Befehl:

Stellen Sie sicher, dass der Speicher für den VPX und die CPU an derselben Stelle angeheftet ist. In der folgenden Ausgabe ist die 10G-NIC “ens2” an die NUMA-Domäne #1 gebunden.

NUMA-Domäne #1

Weisen Sie den VPX-Speicher aus der NUMA-Domäne zu.

Der numactl Befehl gibt die NUMA-Domäne an, von der der Speicher zugewiesen wird. In der folgenden Ausgabe werden etwa 10 GB RAM vom NUMA-Knoten #0 zugewiesen.

NUMA-Knoten #0

Gehen Sie folgendermaßen vor, um die NUMA-Knotenzuordnung zu ändern.

  1. Bearbeiten Sie die XML des VPX auf dem Host.

    /etc/libvirt/qemu/<VPX_name>.xml
    <!--NeedCopy-->
    
  2. Fügen Sie das folgende Tag hinzu:

    <numatune>
    <memory mode="strict" nodeset="1"/>    This is the NUMA domain name
    </numatune>
    <!--NeedCopy-->
    
  3. Fahren Sie den VPX herunter.

  4. Führen Sie den folgenden Befehl aus:

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

    Dieser Befehl aktualisiert die Konfigurationsinformationen für die VM mit den NUMA-Knotenzuordnungen.

  5. Schalten Sie den VPX ein. Überprüfen Sie dann die numactl –hardware Befehlsausgabe auf dem Host, um die aktualisierten Speicherzuweisungen für den VPX zu sehen.

    Ausgabe des Hardwarebefehls numactl

Pin vCPUs von VPX an physische Kerne.

  • Um die vCPU zu pCPU-Zuordnungen einer VPX anzuzeigen, geben Sie den folgenden Befehl ein

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

    Ausgabe des Befehls virsh-vcpupin

    Die vCPUs 0—4 werden physikalischen Kernen 8—11 zugeordnet.

  • Um die aktuelle pCPU-Nutzung anzuzeigen, geben Sie den folgenden Befehl ein:

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

    Ausgabe des Befehls mpstat

    In dieser Ausgabe ist 8 Management-CPU und 9—11 Paket-Engines.

  • Um die vCPU auf pCPU-Pinning zu ändern, gibt es zwei Möglichkeiten.

    • Ändern Sie es zur Laufzeit, nachdem der VPX mit dem folgenden Befehl hochgefahren wurde:

       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-->
      
    • Um statische Änderungen an der VPX vorzunehmen, bearbeiten Sie die .xml Datei wie zuvor mit den folgenden Tags:

      1. Bearbeiten Sie die XML-Datei des VPX auf dem Host

        /etc/libvirt/qemu/<VPX_name>.xml
        <!--NeedCopy-->
        
      2. Fügen Sie das folgende Tag hinzu:

        <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. Fahren Sie den VPX herunter.

      4. Aktualisieren Sie die Konfigurationsinformationen für die VM mit den NUMA-Knotenzuordnungen mithilfe des folgenden Befehls:

        virsh define /etc/libvirt/qemu/ <VPX_name>.xml
        <!--NeedCopy-->
        
      5. Schalten Sie den VPX ein. Überprüfen Sie dann die virsh vcpupin <VPX name> Befehlsausgabe auf dem Host, um das aktualisierte CPU-Pinning zu sehen.

Eliminieren Sie Host-Interrupt-Overhead.

  • Erkennt VM_EXITS mithilfe des kvm_stat Befehls.

    Auf Hypervisor-Ebene werden Host-Interrupts denselben PCPUs zugeordnet, auf denen die vCPUs des VPX angeheftet sind. Dies kann dazu führen, dass vCPUs auf dem VPX regelmäßig rausgeschmissen werden.

    Verwenden Sie den kvm_stat Befehl, um die VM-Exits zu finden, die von VMs durchgeführt wurden, auf denen der Host ausgeführt wird

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

    Ein höherer Wert in der Größenordnung von 1+M weist auf ein Problem hin.

    Wenn eine einzelne VM vorhanden ist, beträgt der erwartete Wert 30—100 K. Alles andere kann darauf hinweisen, dass ein oder mehrere Host-Interrupt-Vektoren derselben pCPU zugeordnet sind.

  • Erkennen Sie Host-Interrupts und migrieren Sie Host-Interrupts.

    Wenn Sie den concatenate Befehl für die Datei “/proc/interrupts” ausführen, werden alle Host-Interrupt-Zuordnungen angezeigt. Wenn ein oder mehrere aktive IRQs derselben pCPU zugeordnet werden, erhöht sich der entsprechende Zähler.

    Verschieben Sie alle Interrupts, die sich mit den PCPUs Ihres Citrix ADC VPX überschneiden, auf ungenutzte PCPUs:

     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-->
    
  • Deaktivieren Sie das IRQ Guthaben

    Deaktivieren Sie den IRQ-Balance-Daemon, damit im laufenden Betrieb keine Umschuldung erfolgt.

     service irqbalance stop
     service irqbalance show - To check the status
     service irqbalance start - Enable if needed
     <!--NeedCopy-->
    

    Stellen Sie sicher, dass Sie den kvm_stat Befehl ausführen, um sicherzustellen, dass es nicht viele Zähler gibt.

Citrix ADC VPX mit PV-Netzwerkschnittstellen

Sie können Para-Virtualization (PV), SR-IOV und PCIe-Passthrough-Netzwerkschnittstellen als Zwei vNICs pro pNIC-Bereitstellung konfigurieren. Weitere Informationen finden Sie unter Zwei vNICs pro pNIC-Bereitstellung.

Gehen Sie folgendermaßen vor, um eine optimale Leistung von PV (virtio) -Schnittstellen zu erzielen:

  • Identifizieren Sie die NUMA-Domäne, an die der PCIe-Steckplatz/NIC gebunden ist.
  • Der Speicher und die vCPU für den VPX müssen an dieselbe NUMA-Domäne angeheftet sein.
  • Der Vhost-Thread muss an die CPUs in derselben NUMA-Domäne gebunden sein.

Binden Sie die virtuellen Host-Threads an die entsprechenden CPUs:

  1. Sobald der Verkehr gestartet wurde, führen Sie den top Befehl auf dem Host aus.

    Führen Sie den Top-Befehl aus

  2. Identifizieren Sie die Affinität des virtuellen Host-Prozesses (benannt als vhost-<pid-of-qemu>).
  3. Binden Sie die vHost-Prozesse mit dem folgenden Befehl an die zuvor identifizierten physischen Kerne in der NUMA-Domäne:

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

    Beispiel:

    taskset –pc 12 29838
    <!--NeedCopy-->
    
  4. Die Prozessorkerne, die der NUMA-Domäne entsprechen, können mit dem folgenden Befehl identifiziert werden:

    [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-->
    

Binden Sie den QEMU-Prozess an den entsprechenden physikalischen Kern:

  1. Identifizieren Sie die physikalischen Kerne, auf denen der QEMU-Prozess läuft. Weitere Informationen finden Sie in der vorhergehenden Ausgabe.
  2. Binden Sie den QEMU-Prozess mit dem folgenden Befehl an dieselben physikalischen Kerne, an die Sie die vCPUs binden:

    taskset –pc 8-11 29824
    <!--NeedCopy-->
    

Citrix ADC VPX mit SR-IOV und Fortville PCIe Passthrough-Netzwerkschnittstellen

Gehen Sie folgendermaßen vor, um eine optimale Leistung der SR-IOV- und Fortville PCIe-Passthrough-Netzwerkschnittstellen zu erzielen:

  • Identifizieren Sie die NUMA-Domäne, an die der PCIe-Steckplatz/NIC gebunden ist.
  • Der Speicher und die vCPU für den VPX müssen an dieselbe NUMA-Domäne angeheftet sein.

Beispiel für eine VPX-XML-Datei für vCPU und Speicher-Pinning für 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-->

Citrix ADC VPX-Instanz auf Citrix Hypervisors

Dieser Abschnitt enthält Details zu konfigurierbaren Optionen und Einstellungen sowie andere Vorschläge, mit denen Sie eine optimale Leistung der Citrix ADC VPX-Instanz auf Citrix Hypervisors erzielen können.

Leistungseinstellungen für Citrix Hypervisors

Finden Sie die NUMA-Domäne der NIC mit dem Befehl “xl”:

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

Pin vCPUs von VPX an physische Kerne.

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

Überprüfen Sie die Bindung von vCPUs.

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

Weisen Sie Citrix ADC VMs mehr als 8 vCPUs zu.

Führen Sie zum Konfigurieren von mehr als 8 vCPUs die folgenden Befehle von der Citrix Hypervisor-Konsole aus:

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 mit SR-IOV-Netzwerkschnittstellen

Gehen Sie folgendermaßen vor, um eine optimale Leistung der SR-IOV-Netzwerkschnittstellen zu erzielen:

  • Identifizieren Sie die NUMA-Domäne, an die der PCIe-Steckplatz oder die NIC gebunden ist.
  • Stecken Sie den Speicher und die vCPU für den VPX an dieselbe NUMA-Domäne an.
  • Binden Sie die Domain-0 vCPU an die verbleibende CPU.

Citrix ADC VPX mit paravirtualisierten Schnittstellen

Für eine optimale Leistung werden zwei vNICs pro pNIC und eine vNIC pro pNIC-Konfiguration empfohlen, wie in anderen PV-Umgebungen.

Gehen Sie folgendermaßen vor, um eine optimale Leistung paravirtualisierter (Netfront) Schnittstellen zu erzielen:

  • Identifizieren Sie die NUMA-Domäne, an die der PCIe-Steckplatz oder die NIC gebunden ist.
  • Stecken Sie den Speicher und die vCPU für den VPX an dieselbe NUMA-Domäne an.
  • Binden Sie die Domain-0 vCPU an die verbleibende CPU derselben NUMA-Domäne.
  • Pin Host Rx/Tx-Threads von vNIC an Domain-0 vCPUs.

Host-Threads an Domain-0 vCPUs anheften:

  1. Suchen Sie die Xen-ID des VPX mithilfe des xl list Befehls auf der Citrix Hypervisor Hostshell.
  2. Identifizieren Sie Host-Threads mithilfe des folgenden Befehls:

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

    Im folgenden Beispiel zeigen diese Werte an:

    • vif5.0 - Die Threads für die erste Schnittstelle, die VPX in XenCenter zugewiesen wurde (Verwaltungsschnittstelle).
    • vif5.1 - Die Threads für die zweite Schnittstelle, die VPX usw. zugewiesen sind.

    Ausgabe des Befehls xl list

  3. Stecken Sie die Threads mit dem folgenden Befehl an Domain-0 vCPUs an:

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

    Beispiel:

    taskset -pc 1 29189
    <!--NeedCopy-->
    
Optimieren Sie die Leistung von Citrix ADC VPX auf VMware ESX, Linux KVM und Citrix Hypervisors