PCI passthrough, VirtIO, késako ?

Petit cours de vulgarisation sur le PCI Passthrough et les pilotes de para*-virtualisation VirtIO.

PCI passthrough, VirtIO, késako ?
pcipassthrough passthrough pci virtio vulgarisation

Au sommaire

  • 1-Qu'est-ce que VirtIO ?
  • 2-Qu'est-ce que le PCI passthrough ?

1-Qu'est-ce que VirtIO ?

Les pilotes VirtIO (Virtual Input Output) ont été conçus par la société Red Hat et sont les équivalents des "vm-tools" chez VMware.

Avant toute chose, il faut savoir que vous avez deux type d'état dans une solution de virtualisation.

Virtualisation complète

Lorsque vous créez une machine virtuelle, le système invité (guest OS) n'a pas conscience d'être virtualisé, il ne vois pas l'hyperviseur sous-jacent.

L'hyperviseur est un module du noyau (Linux ou Windows) qui a accès au matériel via les instructions de virtualisation assisté par le matériel inclus dans les processeurs (Intel-vt-x/AMD-V) donc si la machine virtuelle ne vois pas l'hyperviseur, cela veut dire aussi qu'il n'a pas un accès direct au matériel.

On considère donc qu'il est en état de "full virtualization" (virtualisation complète). La virtualisation complète ne demande aucune modification du système, ce qui permet une meilleure portabilité, d'émuler tout type de systèmes (les anciens OS notamment) et d'architectures (ARM, MIPS, etc) mais cela se fait via la translation binaire qui est très gourmand en ressources processeur (essayez d'imiter quelqu'un vous comprendrez 😂) et le système dispose de peu de privilèges (il sera au niveau 4 dis applicatif, voir image).

Donc pour émuler d'autres architectures ou pour faire tourner des anciens systèmes d'exploitation, la virtualisation complète est très utile mais pour les systèmes plus récents, la paravirtualisation est ce qui se fait de mieux.

Paravirtualisation

Les pilotes VirtIO, tout comme les vm-tools, vont permettre aux machines virtuelles d'être conscientes d’être virtualisés en modifiant le noyau du système invité.

Le système invité conscient de tourner sur une machine virtuelle aura un accès privilégié de niveau 0 dis "niveau kernel" et pourra communiqué avec l'hyperviseur via les hyper-call.

Le fait que le système invité soit conscient d'être virtualisé allège la charge de travail du processeur (normal, pas de tentative d'émuler autre chose) mais plus que ça, cela permet d'ajouter des fonctionnalités supplémentaires comme des switch OVS/Linux Bridge, du stockage (ZFS, Ceph), de lui attribuer un périphérique physique via le PCI/USB-passthrough et même de lui attribuer un périphérique virtuel de type vgpu.

Donc pour les systèmes récents, la paravirtualisation c'est le "must have to be".

Protection ring - Wikipedia

PCI passthrough

Le PCI passthrough vous permet d'attribuer un périphérique physique à une machine virtuelle.

Les avantages

  • La machine virtuelle a un accès direct au périphérique
  • Aucun pilote de para-virtualisation a installé
  • Les performances sont proche du bare-metal (3-5% de pertes avec KVM, voir ce lien :https://lnkd.in/eXPBaMjh)

Les inconvénients

  • Le périphérique ne peut-être partagé avec plusieurs machines virtuelles simultanément, une seule machine virtuelle peut accéder au périphérique et pas une de plus
  • Dans le cas d'un cluster, impossible de profiter des avantages de la haute disponibilité

Par exemple, vous avez intégré un routeur/pare-feu à l'un des nœuds de votre cluster et lui avez attribué une carte dual/quad NIC. Mais pas de bol, le nœud tombe en panne et vous allez devoir démarrer la machine virtuelle sur un autre nœud du cluster avec une carte réseau qui n'a pas les mêmes adresses MAC que celle du nœud défectueux. Vous imaginez bien que ça va mettre la pagaille à toute votre infrastructure réseau qui fonctionne sur des adresses MAC statiques.

Autre exemple avec une instance bureautique. Vous utilisez Windows 11, vous faites du gaming, du montage vidéo ou de la CAO avec carte graphique en PCI passthrough et l'un des nœuds du cluster tombe lui aussi en panne. C'est moins grave qu'avec un routeur/pare/feu mais si vous avez le malheur d'avoir une carte Nvidia sur le nœud défectueux et une carte AMD sur le nœud de remplacement, une intervention manuelle sur la machine virtuelle est requise (installation du pilote vidéo, nouveau paramétrage sur l'hyperviseur).

Dans le cas du PCI passthrough, ce qu'on gagne en puissance brute, on le perd en fonctionnalités comme la haute disponibilité et la capacité de basculer d'un serveur à un autre très rapidement avec le moins de temps d'arrêt possible.

À titre domestique, le PCI passthrough peux vous éviter d'avoir à acheter deux PC. Vous avez juste à créer deux machines virtuelles, une sur le pilote vidéo du processeur (Intel HD par exemple) et une autre sur une carte dédié (Nvidia, AMD).

Tout les PC du commerce ont les fonctionnalités Intel vt-D/AMD-V mais les fondeurs ne le crient pas sur tout les toits bien sûr.