Cómo optimizar el rendimiento de las Máquinas Virtuales" class="internal-post-link">máquinas virtuales: Enfoque en el subsistema de disco

Las máquinas virtuales (VM) se han convertido en una parte integral de la infraestructura de TI moderna. Sin embargo, no basta con desplegar una VM, sino que es fundamental garantizar su rendimiento óptimo. Este artículo está dedicado a la optimización del subsistema de disco de las máquinas virtuales, ya que a menudo se convierte en un cuello de botella que afecta la velocidad de las aplicaciones. Consideraremos varios métodos y herramientas que permiten utilizar los recursos de disco de la manera más eficiente posible y mejorar la capacidad de respuesta de sus VM.

Índice

Selección del tipo de disco óptimo

¿Cómo optimizar el rendimiento de las máquinas virtuales? - Ilustración que muestra diferentes tipos de almacenamiento - SSD, HDD, NVMe - y sus casos de uso típicos para máquinas virtuales.
La elección del tipo de disco para una máquina virtual tiene un gran impacto en su rendimiento. Los discos duros tradicionales (HDD) tienen una velocidad de acceso y transferencia de datos más baja en comparación con las unidades de estado sólido (SSD) y las unidades NVMe. En la mayoría de los casos, cambiar a discos SSD o NVMe mejorará significativamente el rendimiento de la VM, especialmente para tareas que utilizan intensivamente la entrada/salida de disco (I/O).

Tipos de discos y sus aplicaciones:

  • HDD (Hard Disk Drive): Adecuados para almacenar grandes volúmenes de datos donde la velocidad de acceso no es crítica. Ejemplos: archivos, copias de seguridad, servidores de archivos con baja carga. No recomendado para bases de datos, máquinas virtuales que realizan operaciones intensivas de lectura/escritura.
  • SSD (Solid State Drive): Significativamente más rápidos que los HDD, proporcionan baja latencia y alta velocidad de I/O. Recomendados para la mayoría de las máquinas virtuales, bases de datos, servidores web donde se requiere un alto rendimiento.
  • NVMe (Non-Volatile Memory express): El tipo de almacenamiento más rápido, utiliza la interfaz PCI Express, que proporciona el máximo ancho de banda y la mínima latencia. Recomendados para aplicaciones de misión crítica que requieren un alto rendimiento del subsistema de disco, como bases de datos de alta carga, aplicaciones en tiempo real, virtualización con un gran número de VM activas.
Formatos de discos virtuales:
VPS Hosting

Servidores virtuales con recursos garantizados

Elegir VPS

  • Thick Provisioning: Al crear un disco virtual, se asigna inmediatamente todo el espacio reservado en el almacenamiento físico. Proporciona un rendimiento predecible, ya que no es necesario asignar espacio dinámicamente durante el funcionamiento de la VM.
  • Thin Provisioning: Un disco virtual solo ocupa el espacio en el almacenamiento físico que se utiliza realmente. Permite ahorrar espacio en el disco, pero puede provocar una disminución del rendimiento si se requiere una expansión dinámica del disco durante el funcionamiento de la VM. Se recomienda utilizar con precaución, supervisando la ocupación del almacenamiento físico.
Optimización de la selección de disco en el ejemplo de VMware vSphere En VMware vSphere, al crear un disco virtual, se le ofrece la opción de elegir entre Thick Provisioning y Thin Provisioning, así como la posibilidad de seleccionar el tipo de almacenamiento (Datastore), que puede estar ubicado en varios tipos de discos físicos (HDD, SSD, NVMe).

Ejemplo: Creación de un disco virtual con Thick Provisioning en vSphere:

  • En vSphere Web Client, vaya a la máquina virtual.
  • Haga clic en «Edit Settings».
  • En la sección «Virtual Hardware», seleccione «Add New Device» -> «Hard Disk».
  • Especifique el tamaño del disco.
  • En la sección «Virtual Disk Provisioning», seleccione «Thick Provision Eager Zeroed» o «Thick Provision Lazy Zeroed». «Eager Zeroed» formatea todo el disco de inmediato, lo que lleva más tiempo al crear, pero proporciona un mayor rendimiento en el futuro. «Lazy Zeroed» formatea el disco según sea necesario.
  • Seleccione Datastore, ubicado en SSD o NVMe para obtener el máximo rendimiento.
  • Guarde los cambios.
Ejemplo: Supervisión del rendimiento del disco en vSphere:

  • En vSphere Web Client, vaya a la máquina virtual.
  • Vaya a la pestaña «Monitor» -> «Performance».
  • Seleccione «Disk» de la lista desplegable «Chart Options».
  • Puede supervisar métricas como «Disk Latency», «Disk Read Rate», «Disk Write Rate» para evaluar el rendimiento del subsistema de disco e identificar posibles problemas. Una alta latencia generalmente indica una sobrecarga del disco o un tipo de disco no lo suficientemente rápido.
Ejemplo: Cambio del tipo de almacenamiento (Datastore) para una máquina virtual: Si su máquina virtual utiliza un almacenamiento ubicado en un HDD, puede migrarla a un almacenamiento ubicado en un SSD para mejorar el rendimiento. Para ello, puede utilizar vMotion (si es posible) o la migración de almacenamiento (Storage vMotion).

Importante: Al elegir el tipo de disco y el formato del disco virtual, tenga en cuenta los requisitos de rendimiento de la máquina virtual específica y los recursos disponibles. Una planificación y supervisión cuidadosas le permitirán elegir la configuración óptima y evitar problemas de rendimiento en el futuro.

Almacenamiento en caché a nivel de host

¿Cómo optimizar el rendimiento de las máquinas virtuales? - Diagrama que muestra cómo funciona el almacenamiento en caché a nivel de host, con el flujo de datos desde la VM a la caché del host hasta el almacenamiento.
El almacenamiento en caché a nivel de host (host-level caching) es un mecanismo que permite utilizar la memoria de acceso aleatorio (RAM) o las unidades de estado sólido (SSD) del servidor host como caché para las operaciones de disco de las máquinas virtuales. Esto permite acelerar significativamente el acceso a los datos de uso frecuente y reducir las latencias asociadas con la lectura y escritura en los discos físicos. El almacenamiento en caché eficaz puede mejorar significativamente el rendimiento de la VM, especialmente para las aplicaciones que trabajan intensivamente con datos.

Ventajas del almacenamiento en caché a nivel de host:

  • Reducción de las latencias: El almacenamiento en caché de datos en la memoria de acceso aleatorio o en un SSD reduce significativamente el tiempo de acceso a los datos en comparación con los discos duros tradicionales.
  • Aumento del ancho de banda: El almacenamiento en caché permite procesar un mayor número de solicitudes de lectura y escritura, lo que aumenta el ancho de banda total del subsistema de disco.
  • Reducción de la carga en los discos: El almacenamiento en caché reduce el número de operaciones de lectura y escritura en los discos físicos, lo que prolonga su vida útil y reduce la probabilidad de que se produzcan cuellos de botella.
Tecnologías de almacenamiento en caché a nivel de host:

  • VMware vSphere Flash Read Cache (vFRC): Utiliza el SSD del servidor host para almacenar en caché las operaciones de lectura de las máquinas virtuales.
  • Microsoft Hyper-V Cache: Permite utilizar la memoria de acceso aleatorio del servidor host para almacenar en caché las operaciones de disco de las máquinas virtuales.
  • Linux Cache: El sistema operativo Linux utiliza la memoria de acceso aleatorio para almacenar en caché las operaciones de disco.
Configuración del almacenamiento en caché en el ejemplo de VMware vSphere Flash Read Cache (vFRC) vFRC permite utilizar los discos SSD locales del servidor host para almacenar en caché las operaciones de lectura de las máquinas virtuales, lo que mejora significativamente el rendimiento de las aplicaciones que utilizan intensivamente la lectura de datos.

Ejemplo: Activación y configuración de vFRC para una máquina virtual:

  • En vSphere Web Client, vaya a la máquina virtual.
  • Haga clic en «Edit Settings».
  • En la sección «Virtual Hardware», seleccione el disco virtual para el que desea activar vFRC.
  • Expanda la sección «Disk Cache Configuration».
  • Marque la casilla «Virtual Flash Read Cache».
  • Especifique el tamaño de la caché (en MB o GB). El tamaño de la caché depende de la cantidad de memoria de acceso aleatorio y SSD disponibles en el servidor host, así como de los requisitos de rendimiento de la máquina virtual. Se recomienda asignar suficiente espacio para los datos de uso frecuente.
  • Guarde los cambios.
Ejemplo: Supervisión del rendimiento de vFRC:

  • En vSphere Web Client, vaya a la máquina virtual.
  • Vaya a la pestaña «Monitor» -> «Performance».
  • Seleccione «Disk» de la lista desplegable «Chart Options».
  • Supervise métricas como «vFlash Read Cache Hit Rate» y «vFlash Read Cache Read Latency» para evaluar la eficacia del almacenamiento en caché. Un alto porcentaje de aciertos en la caché (Hit Rate) y una baja latencia de lectura indican que el almacenamiento en caché funciona de manera eficaz.
