Difference between revisions of "VT2021 Cloud-Hypervisor Fiche"

From air
Jump to navigation Jump to search
Line 24: Line 24:
 
===Langage Rust===
 
===Langage Rust===
 
'''Performance'''</br>
 
'''Performance'''</br>
Rust est dépourvu de garbage collector et ne s'exécute pas sur un environnement virtuel.
+
Rust est dépourvu de garbage collector et ne s'exécute pas dans un environnement virtuel.
 
L'explicité du langage (typage dynamique) permet au compilateur de produire un code Assembleur d'une efficacité folle.
 
L'explicité du langage (typage dynamique) permet au compilateur de produire un code Assembleur d'une efficacité folle.
 
Lors de sa compilation, Rust passera à travers le compilateur LLVM qui est l'un des compilateurs les plus utilisés (avec GCC) et dont la capcité à produire du code efficace n'est plus remise en doute.
 
Lors de sa compilation, Rust passera à travers le compilateur LLVM qui est l'un des compilateurs les plus utilisés (avec GCC) et dont la capcité à produire du code efficace n'est plus remise en doute.

Revision as of 21:37, 28 November 2021

Cloud Hypervisor

Lucas Chaloyard (lucas.chaloyard@etu.univ-grenoble-alpes.fr) - Elias El Yandouzi (elias.el@outlook.fr)

Résumé

Mots clés : Cloud, VMM, Hyperviseur, Rust, KVM, Qemu

Le projet "Cloud Hypervisor" est une VMM open source qui s'exécute au-dessus de KVM. Ce projet est dévéloppé en Rust, langage qui fournit non seulement des performances intéréssantes mais aussi une sécurité et fiabilité très grande. Il est basé sur les crates rust-vmm dont on parlera. Il est destiné à exécuter des tâches typique d'application Cloud moderne.

Abstract

Keywords : Cloud, VMM, Hypervisor, Rust, KVM, Qemu

The "Cloud Hypervisor" project is an open source VMM that runs on top of KVM. This project is developed in Rust, a language that provides not only good performance but also great security and reliability. It is based on the rust-vmm crates that we will talk about. It is intended to perform typical tasks of modern cloud applications.

A. VMM

  • TO DO : Partie Elias

B. Rust

Langage Rust

Performance
Rust est dépourvu de garbage collector et ne s'exécute pas dans un environnement virtuel. L'explicité du langage (typage dynamique) permet au compilateur de produire un code Assembleur d'une efficacité folle. Lors de sa compilation, Rust passera à travers le compilateur LLVM qui est l'un des compilateurs les plus utilisés (avec GCC) et dont la capcité à produire du code efficace n'est plus remise en doute.

Securité et fiabilité
Le point le plus important conçernant Rust, et celui dont on parle le plus est sa capacité en terme de sécurité et fiabilité. Le compilateur Rust va en faite forcer le développeur à éviter de produire certaines faille de sécurité. Son système de typage puissant et son modèle d'ownership permet de contraindre le developpeur à garantir une certaine sécurité mémoire.

Bien sûr, ce point peut-être discutable car ce n'est qu'au final qu'une assistance au développeur lui permettant d'éviter ces bugs, mais un développeur ne devrait-il pas être capable par lui même d'éviter de créer ce genre de faille ?

Productivité
Aussi, Rust vient accompagné d'une panoplie d'outil extremement bien développé et très utile, permettant à n'importe quel développeur une grande productivité.

C'est ces caractéristiques qui font que Rust a été choisi pour ce projet dédié au Cloud, un milieu où on recherche à la fois performance, sécurité et fiabilité.

rust-vmm

Qu'est-ce que Rust-Vmm ?
Rust-Vmm est un projet open source destiné à encourager la communauté Rust à construire et developper des Virtual Machine Monitors (VMMs) et des hyperviseurs (ainsi que les outils qui les entourent). Ce projet est donc un ensemble de sous projet, pouvant servir de composant dans la création d'une VMM par exemple. Dans le jargon de Rust, on parlera de crates (ce qui correspond enfaite à un framework ou une application simplement)

On citera quelqu'un de ces composants tel que : - vm-virtio : VirtIO (Virtual I/O) - vm-device : Model d'une Virtual Machine - vm-memory : Utilisation à la création/conception de la virtual memory

Est-ce un problème ?
Le projet Cloud-Hypervisor repose sur le projet rust-vmm. On peut alors se demander si ce n'est pas un probléme de compter sur autant de composant publique, dont la maintenance n'est assuré que par la communauté Open Source Rust.

Inspiration
Une grande partie du code du Cloud-Hypervisor est basé sur soit le projet Firecrack d'Amazon ou sur les projets CrosVM de Google.

Ces 2 projets sont aussi des projets de VMM écrit en Rust, dont certains objectifs se veulent similaire à ceux du Cloud-Hypervisor Néamoins, le projet Cloud-Hypervisor possède un but final différent, celui-ci à créer une (infrastructure?) capable de supporter des images ? (partie à revoir)

Grâce à ces projets, rust-vmm est bien maintenu, et se trouve fournit de code de qualité, surtout pour les parties orienté wrapping de l'API KVM et la gestion mémoire du Guest OS.

C. KVM et Qemu

KVM

Outil de virtualisation
KVM correspond à une technologie de virtualisation open source.
Cette technologie est directement intégré au noyau Linux et peut être chargé dans le noyau en tant que module en fonction du bon vouloir de l'utilisateur.

KVM permet de convertir votre système Linux en un hyperviseur de type 1. Les machines virtuelles qu'on lancera à l'aide de KVM seront traités comme des processus standard du système. Cela permet de laisser la gestion de l'ordonnancement des machines virtuelles à l'ordonnanceur des processus du noyau Linux.

Schéma KVM

KQemu
KVM est accompagné d'une version modifiée de Qemu (dont on parlera plus tard), appelé KQemu. Cette version de Qemu est prévu pour une utilisation couplé à KVM, ce qui permettra des optimisations accélérant l'émulation.

Qemu

  • TO DO : Partie Elias

D. VirtIO

  • TO DO : Partie Elias

Références

- https://github.com/cloud-hypervisor/cloud-hypervisor - Repo git du projet Cloud Hypervisor - https://www.linux-kvm.org/page/Main_Page - Information sur KVM - https://www.cl.cam.ac.uk/research/security/seminars/archive/slides/2019-05-07-b.pdf - Discussion sur rust-vmm