VT2021 Cloud-Hypervisor Fiche

= 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éveloppé 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 typiques 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


Un hyperviseur, également connu sous le nom de moniteur de machine virtuelle ou VMM, est un logiciel qui crée et exécute des machines virtuelles (VM). Un hyperviseur permet à un ordinateur hôte de prendre en charge plusieurs machines virtuelles invitées en partageant virtuellement ses ressources, telles que la mémoire et le traitement.

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 grande efficacité. 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 capacité à produire du code efficace n'est plus remise en doute. Un mécanisme aussi intéressant pour les performances et le modèle d'ownership intégré à Rust, on rediscutera de celui-ci dans la partie sécurité et fiabilité, mais d'un point de vue compilation, il permet un meilleur suivi de la "vie" des variables, et donc les passes d'optimisations du compilateur étudiant ce critére seront capable de produire un code encore plus performant.

Securité et fiabilité Le point le plus important concernant Rust, et celui dont on parle le plus est sa capacité en terme de sécurité et fiabilité. Le compilateur Rust va en fait forcer le développeur à éviter de produire certaines failles 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.

On en a parlé précédemment, le modèle d'ownership en plus de permettre d'augmenter les performances du code produit, il permet aussi d'éviter des failles dû à un partage d'ownership involontaire entre plusieurs parties du code, ou plusieurs composants d'une application.

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 failles, mais un développeur ne devrait-il pas être capable par lui même d'éviter de créer ce genre de faille ? Néanmois, cela reste intéressant d'un point de vue performance.

Productivité Aussi, Rust vient accompagner d'une panoplie d'outils extrêmement bien développé et très utile, permettant à n'importe quel développeur une grande productivité. On pensera à :
 * cargo (gestionnaire de crate)
 * clippy (linter)
 * rustfmt (formatteur)
 * plugins vs-code, emacs, vim, etc...

Conclusion Ce sont 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 développer des Virtual Machine Monitors (VMMs) et des hyperviseurs (ainsi que les outils qui les entourent). Ce projet est donc un ensemble de sous-projets, 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 en fait à un framework ou une application).

On citera quelqu'un de ces composants tel que :
 * vm-virtio : VirtIO (Virtual I/O).
 * vm-device : Modélisation des devices que l'on souhaite ajouter à une machine virtuelle.
 * vm-memory : Création/conception de la mémoire virtuelle d'une machine virtuelle.

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 composants 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 similaires à ceux du Cloud-Hypervisor. Néamoins, le projet Cloud-Hypervisor possède un but final différent, celui-ci est de créer une infrastructure capable de supporter tâches cloud modernes.

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.

KVM
Outil de virtualisation KVM correspond à une technologie de virtualisation open source. Cette technologie est directement intégrée au noyau Linux et peut être chargée 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ées comme des processus standards du système. Cela permet de laisser la gestion de l'ordonnancement des machines virtuelles à l'ordonnanceur des processus du noyau Linux.



Pourquoi choisir KVM ? Plusieurs raisons font que KVM est aujourd'hui un choix très intéressant :
 * En terme de performance, KVM permet d'atteindre une vitesse quasiment native, ce qui est clairement de très bonne performance.
 * KVM étant un projet open-source, son coût est nul (aucun coût de licence). Aussi, il vient souvent accompagner et préparé à être utilisé pour virtualiser des systèmes d'exploitation aussi open source.
 * KVM fait maintenant partie de l'écosystème Linux, ce qui permet d'assurer une maintenance et évolution importante.

D. VirtIO


VirtIO est une interface standardisée qui permet aux machines virtuelles d'accéder à des périphériques "virtuels" simplifiés, tels que des périphériques de bloc, des adaptateurs réseau et des consoles. L'accès aux périphériques via VirtIO sur une machine virtuelle invitée améliore les performances par rapport aux périphériques "émulés" plus traditionnels, car les périphériques VirtIO ne nécessitent que le strict minimum d'installation et de configuration nécessaire pour envoyer et recevoir des données, tandis que la machine hôte gère la majorité de l'installation et de la maintenance du matériel physique réel.

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