4. KVM et VIRTIO

Comme on l'a vu dans la Section 3, « Choix d'une solution de virtualisation », ces bibliothèques permettent à une instance de machine virtualisée d'utiliser des canaux de communications particuliers vers le matériel du système hôte. Parmi ces canaux, on trouve les accès : mémoire, disque, horloge temps réel et réseau.

Identification des modules disponibles

Les modules autorisant l'utilisation de ces bibliothèques dans l'espace utilisateur sont disponibles dans les paquets de noyau Linux. Voici quelques exemples d'identification des fonctions virtio sur un système virtualisé.

On recherche la version du noyau en cours d'exécution.

$ uname -a
Linux vm0 4.14.0-3-amd64 #1 SMP Debian 4.14.13-1 (2018-01-14) x86_64 GNU/Linux

$ aptitude search ~ilinux-image
i A linux-image-4.14.0-3-amd64  - Linux 4.14 pour les ordinateurs 64 bits
i   linux-image-amd64           - Linux pour les ordinateurs 64 bits (métapaquet)

On liste les modules relatifs aux fonctions Virtio à partir de la version du noyau identifiée.

$ find /lib/modules/$(uname -r)/ -type f -name '*virtio*'
/lib/modules/4.14.0-3-amd64/kernel/net/9p/9pnet_virtio.ko
/lib/modules/4.14.0-3-amd64/kernel/net/vmw_vsock/vmw_vsock_virtio_transport.ko
/lib/modules/4.14.0-3-amd64/kernel/net/vmw_vsock/vmw_vsock_virtio_transport_common.ko
/lib/modules/4.14.0-3-amd64/kernel/drivers/net/virtio_net.ko
/lib/modules/4.14.0-3-amd64/kernel/drivers/virtio/virtio_pci.ko
/lib/modules/4.14.0-3-amd64/kernel/drivers/virtio/virtio_balloon.ko
/lib/modules/4.14.0-3-amd64/kernel/drivers/virtio/virtio_input.ko
/lib/modules/4.14.0-3-amd64/kernel/drivers/virtio/virtio_ring.ko
/lib/modules/4.14.0-3-amd64/kernel/drivers/virtio/virtio.ko
/lib/modules/4.14.0-3-amd64/kernel/drivers/gpu/drm/virtio/virtio-gpu.ko
/lib/modules/4.14.0-3-amd64/kernel/drivers/crypto/virtio/virtio_crypto.ko
/lib/modules/4.14.0-3-amd64/kernel/drivers/block/virtio_blk.ko
/lib/modules/4.14.0-3-amd64/kernel/drivers/char/hw_random/virtio-rng.ko
/lib/modules/4.14.0-3-amd64/kernel/drivers/char/virtio_console.ko
/lib/modules/4.14.0-3-amd64/kernel/drivers/scsi/virtio_scsi.ko

Utilisation des bibliothèques VIRTIO

Comme on l'a dit précédemment, ces bibliothèques constituent des canaux de communication avec le matériel du système hôte. Elles ont donc un effet sur la représentation du matériel.

À titre d'exemple, voici la liste des périphériques «visibles» sur le bus PCI d'une instance de système virtuel.

$ lspci
00:00.0 Host bridge: Intel Corporation 82G33/G31/P35/P31 Express DRAM Controller
00:01.0 VGA compatible controller: Red Hat, Inc. QXL paravirtual graphic card (rev 04)
00:02.0 Audio device: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) High Definition Audio Controller (rev 01)
00:03.0 Unclassified device [00ff]: Red Hat, Inc Virtio memory balloon
00:04.0 SCSI storage controller: Red Hat, Inc Virtio block device
00:05.0 Communication controller: Red Hat, Inc Virtio console
00:06.0 Ethernet controller: Red Hat, Inc Virtio network device
00:07.0 System peripheral: Intel Corporation 6300ESB Watchdog Timer
00:1d.0 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 03)
00:1d.1 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 03)
00:1d.2 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 03)
00:1d.7 USB controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 03)
00:1f.0 ISA bridge: Intel Corporation 82801IB (ICH9) LPC Interface Controller (rev 02)
00:1f.2 SATA controller: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode] (rev 02)
00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 02)

Dans la liste ci-dessus, on reconnaît 4 périphériques référencés Virtio dont le gestionnaire mémoire et le contrôleur réseau.

Sur le même système, on peut lister les modules chargés en mémoire relatifs aux bibliothèques.

$ lsmod | grep virtio
virtio_console         32768  0
virtio_balloon         20480  0
virtio_net             49152  0
virtio_blk             20480  3
virtio_pci             28672  0
virtio_ring            28672  5 virtio_blk,virtio_net,virtio_balloon,virtio_console,virtio_pci
virtio                 16384  5 virtio_blk,virtio_net,virtio_balloon,virtio_console,virtio_pci

Cette liste correspond aux fonctionnalités utilisées par le système virtuel relativement au catalogue donné dans la section précédente.