NetScaler VPX

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. Para lograr el rendimiento deseado, primero siga las recomendaciones de la hoja de datos de VPX y, a continuación, optimice aún más mediante las prácticas recomendadas que se proporcionan en este documento.

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.

Configuración recomendada en hosts ESX

Para lograr un alto rendimiento para VPX con interfaces de red de paso E1000, VMXNET3, SR-IOV y PCI, siga estas recomendaciones:

  • El número total de CPU virtuales (vCPU) aprovisionadas en el host ESX debe ser inferior o igual al número total de CPU físicas (PCPU) del host ESX.
  • La afinidad de acceso a memoria no uniforme (NUMA) y la afinidad de CPU deben configurarse para que el host ESX obtenga buenos resultados.

    — Para encontrar la afinidad NUMA de un Vmnic, inicie sesión en el host de forma local o remota y escriba:

       #vsish -e get /net/pNics/vmnic7/properties | grep NUMA
       Device NUMA Node: 0
     <!--NeedCopy-->
    

Citrix ADC VPX with E1000 network interfaces

Realice la siguiente configuración en el host de VMware ESX:

  • En el host VMware ESX, cree dos vNIC a partir de un conmutador vNIC. Varias vNIC crean varios subprocesos Rx en el host ESX. Esto aumenta el rendimiento de Rx de la interfaz pNIC.
  • Habilite las VLAN en el nivel de grupo de puertos de vSwitch para cada vNIC que haya creado.
  • Para aumentar el rendimiento de transmisión de vNIC (Tx), utilice un subproceso Tx independiente en el host ESX por vNIC. Utilice los siguientes comandos de ESX:
    • Para la versión 5.5 de ESX:

         esxcli system settings advanced set –o /Net/NetTxWorldlet –i
       <!--NeedCopy-->
      
    • Para la versión 6.0 de ESX en adelante:

         esxcli system settings advanced set -o /Net/NetVMTxType –i 1
       <!--NeedCopy-->
      
  • Para aumentar aún más el rendimiento de vNIC Tx, utilice un subproceso de finalización Tx y una cola de subprocesos Rx por dispositivo (NIC) independientes. Utilice los siguientes comandos de ESX:

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

Nota:

Asegúrese de reiniciar el host de VMware ESX para aplicar la configuración actualizada.

Dos vNIC por implementación de pNIC

A continuación se muestra un ejemplo de comandos de topología y configuración para el modelo de implementación Dos vNIC por pNIC que ofrece un mejor rendimiento de la red.

