Début juillet, un groupe d'ingénieurs de Red Hat et de l'Université de Boston a publié un livre blanc, qui proposait de changer le noyau Linux monolithique en architecture unikernels. Nous avons décidé de comprendre le matériel et de discuter de la réaction de la communauté informatique à cette proposition.
Photo - Eamonn Maguire - UnsplashUnikernels comme alternative
Linux est connu pour utiliser un
noyau monolithique . Il gère les processus, les fonctions réseau, les périphériques et l'accès au système de fichiers. Cependant, comme l'écrivent les auteurs de l'article de Red Hat et de l'Université de Boston (
p. 1 ), une telle structure a ses inconvénients. En particulier, les applications hautes performances sont obligées d'utiliser des frameworks comme
DPDK et
SPDK pour obtenir un accès sans entrave aux périphériques d'E / S contournant le noyau.
Certaines difficultés surviennent dans le cloud. Pour plus de sécurité, les applications d'entreprise sont déployées sur des machines virtuelles distinctes. Chaque machine virtuelle est sous le contrôle d'un système d'exploitation à part entière. En conséquence, les ressources informatiques des serveurs ne sont pas dépensées de la manière la plus optimale.
Une approche alternative peut améliorer la situation - unikernels. L'idée suivante est de lier l'application aux bibliothèques nécessaires du système d'exploitation et de les compiler dans un fichier binaire. Après cela, ce «binaire» peut être utilisé pour démarrer le système. Cette approche permet de spécialiser la fonctionnalité de l'OS pour les besoins d'une application particulière.
Les ressources d'un tel système sont dépensées plus efficacement. Les Unikernels ont également des performances plus élevées que l'architecture de noyau monolithique. La raison en est la simplification des chemins d'E / S, car toutes les données et tous les fichiers sont placés dans un seul espace d'adressage. Il élimine également la nécessité de basculer le contexte entre l'espace utilisateur et l'espace noyau.
Une équipe d'ingénieurs de l'Université de Boston et de Red Hat a développé un prototype Linux basé sur les unikernels. Le système d'exploitation s'appelle Unikernel Linux (UKL).
Qu'ont fait les ingénieurs
Selon les développeurs (
p. 3 ), ils n'ont changé que onze et ajouté vingt nouvelles lignes de code au noyau Linux v5.0.5 et
glibc . Le noyau "classique" est resté opérationnel - l'utilisateur peut choisir la méthode d'assemblage (UKL ou non).
Les auteurs ont créé une petite bibliothèque UKL dans laquelle ils ont placé des «talons» spéciaux qui masquent les appels système inutilisés. Ils ont également modifié l'éditeur de liens du noyau pour définir un nouveau type de segments, par exemple TLS (thread local storage) à partir des binaires ELF. Le processus de construction a également été modifié, qui combine désormais le code d'application, la glibc et la bibliothèque UKL en un seul fichier binaire.
Les ingénieurs travaillent sur un certain nombre de lacunes. Par exemple, ils prévoient de déplacer la mémoire
TLS de l'espace du noyau et d'abandonner vmalloc lors de la gestion de l'allocation de mémoire pour simplifier le système.
Avis
Les développeurs de Red Hat
disent que UKL peut être une alternative à part entière pour démarrer des processus qui fonctionnent directement avec le matériel (en contournant le noyau). Les auteurs de l'article d'origine indiquent (
p. 2 ) que le service de mise en cache memcached sous unikernels fonctionne 200% plus rapidement que sous Linux.
Dans l'ensemble, la communauté informatique a également répondu positivement à l'initiative des auteurs de l'article original. Les résidents de Hacker News ont noté que l'architecture des unikernels augmentera considérablement la sécurité de l'environnement logiciel. En cas de piratage de l'application, le pirate n'aura accès qu'à son binaire.
Photos - Jack Young - UnsplashL'un des résidents de Hacker News a même
proposé une solution radicale - réécrire le noyau Linux sous unikernels de zéro à Rust. Selon lui, le langage résoudra le problème
avec un grand nombre de bugs liés à la sécurité de la mémoire. Un autre utilisateur a qualifié l'idée de bonne, mais a
suggéré d' attendre quelques années que les développeurs de langage gèrent les instabilités de la bibliothèque. Bien qu'un passionné écrive
déjà son système d'exploitation à Rust. Les sources peuvent être
trouvées sur GitHub .
Autres implémentations
UKL n'est pas la seule implémentation du système d'exploitation basé sur unikernels. Par exemple, une solution similaire est
développée par une équipe d'ingénieurs de l'Université polytechnique de Virginie, Qualcomm, et de l'Université technique de Rhénanie-Westphalie d'Aix-la-Chapelle en Allemagne. Leur noyau léger s'appelle
HermiTux . Il vous permet de lancer rapidement des applications au-dessus de l'hyperviseur - selon les auteurs, le temps de téléchargement ne dépasse pas 0,1 seconde. La consommation de mémoire dans l'environnement de test est de 9 Mo, soit dix fois moins que le noyau Linux classique.
Il est également logique de mentionner le
système d' exploitation
MirageOS développé sur OCaml. Le noyau peut fonctionner au-dessus des hyperviseurs Xen, KVM, BHyve et VMM (OpenBSD), ainsi que sur les plates-formes mobiles. Le système prend en charge plusieurs dizaines de bibliothèques OCaml pour effectuer des opérations réseau (DNS, SSH, OpenFlow, HTTP, XMPP), en travaillant avec des stockages et un traitement parallèle des données. On peut dire que MirageOS est l'un des premiers projets unikernels réussis. Fait intéressant, son site de blog est également implémenté comme unikernel.
Ces systèmes d'exploitation sont déjà utilisés dans des environnements de production par de nombreuses organisations - par exemple,
l'Université de Cambridge ,
IBM, Ericsson et Docker . Il est probable que bientôt un nouveau rejoindra ces OS - Unikernel Linux.
Ce que nous écrivons sur un blog d'entreprise: