Accueil🇫🇷Chercher

Unikernel

Les unikernels sont des images systèmes spĂ©cialisĂ©es, oĂą tous les processus partagent le mĂŞme espace mĂ©moire, crĂ©Ă©es en utilisant des systèmes d'exploitation bibliothèques. Le dĂ©veloppeur sĂ©lectionne, Ă  partir d'un ensemble modulaire, un ensemble minimum de bibliothèques qui correspondent aux services du système d'exploitation nĂ©cessaires Ă  l'exĂ©cution de son application. Ces bibliothèques sont alors compilĂ©es avec l'application et des configurations pour crĂ©er des images fixes, Ă  but unique, qui fonctionnent directement sur un hyperviseur ou sur du matĂ©riel sans intervention d'un système d'exploitation tel que Linux ou Windows.

Système d'exploitation bibliothèque

Dans un système d'exploitation bibliothèque, les limites de protection sont repoussées vers les bas niveaux, ce qui permet :

  1. un ensemble de bibliothèques qui implémentent les mécanismes nécessaires pour faire fonctionner le matériel ou pour gérer les protocoles réseau;
  2. un ensemble de règles permettant d'appliquer une politique d'accès et d'isolation au niveau de l'application.

Les premiers systèmes de ce type Ă©taient Exokernel  et « Nemesis »[note 1] vers la fin des annĂ©es 1990.

L'architecture des systèmes d'exploitation bibliothèque présente plusieurs avantages et inconvénients en comparaison de la conception de systèmes plus classiques. Un des avantages est que, puisqu'il n'y a qu'un seul espace d'adressage, les transitions de privilège entre l'espace utilisateur et l'espace noyau, régulières sur les systèmes classiques, ne sont pas nécessaires. Ainsi, un système d'exploitation bibliothèque peut offrir des performances améliorées en offrant un accès direct au matériel sans changement de contexte. Un inconvénient est que, puisqu'il n'y a pas de séparation, il est difficile de faire fonctionner plusieurs applications de concert dans un système d'exploitation bibliothèque avec une isolation des ressources. De plus, des pilotes de matériel sont requis pour la machine sur laquelle le système d'exploitation fonctionne. Les changements fréquents du matériel font de ce besoin de réécrire des pilotes régulièrement un problème.

La virtualisation permet d'Ă©viter ces points nĂ©gatifs sur du matĂ©riel courant. Les hyperviseurs modernes permettent de simplement gĂ©rer des machines virtuelles avec le temps processeur qu'elles consomment, tout en fournissant une isolation forte. Un système d'exploitation bibliothèque fonctionnant dans une machine virtuelle n'a besoin d'implĂ©menter que les pilotes pour le matĂ©riel virtuel stable que fournit cet hyperviseur, et peut laisser la tâche complexe de gĂ©rer le vĂ©ritable matĂ©riel Ă  l'hyperviseur. Cependant, des bibliothèques permettant d'utiliser des protocoles rĂ©seau sont toujours nĂ©cessaires pour remplacer les services fournis par un système d'exploitation plus classique. La crĂ©ation de ces bibliothèques de protocoles est la plus grande partie du travail d'implĂ©mentation d'un système d'exploitation bibliothèque moderne[1].

Avantages et inconvĂ©nients 

Les unikernels ont un certain nombre d'avantages, mais aussi d'inconvénients, en comparaison des systèmes d'exploitation classiques.

  • Une sĂ©curitĂ© amĂ©liorĂ©e â€” En rĂ©duisant la quantitĂ© de code dĂ©ployĂ©, les unikernels rĂ©duisent la surface d'attaque et prĂ©sentent donc une sĂ©curitĂ© amĂ©liorĂ©e[2] - [3].
  • Taille rĂ©duite — Il a Ă©tĂ© dĂ©montrĂ© que les unikernels ne faisaient qu'environ 4 % de la taille de bases de code Ă©quivalentes basĂ©es sur un système d'exploitation classique[4].
  • Optimisation du système â€” En raison de la façon dont ils sont construits, il est possible d'optimiser le système entier, des pilotes Ă  l'application, ce qui permet d'amĂ©liorer la spĂ©cialisation[5] - [6].
  • Temps de dĂ©marrage faibles â€” Il a Ă©tĂ© montrĂ© rĂ©gulièrement que les unikernels Ă©taient capables de dĂ©marrer extrĂŞmement rapidement, suffisamment pour rĂ©pondre Ă  une requĂŞte avant son expiration[7] - [8] - [9].

Ces avantages poussent les unikernels vers l'utilisation en tant que systèmes de type orientĂ©-services ou microservices

