agsandrew - stock.adobe.com
Virtualisation : quel processeur choisir ?
Les processeurs Intel, AMD et ARM optimisent la virtualisation de multiples façons. Cet article liste les caractéristiques des technologies Intel VT, AMD-V, Armv9, Intel APICv et AMD AVIC.
Les fabricants de puces Intel, AMD et ARM proposent des extensions dans leur jeu d'instructions pour une prise en charge matérielle de la virtualisation, mais il est difficile de s’y retrouver parmi les acronymes correspondants.
La prise en charge matérielle est indispensable pour utiliser des machines virtuelles en production, car elle permet à l'hyperviseur – quel qu’il soit – d’effectuer des correspondances complexes entre les privilèges des instructions et de gérer les ressources mémoire sans qu’il y ait de latence. Des processeurs avec des instructions dédiées à la virtualisation évitent de passer par une émulation logicielle, qui limite le nombre et les performances des machines virtuelles.
Quelle virtualisation sur les processeurs Intel ?
En 2005, Intel a introduit pour la première fois la prise en charge matérielle de la virtualisation avec Intel VT-x sur deux modèles du processeur Pentium 4. VT-x a ajouté dix nouvelles instructions qui ont permis la création et le contrôle des VMs. Le logiciel de virtualisation s'exécute lui-même dans un mode d'exécution virtuel, mais son OS hôte dispose de tous les privilèges, de sorte que cet OS hôte est ininterrompu, protégé et isolé.
En 2008, Intel a ajouté la prise en charge des tables de pages étendues (EPT, pour « Extended page tables »). Il s’agit d’un système de pagination imbriquée de la mémoire ou, dit autrement, de traduction des adresses mémoire sur deux niveaux (principe générique appelé SLAT, pour « Second-level address translation »). On parle plus simplement de virtualisation de la mémoire.
La virtualisation doit traduire les adresses de la mémoire physiquement installée dans le serveur en adresses mémoire dans une machine virtuelle. Le problème est que cette traduction a lieu deux fois : une fois pour la VM hôte (celle de l’hyperviseur) et une seconde fois pour chaque VM invitée. Cela augmente la latence et ralentit les performances. Les technologies SLAT gèrent ces traductions afin d'améliorer les performances globales.
En 2010, Intel a pris en charge les VMs non restreintes avec le mode IA-32e. Il s’agit d’une sorte de Bare metal dans lequel une machine virtuelle utilise des ressources physiques qui lui sont dédiées. Par exemple, son vCPU correspond à un cœur spécifique du processeur. Sans cela, le vCPU correspond à une fraction du temps de calcul disponible parmi tous les cœurs physiques du processeur. Ce dispositif a été renommé IA-64e quand les processeurs Intel sont passés à un jeu d’instruction 64 bits.
Un enjeu de longue date de la virtualisation est la question de l'imbrication, qui consiste à exécuter une VM dans une VM. Chaque VM utilise une structure de données unique. Lorsqu'une VM s'exécute au sein d'une VM, les administrateurs doivent modifier ou échanger la structure de données pour assurer une imbrication correcte.
En 2013, Intel a introduit le VMCS shadowing (pour Virtual Machine Control Structure). Le VMCS correspond notamment à l’état des registres d’un processeur virtuel. Lorsque plusieurs VMs sont exécutées à tour de rôle sur un seul cœur, il faut à chaque fois recharger le contenu des registres du vCPU dans les registres du cœur physique. Cette opération crée de la latence dans l’exécution des VMs. La fonction VMCS shadowing évite cette latence et améliore les performances des machines virtuelles.
En 2023, la plupart des processeurs Intel prennent en charge la virtualisation. Tous les Xeon des serveurs, bien entendu, mais aussi une grande partie des Core i5, i7 et i9 que l’on trouve sur PC.
Quelle virtualisation sur les processeurs AMD ?
AMD a ajouté des extensions de prise en charge de la virtualisation aux jeux d’instruction de plusieurs de ses processeurs à partir de 2006 (Athlon 64, Athlon 64 X2, Athlon 64 FX, Turion 64 X2 et certains processeurs Opteron, Phenom et Phenom II). Ce sont les commandes AMD-V. Elles permettent aux développeurs d'écrire des logiciels qui créent et contrôlent des VMs et elles prennent en charge l'utilisation d'hyperviseurs.
AMD a ensuite été le premier à implémenter, sur les processeurs K10 et Phenom II, un dispositif SLAT de prise en charge de la mémoire virtualisée par pages imbriquées. Ce système, appelé RVI (Rapid Virtualization Indexing) traduit la mémoire physique en plages de mémoires virtuelles via un index. C’est ce fonctionnement dont Intel s’est inspiré lorsqu’il a implémenté le dispositif EPT sur ses processeurs.
Les processeurs AMD n’ont pas d’autres extensions dédiées à la virtualisation. En revanche, absolument tous les modèles, pour serveurs comme pour PC, disposent des instructions de virtualisation. Et pour cause : ils sont tous basés sur les mêmes cœurs Zen. Il faut néanmoins noter que la virtualisation peut nécessiter une activation dans le BIOS de la machine hôte avant de pouvoir être utilisée.
Quelle virtualisation sur les processeurs ARM ?
Les processeurs ARM utilisent des jeux d'instructions réduits (par exemple une instruction générique de chargement de registre à la suite de laquelle on indique le registre, au lieu d’une instruction par registre), ce qui leur permet de chauffer moins, d’avoir moins besoin d’être refroidis et, donc, d’économiser globalement de l’énergie. Cette particularité en a fait la puce de prédilection pour exécuter, chez les hébergeurs, tous les serveurs basiques, dont le Web. On les trouve aussi de plus en plus dans des micros-serveurs (NAS...) destinés à un déploiement sur les lieux de production (usines, boutiques...) ; une catégorie que l’on appelle Edge computing.
La première version 8 de l'architecture ARM (Armv8-A) prenait en charge la virtualisation en permettant d’exécuter sur les serveurs plusieurs VMs avec un système d’exploitation différent. Pour autant, la translation d’adresses était émulée avec des mises en cache qui consommaient un certain temps de calcul.
Il faut attendre la version Armv8.1 pour voir arriver des extensions dédiées sous la forme du jeu d’instruction VHE. Apportant d’abord une translation d’adresses basique, VHE permettra une véritable virtualisation imbriquée en devenant le jeu d’instruction NV à l’occasion de l’architecture Armv8.3.
Depuis mars 2021, les nouveaux processeurs ARM se basent sur l’architecture Armv9, qui accélère notamment les algorithmes d’IA. Ces améliorations bénéficient aussi à la virtualisation. Armv9-A comprend ainsi des fonctions de marquage de la mémoire, d'identification anticipée des adresses de destination après un test conditionnel et de nettoyage automatique du cache qui réduisent considérablement les temps de latence entre le passage d’une VM à l’autre.
Armv9.1-A apporte quant à elle un timer qui permet d’attribuer des tranches du temps de calcul à chaque VM avec plus de précision. Et Armv9.2-A enregistre l’historique des branchements afin que les administrateurs puissent mieux diagnostiquer les goulets d’étranglement.
Quelle virtualisation pour les entrées-sorties ?
Les instructions dont nous avons parlé jusqu’ici concernent l’optimisation de la mémoire, des niveaux de privilèges et des registres du processeur dans le cadre du fonctionnement parallèle de plusieurs machines virtuelles. Mais pour qu’un serveur puisse correctement exécuter des VMs encore faut-il qu’il virtualise aussi ses entrées-sorties pour partager de manière optimale le matériel : le réseau, le stockage, etc.
De telles fonctions de virtualisation sont implémentées dans le chipset des cartes mères, éventuellement dans le contrôleur intégré au processeur, ou encore sur les cartes d’extension qui apportent des entrées-sorties aux serveurs. Les quatre technologies que l’on rencontre le plus couramment sont :
- Intel VT for Directed I/O, ou VT-d, fait partie d’Intel VT sur les processeurs qui possèdent un circuit MMU uniquement dédié aux entrées-sorties (IOMMU). Une MMU traduit d’ordinaire les adresses virtuelles en adresses physiques ; l'IOMMU fait correspondre les adresses des périphériques virtuels aux adresses des périphériques physiques. Ce dispositif permet aux VMs d'utiliser directement les périphériques.
- Virtual Machine Device Queues, ou VMDq, fonctionne au niveau de la carte réseau, plutôt qu’au niveau de l’hyperviseur, pour regrouper et trier les données en amont de leur traitement. Ainsi, l’hyperviseur est déchargé de certaines fonction de routage et le réseau a de meilleures performances.
- Single-root I/O virtualization, ou SR-IOV, est un système normalisé que doivent suivre les périphériques pour annoncer leur présence et leur disponibilité à plusieurs VMs. C’est ce système qui permet par exemple de virtualiser une carte PCIe en plusieurs cartes PCIe virtuelles. A partir du moment où une carte PCIe communique en SR-IOV, les administrateurs peuvent diviser sa bande passante en plusieurs portions, chacune correspondant à un port PCIe virtuel attribué à une machine virtuelle.
- Intel Data Direct I/O Technology (DDIO) n'est pas un type de virtualisation, mais une amélioration qui permet aux contrôleurs réseau de communiquer directement avec le cache du processeur plutôt que d'envoyer d'abord les données à la mémoire principale, puis de les déplacer de la mémoire au cache. Associée à des améliorations de virtualisation, DDIO peut augmenter la bande passante effective du réseau, réduire la latence du réseau et diminuer la consommation d'énergie.
Quid de la gestion des interruptions ?
Les processeurs utilisent des interruptions, un dispositif qui sert à interrompre le cours normal du système d’exploitation lorsque des événements extérieurs surviennent, typiquement un signal en provenance du clavier ou une condition levée par périphérique. Cependant, les interruptions génèrent de la latence au niveau du processeur. Dans le cadre de la virtualisation, la somme des interruptions reçues individuellement par les VMs depuis leurs périphériques virtuels peut ainsi avoir un effet délétère sur le fonctionnement du cluster.
Pour éviter cet écueil, Intel et AMD proposent un système de virtualisation des interruptions qui les trie selon leur priorité et les range dans une file d'attente, afin de les traiter au moment optimal. Ce système s’appelle AVIC chez AMD (Advanced Virtual Interrupt Controller) et APICv chez Intel (Advanced Programmable Interrupt Controller virtualization). AVIC est apparu en 2012 et APICv est arrivé progressivement sur les processeurs Intel entre 2013 et 2014.
Les deux dispositifs sont réputés équivalents.