Ejemplo: Limpieza de vFRC: En algunos casos, puede ser necesario limpiar la caché de vFRC, por ejemplo, después de cambiar la configuración de la máquina virtual o para solucionar problemas de rendimiento. Para ello, puede reiniciar la máquina virtual o utilizar el comando ESXi Shell:

esxcli storage vflash cache reset -v <vm_name>
Importante: Al configurar el almacenamiento en caché a nivel de host, es necesario tener en cuenta la cantidad de memoria de acceso aleatorio y SSD disponibles en el servidor host, así como los requisitos de rendimiento de las máquinas virtuales. Una configuración incorrecta del almacenamiento en caché puede provocar una disminución del rendimiento. La supervisión y el análisis periódicos del rendimiento le ayudarán a optimizar los parámetros de almacenamiento en caché y a lograr la máxima eficacia. Además, asegúrese de que el hipervisor que está utilizando admite la función de almacenamiento en caché y de que la compatibilidad está configurada correctamente.

Ajuste del sistema de disco del sistema operativo invitado

Ajustar el sistema de disco del sistema operativo (SO) invitado es un paso importante para optimizar el rendimiento de una máquina virtual. Una configuración correcta de los parámetros del subsistema de disco dentro del SO invitado puede mejorar significativamente la velocidad de lectura y escritura de datos, así como reducir las latencias. Este proceso incluye la optimización del sistema de archivos, la configuración de los parámetros del disco y el uso de herramientas especiales para mejorar el rendimiento.

Aspectos principales del ajuste del sistema de disco del SO invitado:

  • Alineación de particiones: La alineación correcta de las particiones (partition alignment) garantiza que las operaciones de lectura y escritura se realicen de manera eficiente, sin necesidad de leer datos ubicados en los límites de los bloques físicos del disco. Una alineación incorrecta puede provocar una disminución significativa del rendimiento, especialmente en los discos SSD.
  • Selección del sistema de archivos: Los diferentes sistemas de archivos tienen diferentes características y son adecuados para diferentes tipos de tareas. Por ejemplo, XFS y ext4 son sistemas de archivos populares para Linux, y NTFS lo es para Windows. La elección del sistema de archivos correcto puede influir significativamente en el rendimiento del subsistema de disco.
  • Configuración de los parámetros del sistema de archivos: Los sistemas de archivos tienen muchos parámetros que se pueden configurar para optimizar el rendimiento. Por ejemplo, se puede cambiar el tamaño del bloque, activar o desactivar el registro y configurar los parámetros de almacenamiento en caché.
  • Desfragmentación del disco: (solo para sistemas de archivos que requieren desfragmentación, por ejemplo, NTFS) La desfragmentación del disco permite organizar los archivos en el disco para que estén ubicados de forma secuencial. Esto reduce el tiempo de acceso a los archivos y mejora el rendimiento general del subsistema de disco.
Ajuste del sistema de disco en el ejemplo de Linux (ext4) ext4 es un sistema de archivos común en Linux, que ofrece muchos parámetros para optimizar el rendimiento.

Ejemplo: Comprobación y corrección de la alineación de particiones:

  • Utilice el comando fdisk -l o parted para ver información sobre las particiones del disco y asegurarse de que están alineadas con los límites de los bloques físicos del disco. Por ejemplo:
    fdisk -l /dev/sda
  • Si las particiones no están alineadas, puede utilizar parted para volver a crearlas con la alineación correcta. Atención: volver a crear particiones provocará la pérdida de datos, por lo que primero debe hacer una copia de seguridad.
Ejemplo: Montaje del sistema de archivos ext4 con opciones de optimización:

  • Al montar el sistema de archivos ext4, puede utilizar varias opciones para optimizar el rendimiento. Por ejemplo, puede utilizar la opción noatime para desactivar la actualización de la hora de acceso a los archivos, lo que reducirá el número de operaciones de escritura en el disco.
  • Edite el archivo /etc/fstab y añada las opciones de montaje. Por ejemplo:
    /dev/sda1 /mnt/data ext4 defaults,noatime 0 0
  • Después de editar el archivo /etc/fstab, ejecute el comando mount -a para aplicar los cambios.
