CPU et Virtualisation : les caractéristiques du processeur qu'il faut vérifier

Choisir un matériel équipé de processeurs affichant les caractéristiques adaptées permet d'améliorer le potentiel de virtualisation du serveur et de booster les performances des VM critiques.

Les hyperviseurs sont des produits logiciels et, à ce titre, imposent des conditions matérielles auxquelles chaque serveur, système de stockage ou sous-système réseau doit se conformer. Mais l'évolution constante du matériel (en particulier des technologies de processeur) a donné naissance à toute une série de normes et d'acronymes susceptibles de créer la confusion. Il faut du temps pour s'y retrouver dans ce jargon.

En outre, toute omission peut entraîner des erreurs imprévues dans la configuration du système et, par ricochet, des dysfonctionnements et des problèmes de performance. Examinons de plus près certaines caractéristiques - existantes et nouvelles - des processeurs, ainsi que les technologies pour prendre en charge les principaux hyperviseurs du marché, tels que VMware ESXi.

Des processeurs NX/XD pour l’isolement des VM

Facteur essentiel de la virtualisation, l'isolement consiste à empêcher un code d'application exécuté sur une VM d'accéder à l'espace mémoire utilisé par les autres VM.

Processeur

Cette technique permet d'isoler les VM les unes des autres et donc de protéger le serveur de toute une série d'attaques malveillantes, dont les virus, qui essaient systématiquement de se reproduire, et les attaques entraînant un dépassement de capacité de la mémoire tampon.

Les processeurs mettent en oeuvre ce type d'isolement de l'espace mémoire en utilisant un bit spécial qui permet de marquer certaines zones de la mémoire comme « non exécutables ».

