<div class='slidealt'>Projets de recherche de virtualisation <a title='kvm en logiciel libre pour ARM multicoeur' href='/fr/innovation/'>pour les systèmes embarqués et le cloud</a></div> <div class='slidealt'>Solutions de virtualisation pour systèmes <a title='solutions en logiciels libres de virtualisation pour ARMv7-ARMv8' href='/fr/solutions/'>hétérogènes multicoeur ARM</a></div> <div class='slidealt'>Faites appelle à des <a title='services de full virtualisation pour kvm sur coeur ARM' href='/fr/services/'>services de virtualisation sur mesure</a></div> <div class='slidealt'>Expérimentez des extensions de <a title='virtualisation pour plateformes hétérogènes à base de processeurs ARM' href='/fr/produits/'>virtualisation KVM</a></div> <div class='slidealt'>Virtualisation KVM des E/S's pour coeurs ARMv7, ARMv8 <a title='extensions de virtualisation de plateforme VFIO des E/S par kvm sur arm en logiciel libre' href='/fr/solutions/guides/vfio-sur-arm/'>par extensions VFIO/IOMMU</a></div>

Concepts de base de la virtualisation de SoC ARM

concepts de virtualisation kvm sur arm pour intégrer des spécifications personnalisées de virtualisation

La virtualisation est une technique matérielle et logicielle qui permet d'exécuter sur une même plateforme physique plusieurs systèmes d'exploitations et applications (machines virtuelles invitées). Ces systèmes invités sont isolés les uns des autres, apparaissant comme s'ils s'exécutent sur différentes platesformes physiques. Il existe des nombreuses façons de mise en œuvre de la virtualisation:

  • Virtualisation complète
  • Para-virtualisation
  • Virtualization assistée par extensions matérielles

Virtualisation complète

La virtualisation complète est l'émulation du système complet permettant d'exécuter le système d'exploitation invité directement sur la machine virtuelle. Le système d'exploitation invité, comme par exemple du window, linux, mac, etc. ne se rend pas compte qu'il est en cours d'exécution dans un environnement virtualisé; il peut ainsi exécuter n'importe quelle application conçue pour ce même système d'exploitation. La couche logicielle responsable d'émuler la couche matérielle est appelée Virtual Machine Monitor (VMM) et convertit les instructions du système d'exploitation invité en instructions du système hôte. En outre, la VMM doit émuler tout le matériel de la plateforme. De cette façon, le système d'exploitation invité utilise l'abstraction de la VMM pour accéder au matériel subjacent. Le principal problème lié à la virtualisation complète est la mise en œuvre. Les premières implémentations n'étaient pas efficaces et parfois il était presque impossible de la mettre en œuvre en raison des fortes limitations des noyaux embarqués.

Para-virtualisation

La para-virtualisation est un concept similaire à la virtualisation complète. En effet, elle permet d'exécuter un système d'exploitation invité dans une machine virtuelle, mais contrairement à l'approche de la virtualisation complète, certaines modifications sont nécessaires pour exécuter le système d'exploitation invité. Normalement des modifications liées à l'interface d'appel système, à la gestion de la mémoire, et aux traitements d'interruptions sont nécessaires pour informer le système d'exploitation invité qu'il s'exécute dans une machine virtuelle. L'avantage de l'approche de para-virtualisation est sa haute performance et réactivité car le système d'exploitation invité peut mettre en œuvre les optimisations nécessaires permettant de contourner plusieurs interfaces d'abstraction logicielle.

Les pilotes de périphériques du système d'exploitation invité d'un système para-virtualisé sont généralement modifiés pour permettre une communication directe sans utiliser la couche d'abstraction de l'émulation. Cette approche permet un échange direct de données avec les pilotes de périphériques réels. Afin de mettre en œuvre ce modèle, il est également nécessaire par conséquent de modifier le pilote de périphérique réel. Les détails de mise en œuvre varie d'un hyperviseur à un autre. Un inconvénient évident de la para-virtualisation est la nécessité d'accéder au code source du système d'exploitation invité ainsi que d'avoir les droits de le modifier.

Virtualization assistée par extensions matérielles

Tous les grands producteurs de processeurs comme Intel, AMD, ARM ont vu venir l'énorme intérêt pour la virtualisation. Afin d'optimiser les performances des systèmes virtualisés, tous ont étendu leurs architectures avec des extensions matériel à support de la virtualisation. Ces extensions sont nommées Virtualization Technology (VT) pour Intel, Secure Virtual Machine (SVM) pour AMD, ou LDPA pour ARM. Les extensions de virtualisation ajoutent une couche matériel à la virtualisation et optimisent l'émulation des instructions de processeur qui sont difficiles à virtualiser. En outre, elles facilitent des opérations typiques effectuées dans un VMM, comme par exemple la traduction d'adresses, les nouveaux niveaux de privilèges. Cela implique que la plupart des instructions du système d'exploitation invité sont exécutés par le processeur sans passer par la VMM. La plupart des dispositifs actuels d'entrée/sortie ont un accès direct à la mémoire (DMA), leur permettant d'avoir un accès indépendant à la mémoire accélérant ainsi les opérations d'entrée/sortie.

Cependant les opérations DMA impliquent d'autres inconvénients, parmi lesquels les plus importants sont l'absence de protection de pilotes défectueux et l'inadaptation lorsqu'elles sont utilisées dans des environnements de virtualisation. Afin de réduire ces inconvénients, récemment tous (INTEL, ARM, AMD) ont introduit un support matériel pour les opérations d'entrée/sortie, un nouveau composant matériel appelé unité de gestion de mémoire d'entrée/sortie (IOMMU) qui offre une protection de la mémoire de périphériques d'entrée/sortie par interception des transactions DMA, qui utilise des tables de pages d'entrée/sortie afin de déterminer si l'accès est autorisé et qui résout l'adresse physique de l'hôte par translation automatique.