Cómo optimizar el rendimiento de las 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
- Almacenamiento en caché a nivel de host
- Ajuste del sistema de disco del sistema operativo invitado
- Uso del I/O scheduler
Selección del tipo de disco óptimo

- 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.
- 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.
- 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.
- 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.
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.
- 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.
- 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.
- 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.
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.
- Utilice el comando
fdisk -l
oparted
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.
- 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 comandomount -a
para aplicar los cambios.
- 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:
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.tune2fs -i 0 /dev/sda1
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.
- 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.
- Ejecute el comando:
Este comando mostrará una lista de los scheduler disponibles, y el scheduler actual se indicará entre corchetes. Por ejemplo:cat /sys/block/sda/queue/scheduler
noop deadline [cfq]
- Ejecute el comando:
Este comando establecerá el schedulerecho noop > /sys/block/sda/queue/scheduler
noop
para el disco/dev/sda
. Atención: este cambio no se guardará después de reiniciar.
- Cree un archivo
/etc/udev/rules.d/60-scheduler.rules
con el siguiente contenido:
Esta regla udev establecerá el schedulerACTION=="add|change", KERNEL=="sda", ATTR{queue/scheduler}="noop"
noop
para el disco/dev/sda
al iniciar el sistema. Cambiesda
por el nombre de su disco. - Reinicie el sistema o ejecute el comando
udevadm trigger
para aplicar los cambios.