NetScaler VPX

Optimice el rendimiento de NetScaler VPX en VMware ESX, Linux KVM y Citrix Hypervisors

El rendimiento de NetScaler VPX varía considerablemente según el hipervisor, los recursos del sistema asignados y las configuraciones del host. 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.

Instancia de NetScaler VPX en hipervisores VMware ESX

Esta sección contiene detalles sobre las opciones y ajustes configurables y otras sugerencias que le ayudarán a lograr un rendimiento óptimo de la instancia de NetScaler VPX en los hipervisores VMware ESX.

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

NetScaler VPX con interfaces de red E1000

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

Ejemplo de configuración de NetScaler VPX:

Para lograr la implementación que se muestra en la topología de ejemplo anterior, realice la siguiente configuración en la instancia de NetScaler VPX:

  • 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

NetScaler VPX con interfaces de red VMXNET3

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-->
    
  • Para configurar una máquina virtual para que utilice hasta 8 subprocesos de transmisión por vNIC, agregue la siguiente configuración a la configuración de la máquina virtual:

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

    Nota:

    El aumento de los subprocesos de transmisión por vNIC requiere más recursos de CPU (hasta 8) en el host ESX. Asegúrese de que haya suficientes recursos de CPU disponibles antes de realizar la configuración anterior.

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.

Configure la compatibilidad con múltiples colas y RSS en VMware ESX para dispositivos VMXNET3

De forma predeterminada, el dispositivo VMXNET3 solo admite 8 colas Rx y Tx. Cuando el número de vCPU en el VPX supera los 8, el número de colas Rx y Tx configuradas para una interfaz VMXNET3 cambia a 1 de forma predeterminada. Puede configurar hasta 19 colas Rx y Tx para dispositivos VMXNET3 cambiando determinadas configuraciones en ESX. Esta opción aumenta el rendimiento y la distribución uniforme de los paquetes entre las CPU virtuales de la instancia VPX.

Nota:

A partir de la versión 13.1, compilación 48.x de NetScaler, NetScaler VPX admite hasta 19 colas Rx y Tx en dispositivos ESX para VMXNET3.

Requisitos previos:

Para configurar hasta 19 colas Rx y Tx en ESX para dispositivos VMXNET3, asegúrese de que se cumplen los siguientes requisitos previos:

  • La versión de NetScaler VPX es 13.1, compilación 48.X y posterior.
  • NetScaler VPX se configura con una máquina virtual de hardware de versión 17 o posterior, que es compatible con VMware ESX 7.0 y versiones posteriores.

Configure las interfaces VMXNET3 para que admitan más de 8 colas Rx y Tx:

  1. Abra el archivo de configuración de la máquina virtual (.vmx).
  2. Especifique el número de colas Rx y TX configurando ethernetX.maxRxQueues los valores ethernetX.maxTxQueues y (donde X es el número de NIC virtuales que se van a configurar). La cantidad máxima de colas configuradas no debe ser superior a la cantidad de CPU virtuales de la máquina virtual.

    Nota:

    El aumento del número de colas también aumenta la sobrecarga del procesador en el host ESX. Por lo tanto, asegúrese de que haya suficientes recursos de CPU disponibles en el host ESX antes de aumentar las colas. Puede aumentar el número máximo de colas admitidas en situaciones en las que el número de colas se identifique como un obstáculo para el rendimiento. En estas situaciones, recomendamos aumentar el número de colas de forma gradual. Por ejemplo, de 8 a 12, luego a 16, luego a 20, y así sucesivamente. Evalúe el rendimiento en cada configuración, en lugar de aumentarlo directamente hasta el límite máximo.

NetScaler VPX con interfaces de red de transferencia SR-IOV y PCI

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

Instancia NetScaler VPX en la plataforma Linux-KVM

Esta sección contiene detalles sobre las opciones y los ajustes configurables, así como otras sugerencias que le ayudarán a lograr un rendimiento óptimo de la instancia NetScaler VPX en la plataforma Linux-KVM.

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.

    Transfiera cualquier interrupción que se superponga con las PCPUs de NetScaler VPX a las PCPUs no utilizadas:

       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.

NetScaler VPX con interfaces de red fotovoltaica

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

NetScaler VPX con interfaces de red de transferencia SR-IOV y Fortville PCIe

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

Instancia de NetScaler VPX en Citrix Hypervisors

Esta sección contiene detalles de las opciones y ajustes configurables y otras sugerencias que le ayudarán a lograr un rendimiento óptimo de la instancia de NetScaler VPX en 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-->

Asigne más de 8 vCPU a las máquinas virtuales NetScaler.

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

NetScaler VPX con interfaces de red SR-IOV

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.

NetScaler VPX con interfaces paravirtualizadas

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-->
    
Optimice el rendimiento de NetScaler VPX en VMware ESX, Linux KVM y Citrix Hypervisors