Volver

VMWare vSphere: Optimización del rendimiento

Imagen del slider

27 de mayo de 2019

Por Amir BENYEKKOU - Ingeniero de sistemas, Infraestructura virtual en Squad

Este primer artículo trata sobre la optimización del rendimiento del hipervisor vSphere de VMware, concretamente de los componentes de red, almacenamiento, procesador y memoria.
Un segundo artículo se dedicará a la resolución de problemas de estos componentes y su rendimiento asociado mediante la supervisión de diferentes indicadores.
Es necesario tener conocimientos previos sobre los entornos vSphere antes de realizar modificaciones en este rendimiento.
Todas las prácticas recomendadas para optimizar el rendimiento se pueden consultar en la documentación oficial de VMware: https://www.vmware.com/content/dam/digitalmarketing/vmware/en/pdf/techpaper/performance/Perf_Best_Practices_vSphere65.pdf


Técnicas de virtualización

En sus inicios, VMware utilizaba la traducción binaria como técnica de virtualización por software dentro de un hipervisor «desnudo». Esta técnica generaba una sobrecarga en el rendimiento a nivel del procesador del hipervisor.
Con la llegada de la virtualización por hardware en el procesador, el monitor de máquina virtual ya no se ejecuta en el anillo 0 y el sistema operativo invitado en el anillo 1(1): el VMM dispone de un modo privilegiado que le permite capturar las solicitudes del núcleo del sistema operativo invitado, el cual se ejecuta en el anillo 0.

Lo mismo ocurre con la gestión de la memoria (Memory Management Unit): el VMM gestiona la correspondencia entre la memoria de los sistemas operativos invitados y la memoria física. Al principio se utilizaba una técnica de software denominada «Shadow Page Tables», que también generaba una «sobrecarga» a nivel del procesador. La llegada de técnicas gestionadas directamente por el procesador ha mejorado considerablemente el rendimiento.
Hay tantos VMM como máquinas virtuales en un hipervisor: el VMM da acceso a las tecnologías del VMKernel (programador, gestión de memoria, pilas de red y almacenamiento) y gestiona las técnicas de virtualización de cada máquina virtual.

Por lo tanto, un procesador virtual se compone de su conjunto de instrucciones y de la MMU (unidad de gestión de memoria) para formar su modo de ejecución «Monitor Mode» (2).

El modo Monitor se reflejará en la ejecución de cada máquina virtual en el archivo vmware.log de la máquina virtual en un hipervisor de tipo ESXi; para ello, busca la palabra clave «MONITOR MODE»:

  • BT: Traducción binaria y tablas de páginas en la sombra (virtualización de CPU y memoria por software)
  • HV: Virtualización de hardware y SPT (virtualización de hardware de la CPU, virtualización de software de la memoria)
  • HWMMU: Virtualización de hardware para CPU y memoria

