VT2021 Cloud-Hypervisor Fiche: Difference between revisions

From air
Jump to navigation Jump to search
No edit summary
 
(15 intermediate revisions by 2 users not shown)
Line 1: Line 1:
= '''Cloud Hypervisor''' =
= '''Cloud Hypervisor''' =
Lucas Chaloyard ([[lucas.chaloyard@etu.univ-grenoble-alpes.fr]]) - Elias El Yandouzi ([[elias.el@outlook.fr]])
* Lucas Chaloyard ([[lucas.chaloyard@etu.univ-grenoble-alpes.fr]])
* Elias El Yandouzi ([[elias.el@outlook.fr]])


== '''Résumé''' ==
== '''Résumé''' ==
Mots clés : Cloud, VMM, Hyperviseur, Rust, KVM, Qemu
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.
Le projet "Cloud Hypervisor" est une VMM open source qui s'exécute au-dessus de KVM.</br>
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.
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.</br>
Il est destiné à exécuter des tâches typiques d'application Cloud moderne.
Il est destiné à exécuter des tâches typiques d'application Cloud moderne.


Line 13: Line 14:
Keywords : Cloud, VMM, Hypervisor, Rust, KVM, Qemu
Keywords : Cloud, VMM, Hypervisor, Rust, KVM, Qemu


The "Cloud Hypervisor" project is an open source VMM that runs on top of KVM.
The "Cloud Hypervisor" project is an open source VMM that runs on top of KVM.</br>
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.
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.</br>
It is intended to perform typical tasks of modern cloud applications.
It is intended to perform typical tasks of modern cloud applications.


== '''A. VMM''' ==
== '''A. VMM''' ==
[[File:VirtBasic.png|none|frame]]
[[File:VirtBasic.png|none|frame]]

[[File:HypervisorLevels.png|none|frame]]
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.
*TO DO : Partie Elias


== '''B. Rust''' ==
== '''B. Rust''' ==
Line 27: Line 28:
'''Performance'''</br>
'''Performance'''</br>
Rust est dépourvu de garbage collector et ne s'exécute pas dans un environnement virtuel.</br>
Rust est dépourvu de garbage collector et ne s'exécute pas dans un environnement virtuel.</br>
L'explicité du langage (typage dynamique) permet au compilateur de produire un code Assembleur d'une efficacité folle.</br>
L'explicité du langage (typage dynamique) permet au compilateur de produire un code Assembleur d'une grande efficacité.</br>
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.
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.</br>
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é'''</br>
'''Securité et fiabilité'''</br>
Line 35: Line 37:
Son système de typage puissant et son modèle d'ownership permet de contraindre le developpeur à garantir une certaine sécurité mémoire.</br>
Son système de typage puissant et son modèle d'ownership permet de contraindre le developpeur à garantir une certaine sécurité mémoire.</br>


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 bugs, mais un développeur ne devrait-il pas être capable par lui même d'éviter de créer ce genre de faille ?

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é'''</br>
'''Productivité'''</br>
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é.
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é.</br>
On pensera à :
* cargo (gestionnaire de crate)
* clippy (linter)
* rustfmt (formatteur)
* plugins vs-code, emacs, vim, etc...


'''Conclusion'''</br>
'''Conclusion'''</br>
Line 51: Line 61:


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


'''Est-ce un problème ?'''</br>
'''Est-ce un problème ?'''</br>
Line 63: Line 73:


Ces 2 projets sont aussi des projets de VMM écrit en Rust, dont certains objectifs se veulent similaires à ceux du Cloud-Hypervisor.</br>
Ces 2 projets sont aussi des projets de VMM écrit en Rust, dont certains objectifs se veulent similaires à ceux du Cloud-Hypervisor.</br>
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)
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.
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'''==
=='''C. KVM'''==


===KVM===
===KVM===
Line 78: Line 88:
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.
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.


[[File:KVM_diagram.png|none|frame|300x400px|Schéma KVM]]
[[File:KVM_diagram.png|none|frame|200px|Schéma KVM]]


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


'''Pourquoi choisir KVM ?'''</br>
===Qemu===
Plusieurs raisons font que KVM est aujourd'hui un choix très intéressant :
*TO DO : Partie Elias
* 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'''==
=='''D. VirtIO'''==
[[File:VirtIO.png|none|frame]]
[[File:VirtIO.png|none|frame]]

*TO DO : Partie Elias
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''' ==
== '''Références''' ==
- https://github.com/cloud-hypervisor/cloud-hypervisor - Repo git du projet Cloud Hypervisor
* 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.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
* https://www.cl.cam.ac.uk/research/security/seminars/archive/slides/2019-05-07-b.pdf - Discussion sur rust-vmm

Latest revision as of 14:33, 29 November 2021

Cloud Hypervisor

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

VirtBasic.png

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.

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 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.

C. KVM

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.

Schéma KVM


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.png

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