• Aucun résultat trouvé

2.4 Virtualisation

2.4.3 Virtualisation de matériel

La virtualisation nécessite de virtualiser le matériel, en particulier les ressources de type proces-seur et mémoire, ainsi que les périphériques.

Chapitre 2. Problématique

Ring 3

Ring 2

Ring 1

Ring 0

Couche de Virtualisation

Machine Hôte

OS Invité

Paravirtualisé

Apps

Utilisateur

Hypercalls à la

Couche de Virtualisation

remplace les instructions

non virtualisable de l'OS

Exécution Directe

des Requêtes Utilisateur

FIGURE2.8 – Paravirtualisation sur des architectures x86

Source : D.Marshall [19]

Virtualisation des processeurs

Lors d’une virtualisation complète, les instructions privilégiées exécutées par une machine vir-tuelle sont piégées puis émulées par l’agent logiciel de confiance. Lorsqu’une architecture comporte des instructions sensibles non privilégiées, celles-ci ne peuvent être automatiquement piégées par l’hyperviseur car elles peuvent être exécutées en mode utilisateur. Il est alors nécessaire que l’hyper-viseur effectue une analyse des instructions appartenant à la machine virtuelle avant que celles-ci soient exécutées. Ceci peut être fait grâce à la technique de binary translation. Cette technique consiste à scanner le code que le noyau du système invité veut exécuter à un certain moment et de remplacer les instructions sensibles non privilégiées par des instructions privilégiées permettant ainsi à l’hy-perviseur de piéger ces instructions. Cette analyse peut être faite soit de façon statique sur tout un programme ou alors de façon dynamique sur un bloc de base (un ensemble d’instructions se finissant par une instruction de branchement). En ce qui concerne la paravirtualisation, l’utilisation d’instruc-tions sensibles est prohibée par la modification du code noyau du système invité. Ces instrucd’instruc-tions sont alors remplacées par des appels directs à l’hyperviseur.

Chapitre 2. Problématique

Virtualisation de la mémoire

La virtualisation de la mémoire est très semblable au principe de mémoire virtuelle. Pour exécuter plusieurs machines virtuelles sur une unique machine il est nécessaire de rajouter un niveau d’adres-sage. L’hyperviseur va alors gérer le mapping de la mémoire physique de la machine virtuelle, appelée mémoire machine, sur la mémoire de la machine hôte, appelée mémoire physique. Le système invité va alors être en charge de gérer le mapping de la mémoire virtuelle sur la mémoire physique de la ma-chine virtuelle (mémoire mama-chine). La mama-chine virtuelle ne possède pas d’accès direct à la mémoire physique. L’hyperviseur utilise des shadow page tables pour accélérer les traductions entre mémoire virtuelle et mémoire physique. Comme le montre la flèche rouge en pointillé dans la figure 2.9 l’hy-perviseur utilise les TLBs pour faire le mapping entre les adresses virtuelles et leur correspondance en adresse physique, permettant ainsi d’éviter une double traduction à chaque accès. Lorsque une ma-chine virtuelle modifie le mapping entre la mémoire virtuelle et sa mémoire mama-chine, l’hyperviseur doit alors mettre à jour sa shadow page table.

VM 1 VM 2 Processus 1 Processus 2 Mémoire Physique Mémoire Machine Mémoire Virtuelle Processus 1 Processus 2

FIGURE2.9 – Virtualisation de la mémoire

Source : D.Marshall [19]

Virtualisation des périphériques

La virtualisation permet aussi de virtualiser les périphériques. En effet comme l’expliquent Abramson et al. [20], il existe principalement trois types de virtualisation en ce qui concerne les accès aux périphériques : l’émulation, la paravirtualisation et l’assignation directe.

L’émulationconsiste à implémenter le matériel de façon strictement logicielle. Autrement dit, l’hy-perviseur va venir proposer un modèle de périphérique à une machine virtuelle dont celle-ci pos-sède déjà des pilotes [21]. La machine virtuelle va alors interagir avec ce modèle comme s’il s’agissait d’un vrai périphérique matériel. L’hyperviseur va alors proposer un modèle de périphérique dans

Chapitre 2. Problématique

un certain espace d’adressage où chaque accès par la machine virtuelle sera piégé et émulé par l’hy-perviseur. L’hyperviseur doit être capable d’envoyer des interruptions à la machine virtuelle lorsque le périphérique signale que celui-ci a terminé la requête. Traditionnellement, ce mécanisme est mis en place à l’aide d’un Programmable Interrupt Controller (PIC). L’hyperviseur doit alors aussi proposer un modèle de PIC pour permettre à la machine virtuelle d’y accéder, typiquement pour émuler l’ac-quittement de l’interruption du périphérique. L’émulation permet de ne pas modifier les pilotes des systèmes invités, et donc de permettre la virtualisation complète, mais présente un surcoût impor-tant en terme de performance car chaque interaction entre la machine virtuelle et un périphérique nécessite une transition par l’hyperviseur. Un autre désavantage de l’émulation provient du fait que les modèles de périphériques doivent être très précis pour refléter de façon stricte le comportement du matériel. La figure 2.10 illustre ce mécanisme d’émulation des périphériques.

OS Invité

Hyperviseur

Pilote

Modèles des périphériques Modèle Périphérique Périphérique Interruption Pilote Modèle du PIC

FIGURE2.10 – Mécanisme d’émulation des périphériques

Source : D.Abramson et al. [20]

La paravirtualisation[22, 23] consiste à offrir au système invité une interface pour communiquer avec l’hyperviseur. Autrement dit, le système invité n’interagit plus directement avec les périphé-riques mais avec une interface d’entrée/sortie de l’hyperviseur. De ce fait, il est nécessaire de modifier à la fois les pilotes des systèmes invités mais aussi le mécanisme des interruptions car généralement celui-ci est remplacé par une technique basée sur des événements logiciels. La paravirtualisation des périphériques présente de bonnes performances comparée à l’émulation car elle permet de ré-duire le nombre d’interactions entre l’hyperviseur et le système invité, mais nécessite la modifications

Chapitre 2. Problématique

des systèmes d’exploitations invités et donc ne permet pas la virtualisation complète. La figure 2.11 illustre le mécanisme de paravirtualisation dans le cas des accès d’entrée/sortie.

OS Invité

Hyperviseur

Pilote Paravirtualisé Interface I/O Périphérique Interruption Pilote Evenement

FIGURE2.11 – Mécanisme de paravirtualisation des périphériques

Source : D.Abramson et al. [20]

L’assignation directeconsiste à allouer un périphérique de façon exclusive à un système invité. En conséquence, celui-ci peut directement et nativement s’adresser au périphérique en utilisant son pi-lote existant. Néanmoins, l’hyperviseur doit quand même gérer la redirection des interruptions du périphérique vers le système d’exploitation invité ciblé par l’interruption. Cette technique permet en outre d’alléger l’hyperviseur car ce dernier n’a plus à fournir d’implémentation des pilotes des péri-phériques pour les systèmes d’exploitation invités. Il existe cependant un problème car les machines virtuelles s’exécutent dans un espace d’adressage virtuel qui ne correspond pas à celui que connait le périphérique, puisque celui-ci fonctionne en adressage physique. Cela est d’autant plus probléma-tique lorsque le périphérique en question possède une capacité DMA, puisque les adresses fournies par le système d’exploitation invité sont virtuelles et que le périphérique les interprètera comme des adresses physiques. De plus, le système d’exploitation invité peut, par le biais des périphériques DMA, accéder à des zones de mémoire qui ne lui sont pas autorisées. Une solution à ce problème est que l’hyperviseur fournisse des pilotes intermédiaires pour ces périphériques, dit pass-through. Ces pilotes sont responsables d’intercepter toutes les interactions entre un système d’exploitation invité et le périphérique DMA. Ces pilotes réalisent alors la traduction des adresses virtuelles en adresses physiques, en vérifiant que celles-ci ciblent bien des zones de mémoire autorisées [24]. Les

Chapitre 2. Problématique

pilotes pass-through sont spécifiques à chaque périphérique DMA car ils doivent décoder le format de la requête envoyée au périphérique. La technique d’assignation directe présente de bien meilleures performances que la technique d’émulation ou de paravirtualisation [25, 26], car le nombre d’inter-actions entre les systèmes d’exploitation invités et l’hyperviseur est très réduit.

La virtualisation hybrideconsiste à combiner les mécanismes de paravirtualisation et d’assignation directe. Une machine virtuelle (éventuellement plusieurs) est dédiée à la gestion des entrées/sorties. Cette machine virtuelle contrôle alors les périphériques physiques à l’aide de l’assignation directe, utilisant ainsi les pilotes existants, et fournit aux autres machines virtuelles un accès en mode paravir-tualisation pour ces périphériques. Cette technique permet de réduire la complexité de l’hyperviseur et de rendre indépendante la gestion des périphériques pour l’hyperviseur et les machines virtuelles standards. La figure 2.12 illustre ce mécanisme.

OS Invité

Hyperviseur

Pilotes Paravirtualisés Interface I/O Périphérique Pilote Apps

VM I/O

FIGURE2.12 – Mécanisme de virtualisation hybride

Source : D.Abramson et al. [20]