Dependiendo del modo que se utilice, esto tendrá un impacto directo en el rendimiento (https://kb.vmware.com/s/article/1036775)


Optimización del rendimiento del componente de red

Un vSwitch es un conmutador virtual que actúa como pasarela entre las vNIC (interfaces de red virtuales) de las máquinas virtuales y las NIC (interfaces de red físicas) de un hipervisor ESXi.

En un entorno vSphere y en función del tipo de licencia utilizada en los hipervisores ESXi, se pueden emplear dos tipos de conmutadores virtuales: el vSwitch estándar o el Distributed vSwitch (DVS). Los DVS solo están disponibles cuando se utiliza una licencia Enterprise en un vCenter (sistema de gestión centralizada de VMware). La configuración de un DVS se distribuye entre todos los hipervisores ESXi y se realiza directamente desde el vCenter, mientras que la configuración de un vSwitch estándar debe realizarse en cada hipervisor ESXi.

Un DVS ofrece funciones adicionales con respecto a un vSwitch estándar:

  • No se produce ninguna pérdida de conectividad en una máquina virtual durante un vMotion (migración de una máquina virtual de un hipervisor a otro)
  • El «control plane» es gestionado por vCenter y el «IO Plane» por los hipervisores ESXi
  • El «Load Balancing» de las tarjetas de red físicas de los hipervisores se basa en la carga de E/S de red y en LACP
  • Control del tráfico entrante y saliente (el tráfico saliente es compatible con el vSwitch estándar)
  • VLAN privadas para segmentar una red de nivel 2 (ideales en una DMZ o en una red de alojamiento compuesta por direcciones IP públicas)
  • Resolución de problemas de red mediante el mirroring de puertos, o la supervisión de puertos y NetFlow
  • Solución de problemas de DVS con HealthCheck en caso de errores de configuración
  • Copia de seguridad y restauración de los DVS
  • Control de E/S de red para asignar reservas, límites, ancho de banda y reparto a cada tipo de flujo en los ESXi y las máquinas virtuales

Por lo tanto, a la hora de diseñar o desarrollar un entorno vSphere complejo y de gran envergadura, será preferible utilizar DVS (https://kb.vmware.com/s/article/1010555)

En una máquina virtual se pueden utilizar varios tipos de vNIC:

  • Vlance, E1000 y E1000e: controladores emulados
  • VMXNET, VMXNET2, VMXNET3: controladores para-virtualizados

Por lo tanto, conviene asegurarse de que se utilice el tipo VMXNET3 junto con una instalación de vmtools en la máquina virtual para garantizar el máximo rendimiento y disponer de las últimas funciones disponibles (3).

Cabe destacar, en particular, la descarga de segmentación TCP (TSO), que permite reducir la «sobrecarga» del procesador (esto debe activarse manualmente en las máquinas virtuales), los Jumbo Frames, que permiten utilizar tramas con un MTU de 9000 (montaje de sistemas de archivos NFS en una máquina virtual en una red de almacenamiento dedicada), y el uso de tarjetas de 10G en las máquinas virtuales.


Optimización del rendimiento del almacenamiento

En un entorno vSphere se pueden utilizar matrices de almacenamiento basadas en protocolos de tipo SAN (FC, FCoE e iSCSI) o NAS (NFS/CIFS).

La elección del tipo de protocolo, la configuración del almacenamiento, el equilibrio de carga, la gestión y la profundidad de las colas, la configuración de VMFS y el tipo de discos duros virtuales influirán en el rendimiento de las cargas de trabajo.

A continuación se enumeran varias medidas que pueden mejorar el rendimiento del almacenamiento. En un entorno SAN/NAS, el nivel RAID debe ajustarse a las expectativas de rendimiento de las cargas de trabajo y deben aplicarse las buenas prácticas de multipathing(4):

  • Para un rack activo/pasivo: «Most Recently Used» (MRU)
  • Para un rack activo/activo: Fijo

Siempre que sea posible, se deben utilizar los complementos del fabricante del rack, si están disponibles (PSP: Path Selection Plugins)

La profundidad de la cola de las tarjetas HBA, del VMKernel y de los LUN (en el lado del array) se ajustará si el número de comandos en un momento dado provoca latencia en las operaciones SCSI.

El uso de los protocolos iSCSI o NFS requiere asegurarse de que la red Ethernet subyacente no esté saturada y disponer de una red dedicada. También se recomienda separar el tráfico de almacenamiento del tráfico de las máquinas virtuales.

En el caso de las máquinas virtuales, la elección del tipo de disco influirá en el rendimiento:

  • Asignación completa: asignación y formateo completos durante la inicialización, con un mejor rendimiento
  • Asignación dinámica: asignación y formateo bajo demanda durante la inicialización, con un rendimiento menor.

Con el fin de controlar mejor el rendimiento, los fabricantes ofrecen diferentes API, como vSphere Storage API Array Integration (VAAI) para acelerar las operaciones de E/S, así como vSphere API for Storage Awareness (VASA), que aportan las siguientes funcionalidades:

  • Reducción de la sobrecarga de la CPU de los ESXi en las operaciones de almacenamiento al asignarlas a la matriz en un entorno SAN/NAS
  • Integración de la topología, la capacidad y el estado de los armarios de almacenamiento

Además de estos componentes, vSphere ofrece la posibilidad de configurar políticas de almacenamiento para ubicar las máquinas virtuales en un almacenamiento adecuado a la carga de trabajo, utilizar clústeres de datastores para distribuir la carga de E/S o incluso vSphere IO Control para aplicar calidad de servicio (QoS) a las operaciones de E/S de las máquinas virtuales (solo en iSCSI y Fibre Channel).


Optimización del rendimiento del procesador

El programador de la CPU en los hipervisores ESXi se encarga de distribuir la carga de las vCPU (procesadores virtuales) entre las pCPU (procesadores físicos), así como de programar la ejecución de los contextos de ejecución. Una máquina virtual es un conjunto de entornos: uno para cada vCPU, uno para el VMM, uno para el teclado, etc.

Cuando se asignan demasiadas vCPU en relación con las pCPU, se asigna un tiempo proporcional a cada vCPU en función de los recursos compartidos, los límites y las reservas configurados en las máquinas virtuales.

Hay varios factores que pueden afectar al rendimiento de la CPU:

  • Las máquinas virtuales «inactivas»: generan una «sobrecarga» debido a las solicitudes de interrupción de las máquinas virtuales
  • Afinidad de CPU: consiste en asignar directamente vCPU a pCPU, lo que puede provocar un desequilibrio en la carga de la CPU
  • Máquinas virtuales SMP: se recomienda utilizar kernels SMP en lugar de kernels de un solo procesador
  • Asignación de vCPU: asignar el menor número posible de vCPU a una máquina virtual para reducir la carga de planificación del programador de la CPU
  • NUMA en sistemas con múltiples sockets: asignar memoria o vCPU a una máquina virtual más allá de las capacidades de un nodo NUMA puede provocar una caída significativa del rendimiento en una carga de trabajo.

Un indicador de alerta, el «Ready Time», muestra el tiempo de espera de una vCPU para obtener ciclos de procesador en el hipervisor ESXi; si este valor aumenta, significa que las vCPU de las máquinas virtuales del hipervisor están en conflicto.


Optimización del rendimiento de la memoria

La asignación de memoria física a una máquina virtual siempre la realiza sobre la marcha el hipervisor ESXi. Este no tiene acceso al contenido de la memoria física de la máquina virtual y no tiene conocimiento de la liberación de memoria que realiza la máquina ni de su contenido.

Existen varias técnicas de optimización y recuperación de memoria (5) [llevadas a cabo por el hipervisor cuando la memoria se satura o cuando la asignación de memoria a las máquinas virtuales supera la capacidad de memoria del hipervisor].

 Las siguientes técnicas se aplican en este orden para liberar memoria:

  • Compartir páginas transparentes: permite compartir páginas de memoria comunes entre varias máquinas virtuales (desactivado por defecto)
  • Ballooning: un controlador especializado utilizado por vmtools solicitará al sistema operativo invitado que libere memoria inactiva o libre para que el hipervisor pueda recuperar memoria
  • Compresión de memoria: solo se activa si hay una sobreasignación de RAM. Las páginas de memoria que puedan ser intercambiadas se comprimirán directamente en memoria, y solo si la tasa de compresión es superior al 50 %.
  • Intercambio de memoria: el hipervisor crea un archivo de intercambio fuera de la máquina virtual durante su inicialización y permite intercambiar memoria (activa/inactiva) de forma aleatoria

Fuentes

(1): «Understanding Full Virtualization, Paravirtualization, and Hardware Assist» (Comprender la virtualización completa, la paravirtualización y la asistencia por hardware) - Libro blanco de
(2): «Software and Hardware Techniques for x86 Virtualization» (Técnicas de software y hardware para la virtualización x86 ) - Guía informativa de VMware
(3): Evaluación del rendimiento del dispositivo de red virtual VMXNET3 - Estudio de rendimiento de VMware
(4): Descripción de la multipath y la conmutación por error - Preguntas frecuentes de VMware Docs
(5): Descripción de la gestión de recursos de memoria en VMware® ESX™ Server - Libro blanco