Ejemplo: Configuración de los parámetros del sistema de archivos con tune2fs:

  • La utilidad tune2fs permite configurar varios parámetros del sistema de archivos ext4. Por ejemplo, se puede cambiar el intervalo de comprobación del sistema de archivos:
    tune2fs -i 0 /dev/sda1
    Este comando desactiva la comprobación periódica del sistema de archivos, lo que puede mejorar el rendimiento, pero aumenta el riesgo de que el sistema de archivos se dañe en caso de fallo. Se recomienda utilizar con precaución.
Importante: Al ajustar el sistema de disco del SO invitado, es necesario tener en cuenta las características del sistema de archivos y la aplicación que se utilizan. Una configuración incorrecta de los parámetros puede provocar una disminución del rendimiento o incluso dañar el sistema de archivos. Antes de realizar cambios, se recomienda hacer una copia de seguridad de los datos y estudiar detenidamente la documentación. Además, asegúrese de que en el SO invitado estén instaladas las últimas versiones de los controladores de los dispositivos virtuales (por ejemplo, VMware Tools o Hyper-V Integration Services) para garantizar un rendimiento óptimo.

Uso del I/O scheduler

El I/O scheduler (planificador de entrada/salida) es un componente del sistema operativo que gestiona el orden de procesamiento de las solicitudes de lectura y escritura de datos en el disco. La selección y configuración del I/O scheduler puede influir significativamente en el rendimiento del subsistema de disco de una máquina virtual, especialmente cuando hay una carga alta. Los diferentes I/O scheduler tienen diferentes algoritmos de planificación y son adecuados para diferentes tipos de tareas.

Tipos principales de I/O scheduler:

  • CFQ (Completely Fair Queuing): Intenta garantizar una distribución justa de los recursos del subsistema de disco entre los procesos. Adecuado para la mayoría de los escenarios, especialmente cuando se están ejecutando varias tareas simultáneamente en la máquina virtual.
  • Noop (No Operation): El scheduler más sencillo, que simplemente transmite las solicitudes al disco en el orden en que se reciben. Adecuado para su uso con discos SSD, donde la latencia de búsqueda de datos es mínima.
  • Deadline: Intenta completar las solicitudes dentro de un tiempo determinado (deadline). Adecuado para aplicaciones que requieren baja latencia, como bases de datos y aplicaciones en tiempo real.
  • Kyber: Un planificador mejorado diseñado para las modernas unidades de estado sólido.
Selección del I/O scheduler para máquinas virtuales:

  • Para las máquinas virtuales que trabajan con discos SSD, se recomienda utilizar el scheduler Noop o Kyber.
  • Para las máquinas virtuales que trabajan con discos HDD y ejecutan varias tareas simultáneamente, se recomienda utilizar el scheduler CFQ.
  • Para las máquinas virtuales que requieren baja latencia, se recomienda utilizar el scheduler Deadline.
Configuración del I/O scheduler en el ejemplo de Linux En Linux, puede cambiar el I/O scheduler para cada disco.

Ejemplo: Visualización del I/O scheduler actual para un disco:

  • Ejecute el comando:
    cat /sys/block/sda/queue/scheduler
    Este comando mostrará una lista de los scheduler disponibles, y el scheduler actual se indicará entre corchetes. Por ejemplo: noop deadline [cfq]
Ejemplo: Cambio del I/O scheduler para un disco:

  • Ejecute el comando:
    echo noop > /sys/block/sda/queue/scheduler
    Este comando establecerá el scheduler noop para el disco /dev/sda. Atención: este cambio no se guardará después de reiniciar.
Ejemplo: Cambio del I/O scheduler para un disco de forma permanente (systemd):

  • Cree un archivo /etc/udev/rules.d/60-scheduler.rules con el siguiente contenido:
    ACTION=="add|change", KERNEL=="sda", ATTR{queue/scheduler}="noop"
    Esta regla udev establecerá el scheduler noop para el disco /dev/sda al iniciar el sistema. Cambie sda por el nombre de su disco.
  • Reinicie el sistema o ejecute el comando udevadm trigger para aplicar los cambios.
Importante: Al seleccionar y configurar el I/O scheduler, es necesario tener en cuenta las características del subsistema de disco y la aplicación que se están utilizando. Una selección incorrecta del scheduler puede provocar una disminución del rendimiento. Antes de realizar cambios, se recomienda probar diferentes scheduler y elegir la opción óptima para su configuración. Además, consulte la documentación de su sistema operativo e hipervisor para obtener más información sobre la configuración del I/O scheduler.