lid's Wiki

B3: Virtualisation

Historique

Contrairement à ce que l'on pourrait croire, la virtualisation n'est pas une technologie récente.

En effet, dès les années 1960, et notamment à cause du coût des mainframes de l'époque, on a cherché à diviser les ressources (RAM, CPU, etc) disponibles et compartimenter des instances de systèmes d'exploitation, par exemple, pour utiliser une même mainframe pour plusieurs clients, chaque client disposant de sa propre instance isolée de celles des autres clients. Pour le client, il lui semble juste utiliser quelque chose d'indistinguable d'une machine physique.

La virtualisation consiste donc à diviser les ressources d'une machine physique en une série de machines dites virtuelles, isolées les unes des autres (et donc, en théorie, ne pouvant pas accéder à l'environnement d'exécution ou aux ressources (RAM, disques) d'une autre machine virtuelle, ou de l'hôte (le logiciel utilisé est un hyperviseur).

La virtualisation nécessite en général des instructions dédiées au niveau du CPU (hardware-assisted) afin d'obtenir les meilleures performances possibles. Ainsi, de nos jours, une machine virtuelle (VM) avec 1 CPU assigné est quasiment identique en performances à une machine physique équivalente avec 1 CPU, la différence étant de l'ordre de 1 à 3 % suivant les technologies utilisées.

On utilise souvent les termes hôte et invité pour désigner respectivement l'hyperviseur et les machines virtuelles.

Les buts principaux de la virtualisation sont d'améliorer le dimensionnement des infrastructures (leur "scalability" en langue de Shakespeare) et d'optimiser les ressources matérielles utilisées: on veut éviter que nos machines "tournent à vide" en ne faisant rien et en consommant de l'électricité, on préfèrera qu'elles soient utilisées à 75 ou 80% de leurs capacités.

IBM CP-40 puis CP/CMS, 1967

Dans les années 1960, les équipes de recherche et développement d'IBM ont développé le système d'exploitation CP-40, qui devint CP/CMS en 1967, et qui, étonnamment pour IBM à l'époque, était open-source. Il permettait de fournir à chaque utilisateur une machine simulée (et non complètement virtualisée) exécutant l'OS phare d'IBM à l'époque, S/360.

En 1972, cette technologie fut renommée VM par IBM, et est toujours utilisée de nos jours notamment dans leurs mainframes Z-Series.

En 1972, la virtualisation matériellement assistée fait son apparition avec S/370 et VM/370.

À la fin des années 1970, la virtualisation est éclipsée du fait de la demande en performances graphiques des utilisateurs (CAO/DAO/CAD, etc) et de l'arrivée des micro-ordinateurs: la demande en calcul distribué chute alors, de plus en plus d'utilisateurs se voyant fourni un micro-ordinateur personnel.

Popek et Goldberg: Principes de la virtualisation

en 1974, Gerald J. Popek et Robert P. Goldberg formalisent les prérequis de tout système de virtualisation moderne et donc de tout hyperviseur (aussi appelé VMM: Virtual Machine Monitor) en trois points précis:

Dans les années 70, les machines DEC PDP-10, IBM System/370 sont des exemples de machines dont les CPUs répondent aux conditions énoncées par Popek et Goldberg. Ce ne sera pas le cas de l'architecture x86 avant 2005, avec l'introduction des jeux d'instructions Intel VT-X et AMD-V. La même année, SPARC (utilisé par les machines Sun Microsystems) implémente les principes de Popek et Goldberg dans l'architecture UltraSPARC.

À l'inverse, les processeurs PowerPC (PPC) de Motorola et POWER d'IBM par la suite, disposaient dès leur apparition des jeux d'instructions nécessaires.

Types de virtualisation matérielle

On peut distinguer 3 grands types de virtualisation matérielle:

Containerisation

À la différence de la virtualisation classique, la containerisation exécute une instance d'un système d'exploitation en utilisant directement le noyau de l'hôte, qui fournit des mécanismes d'isolation pour isoler chaque container des autres containers et de l'hôte.

On retrouve une partie des avantages de la virtualisation, notamment la "scalabilité" et la standardisation des environnements invités, mais en utilisant moins de ressources que la virtualisation matérielle, chaque container utilisant, au final, le même kernel: celui de l'hôte.

Cependant, on perd en isolation et donc, en sécurité: un container malveillant pourrait utiliser une faille du noyau de l'hôte pour accéder aux ressources d'autres containers ou de l'hyperviseur.

Les années 90

La virtualisation revient sur le devant de la scène en 1998 avec deux évènements majeurs:

Les années 2000: le besoin de densité et de matériel abordable

Dans les années 2000 et notamment du fait de la popularisation d'Internet dans le grand public, il devient nécessaire d'optimiser l'utilisation des serveurs afin d'utiliser au maximum leurs capacités et ainsi d'augmenter la densité de calcul par baie. Les choses s'accélèrent à nouveau pour la virtualisation:

2010: les Hyperscalers et généralisation de la virtualisation

Concepts et implémentations

(source: Wikipedia)

Hyperviseurs de type 1

Définition

Un hyperviseur de type 1 s'exécute directement sur le matériel hôte et contrôle le matériel et gère les systèmes d'exploitation invités. Il s'agit en général d'un noyau très léger qui fait office de VMM, et une VM spéciale sera créée pour dialoguer avec ce noyau et permettre à un administrateur de contrôler les autres VMs invitées.

Quelques exemples d'hyperviseurs de type 1:

  1. Xen
  2. Hyper-V
  3. Broadcom VMWare ESXi
  4. KVM (c'est un module du noyau Linux qui convertit directement le kernel en hyperviseur de type 1)

Hyperviseurs de type 2

Définition

Un hyperviseur de type 2 s'exécute sur un système d'exploitation classique (Linux, Windows, etc) et le VMM s'exécute donc comme un processus de ce système d'exploitation. On peut citer:

  1. VMware Workstation
  2. VirtualBox
  3. OpenBSD VMM
  4. 9Front VMX
  5. Virt-Manager pour Linux

Solutions de virtualisation

Libres/open-source

Propriétaires

Labo!!

Eh bien maintenant, on va se monter un cluster Proxmox! Direction le labo! \o/