QEMU-KVM: virtio vs SCSI vs IDE

Una de las optimizaciones más importantes en cuanto a almacenamiento en QEMU-KVM es decidir el driver que vamos a utilizar para los discos duros de nuestro servidor simulado. Normalmente será VirtIO, pero, como veréis más adelante, no siempre es la mejor opción.

En las primeras versiones, tan solo existía IDE, luego añadieron SCSI, y más adelante, cuando observaron que simular de manera demasiado exacta esos protocolos hacía que no aprovechasen tanto los sistemas, inventaron VirtIO, que es una serie de módulos propios con mucha más velocidad de entrada/salida en máquinas virtuales con QEMU-KVM.

¿Qué ofrece cada uno?

  • IDE: ¿Recordáis cuando en vuestro PC casero teníais dos cables como cintas conectadas a la placa base y podíais colocar tan solo 4 dispositivos? Pues en QEMU el modo IDE hace exactamente lo mismo, de manera que se utiliza principalmente para colocar los lectores de CDROM. Los dispositivos con IDE se llaman /dev/hda, /dev/hdb, etc..
  • SCSI: Aquí el número de dispositivos aumenta, al igual que el rendimiento. Es una simulación casi completa de SCSI, lo cual tiene sus ventajas e inconvenientes. Los dispositivos con SCSI se llamarán /dev/sda, sdb, sdc…
  • VirtIO: Los dispositivos serán /dev/vda, vdb, vdc, y tendrán mayor rendimiento que los otros dos protocolos, y un uso menor de CPU (por mega transferido).

¿Cuánto es más rápido uno que el otro?

Si con IDE obtienes 512 MB/s de transferencia, con SCSI obtendrás 700-800 MB/s y con Virtio 1.2 GB/s. La regla suele ser más o menos esa, pero depende de la versión de kernel que se esté utilizando tanto en el hypervisor como en el servidor virtual y de los sistemas de almacenamiento utilizados.

Hay algunas webs que ofrecen benchmarks bastante antiguos ya:

https://www.ibm.com/support/knowledgecenter/linuxonibm/liaat/liaatbpperfmods.htm

Realmente no merece la pena ni mirarlos porque esos resultados han quedado desactualizados. En otro post comentaremos cómo hacer pruebas de carga decentes para obtener el mejor rendimiento de nuestro sistema y poder irlo comparando de unos entornos a otros.

RedBooks de IBM

La mejor documentación respecto a esto la proporciona IBM en sus RedBooks.

https://www.ibm.com/support/knowledgecenter/linuxonibm/liaat/liaatbestpractices_pdf.pdf

Y es lo que recomiendo leer si se quiere exprimir al máximo los diferentes sistemas.

 

Trim y comandos SCSI

Aunque esos libros estén realmente bien esto se explica en poco sitios, y es algo a tener REALMENTE en cuenta antes de tomar la decisión de cual sistema de almacenamiento utilizar.

VirtIO no soporta TRIM ni los comandos necesarios para hacer que, si eliminas un bloque de datos en el disco duro del servidor virtual, este cambio llegue exacto al sistema de almacenamiento que hay por debajo de todo, y se liberen los bloques no utilizados.

Es decir, imaginad que hemos comprado SSD último modelo y creamos dentro de este SSD una imagen de disco duro con un “truncate -s” o con un “LVM” en modo de thin provisioning. Si desde la VM escribimos un sector, luego escribimos más a posteriori después de ese, y luego borramos el sector del medio, el sistema de almacenamiento del hypervisor creerá que ese sector sigue ocupado, y no lo liberará.

La manera de corregir esto es utilizar SCSI. Pero a costa de perder rendimiento ( y mucho).

Si se utiliza VirtIO, por mucho que hagáis “fstrim” en vuestro sistema operativo, eso no se traducirá en liberación de espacio. De hecho, probablemente os salte un error comentando que no está soportado ese comando.

Para activar esta funcionalidad en SCSI se utiliza el valor “discard=unmap” en las opciones del disco duro, ya sea en el comando de qemu-KVM o  en el XML de definición del servidor en libvirt.

 

VirtIO en Windows

Los drivers de VirtIO para servidores virtuales con sistema operativo Windows se pueden conseguir en la web de Fedora:

https://fedoraproject.org/wiki/Windows_Virtio_Drivers

O bien en la web de Oracle:

http://www.oracle.com/us/technologies/virtualization/virtualilzation-066470.html

Cabe destacar que no siempre tener instalada la última versión significa tener, ni más rendimiento, ni más estabilidad. Yo he hecho pruebas de carga sobre diferentes versiones y con algunas obtenía resultados sorprendentes.

Suelo utilizar una suite de pruebas gratuita muy fácil de instalar llamada CrystalDiskMark para asegurarme que la versión que utilizo es la mejor.

http://crystalmark.info/download/index-e.html

 

 

Leave a Comment

Your email address will not be published. Required fields are marked *