Dos vNIC por implementación de pNIC

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:

  • En el lado del cliente, vincule el SNIP (1.1.1.2) a la interfaz de red 1/1 y habilite el modo de etiqueta VLAN.

       bind vlan 2 -ifnum 1/1 –tagged
       bind vlan 2 -IPAddress 1.1.1.2 255.255.255.0
     <!--NeedCopy-->
    
  • En el lado del servidor, vincule el SNIP (2.2.2.2) a la interfaz de red 1/1 y habilite el modo de etiqueta VLAN.

       bind vlan 3 -ifnum 1/2 –tagged
       bind vlan 3 -IPAddress 2.2.2.2 255.255.255.0
     <!--NeedCopy-->
    
  • Agregar un servidor virtual HTTP (1.1.1.100) y vincularlo a un servicio (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-->
    

Nota:

Asegúrese de incluir las dos entradas siguientes en la tabla de rutas:

  • subred 1.1.1.0/24 con puerta de enlace apuntando a SNIP 1.1.1.2
  • Subred 2.2.2.0/24 con puerta de enlace que apunta a SNIP 2.2.2.2

Citrix ADC VPX with VMXNET3 network interfaces

Para lograr un alto rendimiento para VPX con interfaces de red VMXNET3, realice la siguiente configuración en el host VMware ESX:

  • Cree dos vNIC a partir de un vSwitch pNIC. Varias vNIC crean varios subprocesos Rx en el host ESX. Esto aumenta el rendimiento de Rx de la interfaz pNIC.
  • Habilite las VLAN en el nivel de grupo de puertos de vSwitch para cada vNIC que haya creado.
  • Para aumentar el rendimiento de transmisión de vNIC (Tx), utilice un subproceso Tx independiente en el host ESX por vNIC. Utilice el siguiente comando de ESX:
    • Para la versión 5.5 de ESX:
       esxcli system settings advanced set –o /Net/NetTxWorldlet –i
     <!--NeedCopy-->
    
    • Para la versión 6.0 de ESX en adelante:
        esxcli system settings advanced set -o /Net/NetVMTxType –i 1
      <!--NeedCopy-->
    

En el host de VMware ESX, realice la siguiente configuración:

  • En el host VMware ESX, cree dos vNIC a partir de 1 vSwitch pNIC. Varias vNIC crean varios subprocesos Tx y Rx en el host ESX. Esto aumenta el rendimiento Tx y Rx de la interfaz pNIC.
  • Habilite las VLAN en el nivel de grupo de puertos de vSwitch para cada vNIC que haya creado.
  • Para aumentar el rendimiento de Tx de una vNIC, utilice un subproceso de finalización Tx y una cola de subprocesos Rx por dispositivo (NIC) independientes. Utilice el siguiente comando:

       esxcli system settings advanced set -o /Net/NetNetqRxQueueFeatPairEnable -i 0
     <!--NeedCopy-->
    
  • Configure una máquina virtual para que use un subproceso de transmisión por vNIC, agregando la siguiente configuración a la configuración de la máquina virtual:

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

Nota:

Asegúrese de reiniciar el host de VMware ESX para aplicar la configuración actualizada.

Puede configurar VMXNET3 como dos vNIC por implementación de PNIC . Para obtener más información, consulte Dos vNIC por implementación de PNIC.

Citrix ADC VPX with SR-IOV and PCI passthrough network interfaces

Para lograr un alto rendimiento para VPX con interfaces de red de paso SR-IOV y PCI, consulte Configuración recomendada en hosts ESX.

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.

Configuración de rendimiento para KVM

Realice los siguientes ajustes en el host KVM:

Busque el dominio NUMA de la NIC mediante el comando lstopo:

Asegúrese de que la memoria del VPX y de la CPU esté fijada en la misma ubicación. En el siguiente resultado, la NIC 10G “ens2” está vinculada al dominio NUMA #1.

Dominio NUMA #1

Asigne la memoria VPX del dominio NUMA.

El comando numactl indica el dominio NUMA desde el que se asigna la memoria. En el siguiente resultado, se asignan unos 10 GB de RAM desde el nodo NUMA #0.

Nodo NUMA #0

Para cambiar la asignación de nodos NUMA, sigue estos pasos.

  1. Modifique el archivo.xml del VPX en el host.

      /etc/libvirt/qemu/<VPX_name>.xml
    <!--NeedCopy-->
    
  2. Agrega la siguiente etiqueta:

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

  4. Ejecute este comando:

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

    Este comando actualiza la información de configuración de la máquina virtual con las asignaciones de nodos NUMA.

  5. Enciende el VPX. A continuación, compruebe el resultado del comando numactl –hardware en el host para ver las asignaciones de memoria actualizadas para el VPX.

    Salida del comando numactl hardware

Anclar vCPU de VPX a núcleos físicos.

  • Para ver las asignaciones de vCPU a PCPU de un VPX, escriba el siguiente comando

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

    Salida del comando virsh-vcpupin

    Las vCPU 0—4 se asignan a los núcleos físicos 8—11.

  • Para ver el uso actual de la PCPU, escriba el siguiente comando:

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

    Salida del comando mpstat

    En este resultado, 8 es CPU de administración y 9-11 son motores de paquetes.

  • Para cambiar la fijación de vCPU a PCPU, hay dos opciones.

    • Cámbielo en tiempo de ejecución después de que se inicie el VPX con el siguiente comando:

         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-->
      
    • Para realizar cambios estáticos en el VPX, modifique el archivo .xml como antes con las siguientes etiquetas:

      1. Modificar el archivo.xml del VPX en el host

          /etc/libvirt/qemu/<VPX_name>.xml
        <!--NeedCopy-->
        
      2. Agrega la siguiente etiqueta:

          <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. Apaga el VPX.

      4. Actualice la información de configuración de la máquina virtual con las asignaciones de nodos NUMA mediante el siguiente comando:

          virsh define /etc/libvirt/qemu/ <VPX_name>.xml
        <!--NeedCopy-->
        
      5. Enciende el VPX. A continuación, compruebe el resultado del comando virsh vcpupin &lt;VPX name&gt; en el host para ver la fijación actualizada de la CPU.

Elimine la sobrecarga de interrupción del host.

  • Detecte VM_EXITS mediante el comando kvm_stat.

    En el nivel del hipervisor, las interrupciones del host se asignan a las mismas PCPU en las que están fijadas las vCPU de la VPX. Esto podría provocar que las vCPU de la VPX se expulsaran periódicamente.

    Para encontrar las salidas de VM realizadas por las máquinas virtuales que ejecutan el host, use el comando kvm_stat.

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

    Un valor más alto del orden 1+M indica un problema.

    Si hay una sola VM presente, el valor esperado es 30–100 K. Cualquier cosa más que eso puede indicar que hay uno o más vectores de interrupción del host asignados al mismo pCPU.

  • Detecte las interrupciones del host y migre las interrupciones del host.

    Al ejecutar el comando concatenate del archivo “/proc/interrupts”, muestra todas las asignaciones de interrupción del host. Si una o más IRQ activas se asignan a la misma PCPU, su contador correspondiente aumenta.

    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-->
    
  • Desactiva el saldo de IRQ.

    Inhabilite el demonio de equilibrio de IRQ para que no se produzca ninguna reprogramación sobre la marcha.

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

    Asegúrese de ejecutar el comando kvm_stat para asegurarse de que no haya muchos contadores.

Citrix ADC VPX with PV network interfaces

Puede configurar las interfaces de red de paso de para-virtualización (PV), SR-IOV y PCIe como dos vNIC por implementación de PNIC . Para obtener más información, consulte Dos vNIC por implementación de PNIC.

Para obtener un rendimiento óptimo de las interfaces fotovoltaicas (virtio), siga estos pasos:

  • Identifique el dominio NUMA al que está vinculada la ranura o NIC PCIe.
  • La memoria y la vCPU del VPX deben estar ancladas al mismo dominio NUMA.
  • El subproceso vhost debe estar enlazado a las CPU del mismo dominio NUMA.

Enlazar los subprocesos del host virtual a las CPU correspondientes:

  1. Una vez iniciado el tráfico, ejecute el comando top en el host.

    Ejecuta el comando top

  2. Identificar el proceso de host virtual (denominado como vhost-&lt;pid-of-qemu&gt;) afinidad.
  3. Enlace los procesos vHost a los núcleos físicos del dominio NUMA identificado anteriormente mediante el siguiente comando:

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

    Ejemplo

      taskset –pc 12 29838
    <!--NeedCopy-->
    
  4. Los núcleos del procesador correspondientes al dominio NUMA se pueden identificar con el siguiente comando:

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

Enlazar el proceso QEMU al núcleo físico correspondiente:

  1. Identificar los núcleos físicos en los que se ejecuta el proceso QEMU. Para obtener más información, consulte el resultado anterior.
  2. Enlace el proceso QEMU a los mismos núcleos físicos a los que vincula las vCPU mediante el siguiente comando:

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

Citrix ADC VPX with SR-IOV and Fortville PCIe passthrough network interfaces

Para obtener un rendimiento óptimo de las interfaces de red de paso SR-IOV y Fortville PCIe, siga estos pasos:

  • Identifique el dominio NUMA al que está vinculada la ranura o NIC PCIe.
  • La memoria y la vCPU del VPX deben estar ancladas al mismo dominio NUMA.

Archivo XML VPX de ejemplo para vCPU y fijación de memoria para 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.

Configuración de rendimiento de Citrix Hypervisors

Busque el dominio NUMA de la NIC mediante el comando “xl”:

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

Anclar vCPU de VPX a núcleos físicos.

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

Compruebe la vinculación de las vCPU.

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

Allocate more than 8 vCPUs to Citrix ADC VMs.

Para configurar más de 8 vCPU, ejecute los siguientes comandos desde la consola de 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 with SR-IOV network interfaces

Para obtener un rendimiento óptimo de las interfaces de red SR-IOV, siga estos pasos:

  • Identifique el dominio NUMA al que está vinculada la ranura PCIe o la NIC.
  • Anclar la memoria y la vCPU del VPX al mismo dominio NUMA.
  • Enlaza la vCPU Domain-0 a la CPU restante.

Citrix ADC VPX with para-virtualized interfaces

Para obtener un rendimiento óptimo, se recomiendan dos vNIC por cada pNIC y una vNIC por cada pNIC, como en otros entornos fotovoltaicos.

Para lograr un rendimiento óptimo de las interfaces para-virtualizadas (netfront), siga estos pasos:

  • Identifique el dominio NUMA al que está vinculada la ranura PCIe o la NIC.
  • Anclar la memoria y la vCPU del VPX al mismo dominio NUMA.
  • Enlazar la vCPU Domain-0 a la CPU restante del mismo dominio NUMA.
  • Anclar subprocesos Rx/Tx del host de vNIC a vCPU de dominio 0.

Anclar subprocesos de host a vCPU Domain-0:

  1. Busque Xen-ID del VPX mediante el comando xl list del shell de host de Citrix Hypervisor.
  2. Identifique los subprocesos de host mediante el siguiente comando:

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

    En el siguiente ejemplo, estos valores indican:

    • vif5.0 - Subprocesos de la primera interfaz asignada a VPX en XenCenter (interfaz de administración).
    • vif5.1 - Los hilos de la segunda interfaz asignados a VPX y así sucesivamente.

    Salida del comando xl list

  3. Anclar los subprocesos a las vCPU Domain-0 mediante el siguiente comando:

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

    Ejemplo

      taskset -pc 1 29189
    <!--NeedCopy-->
    
Optimize Citrix ADC VPX performance on VMware ESX, Linux KVM, and Citrix Hypervisors