Les processeurs AMD fournissent un bit NX (Never eXecute - ne jamais exécuter) et les processeurs Intel, un bit XD (eXecute Disable - désactiver l'exécution). Dans la pratique, les deux bits sont identiques (seuls leurs noms diffèrent) ; ils sont d'ailleurs souvent désignés conjointement sous l'appellation NX/XD.

L'idée est que si une zone mémoire est marquée comme non exécutable, donc protégée, le processeur refuse d'y exécuter un code. Toute tentative en ce sens déclenche une violation d'accès mémoire, qui alerte les administrateurs d'une activité potentiellement inappropriée sur le serveur. Cela empêche la perturbation d'une VM par une autre, ainsi que la prolifération de logiciels malveillants entre les VM.

La fonctionnalité NX/XD est donc importante lors du choix du processeur.

Fort heureusement, les processeurs AMD et Intel prennent en charge les bits NX/XD depuis environ 2006, et il est extrêmement improbable qu'un serveur actuel ne soit pas équipé de processeurs affichant cette fonctionnalité.

Il est toutefois judicieux de vérifier ce point dans la documentation du serveur ou de consulter le BIOS pour s'assurer que des options telles qu'Execute Disable Bit (bit de désactivation de l'exécution), NX Technology (technologie NX) et XD Support (prise en charge XD) sont activées.

Dans le cas contraire (et si vous ne pouvez pas activer ces fonctions du processeur dans le BIOS), il peut s'avérer nécessaire de changer de serveur avant d'installer l'hyperviseur.

Instructions LAHF et SAHF : de quoi s'agit-il ?

Les processeurs font un usage intensif des registres. Il s'agit de très petites zones de mémoire intégrées à chaque puce. Elles contiennent les résultats temporaires d'étapes mathématiques ou logiques en cours, ou définissent des conditions sélectionnées par l'intermédiaire de bits indicateurs.

Dans les processeurs x86, le registre AH est ainsi connu comme registre « accumulateur ». Il est utilisé pour l'accès aux ports E/S, les opérations élémentaires à virgule flottante et les interruptions.

Ces fonctions étant toutes essentielles dans un environnement virtualisé, les processeurs modernes peuvent en accélérer le traitement grâce à des commandes qui autorisent un contrôle direct du contenu du registre ; il s'agit des commandes Load AH from Flags (LAHF) et Save AH to Flags (SAHF).

Cet article n'a pas vocation à aborder tous les détails techniques de l'architecture bas niveau des processeurs, mais retenons simplement qu'un hyperviseur tel qu'ESXi peut utiliser les instructions LAHF/SAHF pour assurer un contrôle plus direct du traitement des E/S et des interruptions par chaque coeur de processeur.

Ce contrôle au niveau du matériel peut améliorer les performances des VM exécutées sur chaque coeur. Les commandes LAHF/SAHF sont indirectement liées au support plus large de la virtualisation sur les processeurs modernes tels que les technologies Intel-VT et AMD-V.

Comme dans le cas de la prise en charge des bits NX et XD, presque tous les processeurs Intel et AMD actuels intègrent les instructions LAHF/SAHF en plus du jeu étendu d'instructions de virtualisation (Intel-VT et AMD-V).

Bien que les instructions LAHF/SAHF ne puissent pas être activées ni désactivées séparément via le BIOS, ce dernier permet généralement de contrôler les fonctions de virtualisation plus larges. Il est donc important de vérifier que le support des jeux d'instructions Intel-VT et AMD-V est bien activé avant d'installer un hyperviseur.

RVI, SLAT et EPT

L'indexation de virtualisation rapide (RVI, Rapid Virtualization Indexing) fait partie du jeu de fonctions de virtualisation fourni avec la technologie AMD-V. C'est ce qu'on appelle également les tables de pages imbriquées ou la traduction d'adresses de second niveau (SLAT, Second-Level Address Translation). Intel désigne cette technologie sous le nom de tables de pages étendues (EPT, Extended Page Tables).

La traduction d'adresses est nécessaire car les processeurs doivent utiliser une table de pages ou un tampon de traduction (TLB, Translation Look-aside Buffer) pour convertir les adresses relatives en adresses physiques complètes quand une charge de travail a besoin d'accéder à la mémoire physique.

Dans un ordinateur virtualisé, cette traduction d'adresses doit s'effectuer à deux reprises chaque fois qu'un accès à la mémoire physique est nécessaire : la première fois pour l'instance hôte, la seconde pour l'instance invitée (la VM).

Ce second niveau de traduction d'adresses complique la tâche du processeur, ce qui réduit les performances.

Les fonctions telles qu'EPT d'Intel et RVI d'AMD améliorent les performances de virtualisation en étendant la table de pages afin de permettre à l'hyperviseur de déterminer les emplacements en mémoire physique des instances hôte et invitée en une seule étape au lieu de deux.

Les meilleurs hyperviseurs prennent en charge les fonctionnalités SLAT depuis des années : Hyper-V avec Windows Server 2008 R2, VMware ESX 3.5, Xen 3.2 et bien d'autres.

Aujourd'hui, les hyperviseurs tels que Hyper-V pour Windows 8 exigent des processeurs compatibles SLAT.

Autres caractéristiques du processeur à prendre en compte pour la virtualisation

Les principaux fabricants de processeurs, comme Intel et AMD, rassemblent la plupart des fonctions de virtualisation en un ou plusieurs jeux. Chez Intel, on peut citer VT-x avec EPT et VT-d pour les E/S virtualisées, et chez AMD les fonctions AMD-V, telles que RVI et les TLB.

Quelles que soit la terminologie employée, toutes ces fonctions de virtualisation ont généralement pour objet d'améliorer la capacité du processeur à créer et à gérer des ressources virtuelles à partir de ressources informatiques physiques. Cela comprend l'accès à la mémoire et le déplacement de données entre périphériques d'E/S (ports Ethernet, par exemple).

Le but est de fournir ces fonctionnalités sous forme de composants matériels du processeur plutôt que de les intégrer au système d'exploitation.

Alors que presque tous les processeurs récents affichent des fonctions de virtualisation, il est important de noter que toutes ne sont pas disponibles dans chaque puce, ni mises en oeuvre de la même façon d'une génération de puces ou d'une gamme à l'autre chez un même fournisseur.

En principe, cela n'a aucune incidence sur la capacité de chaque serveur à gérer la virtualisation en interne, mais les différences fonctionnelles entre serveurs peuvent induire des problèmes potentiels au niveau de la migration des VM.

Par conséquent, avant tout déploiement dans un environnement de production, il est recommandé aux responsables de la planification informatique de prendre le temps d'évaluer les capacités de virtualisation de chaque nouveau serveur, afin de déterminer son interopérabilité entre clusters et autres schémas de migration (ou de basculement).

Pour approfondir sur x86