virtio

sáb 07 noviembre 2020

Virtio ofrece los denominados dispositivos paravirtualizados para procesos de E/S, que permiten el acceso privilegiado a recursos del anfitrión. Los dispositivos virtio más habituales son utilizados para dispositivos de bloque, interfaces de red, memory balloning y generadores de números aleatorios.

La inclusión de dispositivos virtio permite que el sistema de virtualización KVM compita en rendimiento con sistemas paravirtualizados.

Es necesario que el kérnel del sistema operativo del huésped incluya soporte para estos dispositivos paravirtualizados, en el caso del kérnel linux este soporte se realiza a través de los siguientes componentes:

CONFIG_BLK_MQ_VIRTIO
CONFIG_VIRTIO_VSOCKETS
CONFIG_VIRTIO_VSOCKETS_COMMON
CONFIG_NET_9P_VIRTIO
CONFIG_VIRTIO_BLK
CONFIG_SCSI_VIRTIO
CONFIG_VIRTIO_NET
CONFIG_VIRTIO_CONSOLE
CONFIG_HW_RANDOM_VIRTIO
CONFIG_DRM_VIRTIO_GPU
CONFIG_VIRTIO
CONFIG_VIRTIO_MENU
CONFIG_VIRTIO_PCI
CONFIG_VIRTIO_PCI_LEGACY
CONFIG_VIRTIO_PMEM
CONFIG_VIRTIO_BALLOON
CONFIG_VIRTIO_MEM
CONFIG_VIRTIO_INPUT
CONFIG_VIRTIO_MMIO
CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES
CONFIG_RPMSG_VIRTIO
CONFIG_VIRTIO_FS
CONFIG_CRYPTO_DEV_VIRTIO

Dispositivos virtio en Windows

El sistema operativo Windows no ofrece soporte nativo para dispositivos virtio (a pesar de que Microsoft ama a Linux), pero el proyecto virtio-win que es ajeno a Microsoft, proporciona controladores para estos dispositivos.

El proyecto Fedora ofrece una ISO-9660 para poder agregar estos controladores de forma sencilla durante la instalación de una máquina virtual con Windows: virtion-win.iso.

Dispositivos de bloque

En lugar de emular un dispositivo IDE o SATA, es mucho más eficiente utilizar un dispositivo virtio para los dispositivos de bloque, por ejemplo:

<disk type='file' device='disk'>
  <driver name='qemu' type='qcow2'/>
  <source file='disco.qcow2'/>
  <target dev='vda' bus='virtio'/>
</disk>

Dispositivos de red

Es posible emular dispositivos de red Fast-Ethernet (rtl-8139) o Gigabit Ethernet (e1000), pero se consigue un rendimiento mucho mayor con dispositivos de red virtio:

<interface type='bridge'>
  <mac address='52:54:00:5c:55:0b'/>
  <source bridge='br0'/>
  <model type='virtio'/>
</interface>

Memory Balloning

Mecanismo que permite modificar al vuelo la cantidad de memoria que se proporciona a la máquina virtual en función de las necesidades del anfitrión (como si de un globo que se infla o desinfla se tratase, de ahí el nombre).

El dispositivo no necesita parámetros adicionales:

<memballoon model='virtio'>
</memballoon>

Dispositivo de números aleatorios

La generación de números aleatorios es un problema habitual en las máquinas virtuales, que carecen inicialmente de dispositivos físicos que los proporcionen, como sí tienen las máquinas físicas a través de dispositivos específicos en sus placas base. Virtio permite la utilización de estos dispositivos en máquinass virtuales, evitando tener que usar otras soluciones de software menos eficaces.

rng: Random Number Generator

<rng model='virtio'>
  <backend model='random'>/dev/urandom</backend>
</rng>