5. Mise en œuvre de 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.

5.1. Identification des modules disponibles

Avec la publication de la version stable de la distribution Debian GNU/Linux baptisée Lenny, ces bibliothèques sont disponibles dans les paquets de noyau. C'est donc dans l'arborescence des modules du paquet que l'on effectue la recherche.

On commence par identifier le paquet de noyau correspondant à la distribution.

$ dpkg -l linux-image* | grep ^ii
ii  linux-image-2.6-amd64       2.6.32+28      Linux 2.6 for 64-bit PCs (meta-package)
ii  linux-image-2.6.32-5-amd64  2.6.32-27      Linux 2.6.32 for 64-bit PCs

En fonction de la version identifiée, on recherche les modules dans son arborescence.

$ find /lib/modules/2.6.32-5-amd64/ -type f -name "*virtio*"
/lib/modules/2.6.32-5-amd64/kernel/net/9p/9pnet_virtio.ko
/lib/modules/2.6.32-5-amd64/kernel/drivers/net/virtio_net.ko
/lib/modules/2.6.32-5-amd64/kernel/drivers/virtio/virtio_pci.ko
/lib/modules/2.6.32-5-amd64/kernel/drivers/virtio/virtio_balloon.ko
/lib/modules/2.6.32-5-amd64/kernel/drivers/virtio/virtio_ring.ko
/lib/modules/2.6.32-5-amd64/kernel/drivers/virtio/virtio.ko
/lib/modules/2.6.32-5-amd64/kernel/drivers/block/virtio_blk.ko
/lib/modules/2.6.32-5-amd64/kernel/drivers/char/hw_random/virtio-rng.ko
/lib/modules/2.6.32-5-amd64/kernel/drivers/char/virtio_console.ko

Lorsque ce noyau est exécuté sur une instance de machine virtuelle, ces modules sont utilisés et améliorent considérablement les performances.

5.2. Utilisation des bibliothèques VIRTIO

Les informations données dans cette section anticipent les résultats présentés dans les suivantes sachant que l'on ne peut caractériser l'utilisation des modules qu'à partir d'une instance de machine virtuelle.

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 émulé au niveau du système virtualisé.

À 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 440FX - 82441FX PMC [Natoma] (rev 02)
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II]
00:01.2 USB Controller: Intel Corporation 82371SB PIIX3 USB [Natoma/Triton II] (rev 01)
00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03)
00:02.0 VGA compatible controller: Cirrus Logic GD 5446
00:03.0 Ethernet controller: Red Hat, Inc Virtio network device
00:04.0 SCSI storage controller: Red Hat, Inc Virtio block device

Dans la liste ci-dessus, on reconnaît trois 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_blk             12775  3 
virtio_net             17496  0 
virtio_pci             13207  0 
virtio_ring            12793  3 virtio_blk,virtio_net,virtio_pci
virtio                 13093  3 virtio_blk,virtio_net,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.