Optimize Citrix ADC VPX performance on VMware ESX, Linux KVM, and Citrix Hypervisors
The Citrix ADC VPX performance greatly varies depending on the hypervisor, allocated system resources, and the host configurations. 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 instance on VMware ESX hypervisors
This section contains details of configurable options and settings, and other suggestions that help you achieve optimal performance of Citrix ADC VPX instance on VMware ESX hypervisors.
- Empfohlene Konfiguration auf ESX-Hosts
- Citrix ADC VPX with E1000 network interfaces
- Citrix ADC VPX with VMXNET3 network interfaces
- Citrix ADC VPX with SR-IOV and PCI passthrough network interfaces
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 with E1000 network interfaces
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 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-->
-
-
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 die folgenden ESX-Befehle:
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.
Citrix ADC VPX sample configuration:
To achieve the deployment shown in the preceding sample topology, perform the following configuration on the Citrix ADC VPX instance:
-
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 with VMXNET3 network interfaces
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 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-->
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-->
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 with SR-IOV and PCI passthrough network interfaces
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 instance on Linux-KVM platform
This section contains details of configurable options and settings, and other suggestions that help you achieve optimal performance of Citrix ADC VPX instance on Linux-KVM platform.
- Leistungseinstellungen für KVM
- Citrix ADC VPX with PV network interfaces
- Citrix ADC VPX with SR-IOV and Fortville PCIe passthrough network interfaces
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.
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.
Gehen Sie folgendermaßen vor, um die NUMA-Knotenzuordnung zu ändern.
-
Bearbeiten Sie die XML des VPX auf dem Host.
/etc/libvirt/qemu/<VPX_name>.xml <!--NeedCopy-->
-
Fügen Sie das folgende Tag hinzu:
<numatune> <memory mode="strict" nodeset="1"/> This is the NUMA domain name </numatune> <!--NeedCopy-->
-
Fahren Sie den VPX herunter.
-
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.
-
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.
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-->
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-->
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:-
Bearbeiten Sie die XML-Datei des VPX auf dem Host
/etc/libvirt/qemu/<VPX_name>.xml <!--NeedCopy-->
-
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-->
-
Fahren Sie den VPX herunter.
-
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-->
-
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, liegt der erwartete Wert bei 30–100 K. Alles darüber hinaus 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.Move any interrupts that overlap with your Citrix ADC VPX’s pCPUs to unused 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 with PV network interfaces
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:
-
Sobald der Verkehr gestartet wurde, führen Sie den
top
Befehl auf dem Host aus. - Identifizieren Sie die Affinität des virtuellen Host-Prozesses (benannt als
vhost-<pid-of-qemu>
). -
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-->
-
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:
- Identifizieren Sie die physikalischen Kerne, auf denen der QEMU-Prozess läuft. Weitere Informationen finden Sie in der vorhergehenden Ausgabe.
-
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 with SR-IOV and Fortville PCIe passthrough network interfaces
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 instance on Citrix Hypervisors
This section contains details of configurable options and settings, and other suggestions that help you achieve optimal performance of Citrix ADC VPX instance on Citrix Hypervisors.
- Leistungseinstellungen für Citrix Hypervisors
- Citrix ADC VPX with SR-IOV network interfaces
- Citrix ADC VPX with para-virtualized interfaces
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-->
Allocate more than 8 vCPUs to Citrix ADC VMs.
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 with SR-IOV network interfaces
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 with para-virtualized interfaces
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:
- Suchen Sie die Xen-ID des VPX mithilfe des
xl list
Befehls auf der Citrix Hypervisor Hostshell. -
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.
-
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-->