Cependant, le haut niveau de spécialisation signifie que les unikernels ne sont pas appropriés à l'informatique généraliste, avec plusieurs utilisateurs, pour laquelle les systèmes d'exploitation classiques sont utilisés. Ajouter des fonctionnalités ou altérer un unikernel compilé est en général impossible, et l'approche acceptée est de recompiler et de déployer un nouvel unikernel avec les changements désirés.

Implémentations modernes

Il existe un grand nombre de nouvelles approches à la construction d'unikernels, qui sont à des degrés variables de maturité.

ClickOS

ClickOS[6] - [10] est une plateforme haute performance virtualisĂ©e pour les appliances, basĂ©e sur un système de virtualisation open-source. Des analyses de performance montrent que les machines virtuelles ClickOS sont petites (Mo), dĂ©marrent vite (jusqu'Ă  20 millisecondes), ajoutent peu de dĂ©lai Ă  l'application cible (45 microsecondes), et plus de 100 peuvent ĂŞtre en fonctionnement simultanĂ©, en saturant une interface 10Gb, sur un serveur peu cher standard.

Clive

Clive[11] est un système d'exploitation conçu pour fonctionner dans des environnements de calcul distribué et d’informatique en nuage, écrit dans le langage de programmation Go.

Drawbridge

Drawbridge est un prototype de recherche sur une nouvelle forme de virtualisation pour le sandboxing d'applications. Drawbridge combine deux technologies centrales : un picoprocessus, qui est un conteneur d'isolation basĂ© au niveau processus prĂ©sentant une surface d'API kernel minimale, et un système d'exploitation bibliothèque, qui est une version de Windows modifiĂ©e pour fonctionner efficacement dans un picoprocessus. [12]

Graphene

Graphene[13] - [14] est un système d'exploitation bibliothèque compatible avec Linux qui concentre ses efforts sur la sécurisation d'applications anciennes multi-processus, de type serveur ou shell. Graphene sépare une application multi-processus sur plusieurs picoprocessus, avec les abstractions inter-processus (signaux, files d'attente, sémaphores, etc.) coordonnées sur des flux simples. Pour les applications présentant des principes de sécurité multiples, Graphene peut sandboxer dynamiquement un picoprocessus exposé.

HaLVM

HaLVM[15] (Haskell Lightweight Virtual Machine) est un port de Glasgow Haskell Compiler, qui permet aux dĂ©veloppeurs d'Ă©crire des machines virtuelles haut niveau lĂ©gères qui fonctionnent sur l'hyperviseur Xen.

IncludeOS

IncludeOS[16] est un système d'exploitation bibliothèque minimaliste, orientĂ© services, open-source, et intĂ©grable, visant les services dans le nuage. C'est actuellement un projet de recherche permettant de faire fonctionner du code C++ sur du matĂ©riel virtuel.

LING

LING[17] est un unikernel basĂ© sur Erlang/OTP qui est capable d'interprĂ©ter les fichiers .beam. Les dĂ©veloppeurs peuvent crĂ©er du code Erlang et le dĂ©ployer en tant qu'unikernels LING. LING retire la majoritĂ© des fichiers vecteurs, n'utilise que trois librairies externes et n'utilise pas OpenSSL.

MirageOS

MirageOS[18] - [19] est un système d'exploitation bibliothèque qui permet de crĂ©er des unikernels pour des applications rĂ©seau Ă  haute performance sĂ©curisĂ©es sur une grande variĂ©tĂ© de plateformes mobiles ou dans le nuage. Il existe actuellement plus de cent bibliothèques MirageOS[20] et un nombre croissant de bibliothèques compatibles dans l'Ă©cosystème OCaml.

OSv

OSv (en) est un système d'exploitation conçu par Cloudius Systems spécifiquement pour les machines virtuelles dans le nuage[21]. Capable de démarrer en moins d'une seconde, OSv est développé dans le seul but d’exécuter une application sur un hyperviseur quelconque, ce qui offre de meilleures performances et une gestion simplifiée. OSv peut lancer des exécutables Linux non-modifiés (avec quelques limitations) et supporte les langages C, C++, Ruby, Node.js, et les langages basés sur la JVM.

Rumprun

Rumprun[22] est une pile logicielle qui permet de lancer des logiciels POSIX non-modifiĂ©s dans un unikernel. Rumprun supporte de multiples plateformes, dont le fonctionnement direct sur du matĂ©riel et des hyperviseurs tels que Xen ou KVM. Il est basĂ© sur des rump kernel (en) qui offrent des pilotes logiciel portables, libres, sĂ©parĂ©s en composants, et de qualitĂ©, pour notamment des systèmes de fichiers, des gestionnaires d'appels systèmes POSIX, des pilotes de matĂ©riel PCI, une pile de protocole SCSI, virtio et une pile TCP/IP[23].

Runtime.js

Runtime.js[24] est un système d'exploitation bibliothèque open-source pour le nuage qui fonctionne sur la machine virtuelle JavaScript, qui peut ĂŞtre incluse avec une application et dĂ©ployĂ©e comme une image virtuelle lĂ©gère et immuable. Runtime.js est basĂ© sur le moteur javascript V8 et supporte actuellement l'hyperviseur QEMU/KVM.

Notes et références

Notes

  1. Page de présentation du projet « Nemesis » - Nemesis

Références

  1. « Unikernels: Rise of the Virtual Library Operating System » (consulté le )
  2. « Why Unikernels Can Improve Internet Security » (consulté le )
  3. Anil Madhavapeddy, Richard Mortier, Rotsos Charalampos, David Scott, Balraj Singh, Thomas Gazagnaire, Steven Smith, Steven Hand et Jon Crowcroft, « Unikernels: Library Operating Systems for the Cloud », SIGPLAN Notices (ASPLOS 13), vol. 48, no 4,‎ (DOI 10.1145/2499368.2451167, lire en ligne)
  4. David Kaloper-Meršinjak, Hannes Mehnert, Anil Madhavapeddy et Peter Sewell, « Not-Quite-So-Broken TLS: Lessons in Re-Engineering a Security Protocol Specification and Implementation », Proceedings of the 24th USENIX Security Symposium (USENIX Security 15),‎ (lire en ligne)
  5. Anil Madhavapeddy, Richard Mortier, Ripduman Sohan, Thomas Gazagnaire, Steven Hand, Tim Deegan, Derek McAuley et Jon Crowcroft, « Turning Down the LAMP: Software Specialisation for the Cloud », Proceedings of the 2Nd USENIX Conference on Hot Topics in Cloud Computing,‎ (lire en ligne)
  6. .Joao Martins, Ahmed Mohamed, Costin Raiciu et Felipe Huici, « Enabling Fast, Dynamic Networking Processing with ClickOS », Proceedings of the Second ACM SIGCOMM Workshop on Hot Topics in Software Defined Networking,‎ (DOI 10.1145/2491185.2491195, lire en ligne)
  7. « Just-in-Time Summoning of Unikernels (v0.2) », sur Magnus Skjegstad (consulté le )
  8. « Zerg », sur Zerg — an instance per request demo (consulté le )
  9. .Anil Madhavapeddy, Thomas Leonard, Magnus Skjegstad, Thomas Gazagnaire, David Sheets, David Scott, Richard Mortier, Amir Chaudhry, Balraj Singh, Jon Ludlam, Jon Crowcroft et Ian Leslie, « Jitsu: Just-In-Time Summoning of Unikernels », the 12th USENIX Conference on Networked Systems Design and Implementation (NSDI),‎ (ISBN 978-1-931971-218, lire en ligne)
  10. « ClickOS and the Art of Network Function Virtualization » (consulté le )
  11. « The Clive Operating System » (consulté le )
  12. « Drawbridge », sur Microsoft Research (consulté le )
  13. Tsai Chia-Che, Kumar-Saurabh Arora, Nehal Bandi, Bhushan Jain, William Jannen, Jitin John, Harry Kalodner, Vrushali Kulkarni, Daniela Oliviera et Donald E. Porter, « Cooperation and Security Isolation of Library OSes for Multi-process Applications », Proceedings of the Ninth European Conference on Computer Systems (EuroSys),‎ (DOI 10.1145/2592798.2592812, lire en ligne)
  14. « Graphene library OS », Stony Brook University (consulté le )
  15. HaLVM
  16. IncludeOS
  17. « Erlang on Xen: at the heart of super-elastic clouds » (consulté le )
  18. MirageOS
  19. « MirageOS: A programming framework for building type-safe, modular systems » (consulté le )
  20. « MirageOS TROVE » (consulté le )
  21. Avi Kivity, Glauber Costa, Pekka Enberg, Nadav Har'El, Don Marti et Vlad Zolotarov, « OSv: Optimizing the Operating System for Virtual Machines », 2014 USENIX Annual Technical Conference,‎ (lire en ligne)
  22. (en) Rumprun.
  23. (en) « Rump Kernels », sur rumpkernel.org (consulté le ).
  24. Runtime.js

Articles connexes

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.