当前位置:网站首页>[article de jailhouse] jailhouse hypervisor
[article de jailhouse] jailhouse hypervisor
2022-07-05 05:32:00 【Jia Ming】
Auteur:Maxim Baryshnikov,Université technique tchèque de Prague
Cet article décritJailhouse HypervisorLes principaux concepts et principes de.
Cet article implémente une simple application de démonstration(Interaction avec un minuteur d'événement de haute précision).
Cet article présente un petit système d'exploitation(L4 Fiasco)Migrer versJailhouse cellMoyenne.
Cet article évalue les systèmes de mémoire partagée pourJailhouseEffets des propriétés en temps réel du programme en cours d'exécution.benchmark Les résultats des essais montrent que:,Deux interactionsCPU,Dans le pire des cas,Parce que pour L3 Partage,Réduit la largeur de bande de l'accès à la mémoire.
Catalogue des articles
1. Jailhouse Caractéristiques
Jailhouse Par le développeur en chef Jan Kiszka Responsable, Concentrez - vous sur les exemples liés à la sécurité (Procédés industriels、Aerospace、Médecine, etc), Son scénario d'application est spécial .Jailhouse Les principales caractéristiques de:Ce n'est pas GuestOS Partage symétrique des ressources du processeur multicentrique , Il s'agit plutôt de répartir les ressources entre GuestOS Utilisation indépendante.
Vitaliy Sinitsyn Une telle évaluation,Jailhouse En cours Linux Activer le multiprocesseur asymétrique au - dessus du réglage , Et diviser le système en cell Partition séparée de .Chaque cell Exécuter un GuestOS Et dispose d'un ensemble de ressources allouées entièrement contrôlées (CPU、Zone mémoire、PCIMatériel).Jailhouse Le travail est de gérer cell Et les garder isolés les uns des autres .
Supposons que cet article ait un système multicentrique , Cet article veut utiliser une physique CPU Pour gérer les tâches en temps réel ,L'autre. core Pour l'interaction utilisateur(GUI/HMI), Autre physique CPU Pour la collecte des données des capteurs .Apparemment.,GUI L'application ne peut pas affecter la première physique CPU Travail. Comment éviter d'être dérangé ,C'est ça. Jailhouse Travail.
Jailhouse L'objectif est d'assurer la sécurité des applications industrielles critiques . Ces applications nécessitent généralement une certification par un organisme indépendant conformément à de nombreuses normes de sécurité , L'objectif de la certification est d'obtenir la confiance que le système est suffisamment fiable pour exécuter en toute sécurité les fonctions prévues . Les normes de sécurité classent les fonctions de sécurité en plusieurs niveaux en fonction du niveau de fiabilité requis ( Niveau d'intégrité en matière de sécurité ), Exigences plus strictes pour les systèmes plus critiques . Les systèmes complexes sont difficiles (C'est cher.) Ou ne peut pas être certifié .C'est pour ça que Jailhouse C'est très simple Hypervisor, Il ne contient que des fonctions d'isolement pour isoler GuestOS Fonctions requises.Il n'y en a pas. cell Accès aux appareils qui ne leur appartiennent pas ,Parce que Hypervisor Ça l'arrêtera .Donc,, Les applications en temps réel ne sont pas affectées par ce qui se passe dans d'autres partitions .
Jailhouse Est dans l'Espace utilisateur à travers Jailhouse VMM Le pilote de périphérique qui a fait le super appel pour gérer .Jailhouse Ne fait pas partie du noyau , Il fonctionne au niveau le plus bas . Le module noyau n'est utilisé que pour Jailhouse Le miroir binaire de est chargé dans la mémoire réservée au noyau .
2. celll configuration
Chaque cell(root cell/non-root cell) La configuration statique doit être effectuée avant le démarrage , Cette configuration détermine cell Quelles ressources matérielles sont accessibles .Jailhouse Utiliser *.c Fichier comme profil, Où les paramètres doivent être assignés à un C Champs structurés,Ces champs sont définis dans hypervisor/include/jailhouse/cell-config.h Moyenne.
non-root cell Les champs sont les suivants ,root cell Les champs sont indiqués dans la figure ci - dessous .
Pour root cell, La structure doit contenir (struct jailhouse_system),Au lieu de struct jailhouse_cell_desc, Il n'y a pas de différence entre le reste .
Configuration non-root Seuls les profils manuscrits ,Et root cell, Un tel outil existe ,Il est divisé en deux étapes::
1、jailhouse config collect <name-of-arch.tar> Collecte d'informations sur la plateforme cible .
2、jailhouse config create -r <name-of-arch.tar> <name-of-conf.c> Installation requise python-mako Bibliothèque.Après la création, La configuration est compilée dans le binaire original ,Jailhouse Créationcell Utilisé lorsque.
3. Jailhouse enabling
Jailhouse Le démarrage nécessite les étapes suivantes :
1、 Installer sur la plate - forme cible Linux>=3.18
2、 Compiler l'installation sur la plate - forme cible Jailhouse.
3、In Linux Ajouter une option de réservation pour la zone mémoire dans les paramètres de démarrage du noyau (Par exemple:memmap=), La valeur doit être et .phys_start Et dans root cell En configuration .size Les valeurs des champs sont cohérentes.
4、Chargement jailhouse.ko Module noyau. Cela crée /dev/jailhouse Matériel, L'appareil est accessible par des outils dans l'espace Utilisateur .Jailhouse Programme d'espace utilisateur vers /dev/jailhouse EnvoyerJAILHOUSE_ENABLE Demande, La demande indique au pilote d'appeler jailhouse_cmd_enable()(driver/main.c).Dans cette fonction, Le pilote effectue d'abord quelques vérifications .Il vérifie CPU Marque pour confirmer que CPU Quelle technologie de virtualisation utiliser , Les binaires configurés sont ensuite validés de base .Appelé plus tardrequest_firmware()Fonction dans /lib/firmware Recherche dans le dossier jailhouse-inter.bin Ou jailhouse-amd.bin. Le conducteur effectuera les étapes 2 .La zone de mémoire réservée dans le mappage à la mémoire de l'espace d'adresse du noyau (Utiliserioremap_page_range(…)), Il est donc accessible depuis l'espace Utilisateur Jailhouse, Le pilote copie le binaire au début de cette zone mémoire , Et copier après cell Configuration de.Et puis,Appelez jailhouse_cell_create() Fonctions.
5、Mise en œuvre hypervisor Commande de démarrage:jailhouse enable <path/to/cell/conf.cell>.enable La dernière étape de CPU Initialisation.Jailhouse Pour chaque CPU Appelezentry_hypervisor()Fonction pour démarrer(hypervisor/x86/entry.SDansarch_entry).Jailhouse Il faut être cell Et CPU Interface entre, Il enregistre donc l'état du système ,Et après CPU0 Définir son environnement lors de l'initialisation .Y compris::Pour Jailhouse Et APIC Définir la pagination、 Créer une table de descripteurs d'interruption 、 Créer une extension de machine virtuelle de configuration (VME), C'est aussi réglé UART Communication pour y écrire des informations de débogage ,Il est donc possible de ttyS0 Voir les informations de sortie sur .Pour tous CPU, Ce processus est cohérent :Mise à jour IDT Et GDT,Réinitialiser CR3,Paramètres VMCS.Enfin Hypervisor EnvoyerVMLAUNCH Directives.À partir de maintenant,Linux Ne plus fonctionner sur un métal nu ,Mais dans Jailhouse De cell En cours.
4. Cell initialization and start process
Lorsque l'utilisateur exécute jailhouse cell create <path/to/conf.cell> Heure, Il lit le profil en mémoire ,Et va JAILHOUSE_CELL_CREATE Commande envoyée au pilote ,Appelez jailhouse_cmd_cell_create()(driver/control.c) Copier le profil ci - dessus de la mémoire de l'Espace utilisateur dans l'espace du noyau ,Et oui.cell descEffectuer l'inspection.Et puis, Selon la configuration guestJe l'ai.image,In sysfs Nouveau cellInformations sur, Et demandera CPUDeLinux root cell Est affecté à ,DeLinuxDésinstallation moyennePCIMatériel.JailhouseSimulationPCI Le pilote virtuel le déplace de LinuxSupprimer, Parce qu'il n'y a pas de vraie sortie . Quand le conducteur émet JAILHOUSE_HC_CELL_CREATE Quand on fait un super appel ,JailhouseAppelez hypervisor/control.cDanscell_create(),Donner des ordres, Que tout soit nouveau cell Processeur en pause pour , En plus du processeur actuel , Il peut empêcher la concurrence entre eux .
Et puis,C'est parti.cellProcessus d'initialisation.cell_init()La fonction utiliseI/O La valeur du bitmap du port est remplie cellDans la structurecpu_setChamp, Et appelle le processus pour enregistrer PCI、IOAPICEtIOMMU Emplacement et gestionnaire du dispositif de cartographie de la mémoire égale .Et puis,VérifiezCPU Après ne pas avoir été assigné ,Passer àarch_cell_create()(hypervisor/arch/x86/control.c),C'est parti."shrinking". .L'accent est mis ici sur le concept de distribution individuelle :Siroot cell Il y a une première cellCe qu'il faut,AlorsLinux cell(root cell) L'accès sera refusé ,Et le nouveaucellPrends - le,Dans ce cas,,Linux cell S'arrêtera à la première visite . En réattribuant I/OPort、IOAPIC、IOMMU、PCI Après avoir attendu les ressources , Configurer la zone de communication (C'esthypervisorEt spécifiquecell Chaque cellZone mémoire partagée). Il contient également des informations sur PM Informations sur l'adresse du minuteur ,RépartitionCPUNombre,Contient le courantcellÉtat de(Par exemple,running、running/locked).
Enfin,cell Sera soumis à cell list, Dans la zone de communication cell L'état sera réglé à JAILHOUSE_CELL_SHUT_DOWN,Et pour chaquecellDeCPU,JailhouseEnvoyerarch_cpu_resume().
Pour le nouveau cellExécution intermédiaireinmate,Il fautinmateDéplacer verscellLa zone mémoire de:jailhouse cell load <name-of-cell> <inmate.bin> -a <off-in-guest>
Tous lesinmates Sont considérés comme des binaires originaux . La taille de ce binaire doit être inférieure ou égale à guestZone mémoire.Le pilote va JAILHOUSE_HC_CELL_SET_LOADABLEEnvoyé àhypervisor, Et marquer comme chargeable guest La zone est redessinée à root cell Espace d'adresse pour. Vous pouvez voir les informations du port série :“Cell can be loaded”. Le pilote stocke les binaires à une adresse donnée .
Enfin, Pour le démarrer , L'utilisateur devrait appeler :jailhouse cell start <name-of-cell>,Cela conduit àHyperCall —— JAILHOUSE_HC_CELL_START, De son point de vue ,Il peut causerJailhouseDecell_start()Exécution à partir deroot cellÀGuest Toutes les zones rechargeables non cartographiées pour .cellL'état deJAILHOUSE_CELL_RUNNING,Et danscellChaqueCPUAppel supérieurarch_cpu_reset().Ça va aller verscellChaqueCPU Envoyer de fausses interruptions entre les processeurs de démarrage (SIPI).À la prochaine#VMEXITHeure,Guest Le pointeur de commande sera réglé à 0xFFFF0,EtinmateDébut de la mise en œuvre.
5. Inmate demos
Jailhouse Offre un petit cadre , Il est facile de développer des applications simples sans système d'exploitation .Dépendances library Le fichier d'en - tête est défini à inmate.h Moyenne, Il contient l'allocation de mémoire et le remap 、APIC Et IOAPIC Initialisation de、 Paramètres du gestionnaire d'interruption 、Avec PCI Certaines interactions de l'appareil sont même fondamentales SMP Fonctionnement(smp_wait_for_all_cpus()、smp_start_cpu()).
inmates Code de démarrage pour(header.S for 64-bit、header-32.S for 32-bit)Par exemple:Listing 2.4Comme indiqué.Jailhouse Moyenne inmates Le point d'entrée de 0xFFFF0, Il faut un petit tour pour passer à 16 Code bit section (PourGDT Et les paramètres du drapeau de mode de protection ).inmate Binaires à offset 0xF0000Charger versGuestOSMoyenne.
Listing 2.5 Fichier de description de lien affiché dans (inmate.lds) Ce qui suit a été assuré .16Bitwisestartup Le segment est lié au début du binaire (0x0000).boot Paragraphe suivant startupAprès le paragraphe,Fixé à0xFFF0, Donc, après avoir ajouté l'adresse offset , Donne l'adresse d'entrée correcte ..text、.data、.rodata Certaines ont leurs adresses de mémoire virtuelle (VMA,Exécutionoutput fileHeure, Adresse virtuelle de la section ), Il s'agit notamment des décalages de chargement . Mais leurs adresses de mémoire de chargement (LMA, L'adresse de chargement de cette section ) Pas de décalage chargé .
Donc,,In0xFFF0De.boot Le paragraphe n'a qu'une seule instruction :ljmp $0xf000, $start16,Ça faitinstruction pointerÀ l'adresse physique0xf0000Avancez..Après,QuandGDT Et lorsque le drapeau du mode de protection est réglé ,Il va sauter à32Code bit, Configuration de la pagination ici ,Et enfin,inmate_main()Entrée de la fonction.
5.1 APIC demo
APIC-Contrôleur d'interruption Programmable avancé.C'est typiqueinmate, Habituellement utilisé pour la démonstration JailhouseFonction.Il estAPIC Le minuteur fixe l'interruption et mesure le temps réel entre l'événement .En plus de ça,, Il montre également l'utilisation des communications inter - domaines et manipulate the cell state.
Le demo Le profil de Listing 2.8 Comme indiqué,configs/apic-demo.c, Deux zones mémoire sont définies :Chargement inmate La zone mémoire de(1MB), Zone de communication adjacente (4KB), Ce dernier a un logo supplémentaire JAILHOUSE_MEM_CONMM_REGION,JeanJailhouse Savoir où lire /Écrire un message, Il sera sur le port série 0 Imprimer un journal sur .
Launching apic-demo cell:
jailhouse cell create /jailhouse/configs/apic-demo.cell
jailhouse cell load apic-demo /jailhouse/inmates/apic-demo.bin -a 0xf000
jailhouse cell start apic-demo
jailhouse cell shutdown apic-demo
jailhouse cell shutdonw apic-demo
demoAprès le début de l'opération,cell stateEst réglé à JAILHOUSE_CELL_RUNNING_LOCKED,C'est par le réglagecommo_region->cell_stateRéalisé,En général,Cela signifieJailhouseImpossible.shrink cell.Après, Compteur d'horodatage d'étalonnage de l'application (inmates/lib/x86/timing.c),Et initialiserAPICMinuterie. Ensuite, définissez le gestionnaire pour l'interruption du minuteur ,Donc,, Chaque fois que la prochaine interruption se produit , Qui calcule le Jitter .“ Jitter est l'heure et le temps prévus (Retard)Les différences entre,En termes de performance,Plus petit signifiejailhouse Moins je sens ”. Le programme attend un message dans la zone de communication , En cas de demande de fermeture , Le programme envoie un message , Indique que vous ne pouvez pas fermer maintenant , Si cette demande est présentée une deuxième fois ,apic-demoLe cycle sera interrompu.Oui.apic-demoDecellChangement de statutJAILHOUSE_CELL_SHUT_DOWN,Alors...Jailhouse Sachant que le processus de fermeture se déroule bien .
5.2 HPET demo
Minuterie d'événements de haute précision réalisée par l'auteur .
6. L4 Fiasco.OC launch
Incell Lors de l'utilisation de programmes en métal nu , Peut aider à résoudre des problèmes simples ,Mais dans la plupart des cas,, Quand quelque chose de plus complexe doit être réalisé (Pile de protocole réseau、Conduite automatique, etc.)Heure, Le système d'exploitation doit fonctionner ,Donc,, Migrer certains systèmes d'exploitation vers inmate C'est nécessaire..
Pour l'instant,Ça pourrait être dansnon-root cellDémarrage moyenLinux,EtDocumentation/non-root-linux.txt Comment faire , Le noyau doit être modifié et configuré d'une manière spécifique , Les outils d'espace Utilisateur utilisés pour démarrer le noyau doivent également être créés .Mais, Face à une mission en temps réel ,Linux Je ne peux pas .
SélectionnerFiasco.OC La transplantation est effectuée pour répondre aux exigences en temps réel .
6.1 Overview
Fiasco.OC C'est l'Université de Dresde Fiasco Système d'exploitation basé sur le micronoyau développé par l'équipe .Elle a été créée parL4 Le micronoyau de L4Environnement d'exécution(L4Re) Composition des programmes pertinents au niveau de l'utilisateur . Le noyau lui - même est très simple . Il fournit également une communication inter - processus (IPC)、Création/Supprimer l'espace d'adresse(Mission) Et les fonctions de base comme les fils .
FiascoMinimalisme: Au total, le micronoyau fournit 7Appels système,En d'autres termes,, Le micronoyau n'utilise que 7 Les appels système dominent le monde .
La configuration minimale pour démarrer le système d'exploitation doit contenir FiascoNoyau、AppeléSigma0DeRoot-Pager、Root-Task(Moe) Et au moins une application utilisateur - espace fonctionnant dessus .Sigma0 La mémoire d'utilisation est disponible pour les programmes d'espace Utilisateur (Remap、Distribution, etc)DeAPI.Moe Exécuter sur le gestionnaire de pagination , C'est la première tâche que le noyau a lancée . Il fournit des interfaces plus abstraites pour toutes les autres applications spatiales utilisateur .
6.2 Fiasco Processus de démarrage
Pour la transplantation Jailhouse,FiascoConfiguration du système、 Configuration du processus de démarrage 、Configuration du noyau.
7. Benchmarks
Évaluer les différentes paires de systèmes de mémoire cell Impact de performance du logiciel en cours d'exécution . Test quand différent cell Impact sur l'accès simultané à la mémoire .
Dans un processeur Multi - Core normal ,corePartageL3Cache, Et le reste du système de mémoire est partagé .Supposons maintenant,Chaquecore Exécuter une procédure complètement différente ,Donc,, Chaque programme a besoin d'accéder à une zone mémoire différente ,Dans ce cas,,core Ils seront en concurrence les uns avec les autres cache, Et le temps d'accès à la mémoire augmentera .En outre,Quand uncore Vous voulez accéder à la mémoire en même temps qu'un autre core Je veux aussi accéder à la mémoire , Il doit y avoir un coreIl faut attendre.,Dans ce genre decore En cas de concurrence ,L'un d'eux.core Les applications à forte intensité de mémoire sur ralentissent considérablement les autres coreApplication on. Tous ces problèmes mentionnés ont un impact négatif sur le temps réel et la sécurité du système .
A réalisé unbenchmark,LebenchmarkÇa pourrait être danscellMoyenne、 Fonctionnement sur métal nu . L'objectif est d'étudier l'utilisation de JailhouseHeure, Si l'accès à la mémoire ralentit .
边栏推荐
- How can the Solon framework easily obtain the response time of each request?
- Zzulioj 1673: b: clever characters???
- 2017 USP Try-outs C. Coprimes
- 剑指 Offer 35.复杂链表的复制
- 剑指 Offer 04. 二维数组中的查找
- 服务熔断 Hystrix
- Developing desktop applications with electron
- Sword finger offer 58 - ii Rotate string left
- Educational Codeforces Round 116 (Rated for Div. 2) E. Arena
- [to be continued] [UE4 notes] L3 import resources and project migration
猜你喜欢
Pointnet++的改进
A misunderstanding about the console window
Sword finger offer 04 Search in two-dimensional array
YOLOv5添加注意力機制
剑指 Offer 04. 二维数组中的查找
National teacher qualification examination in the first half of 2022
Pointnet++学习
Yolov5 adds attention mechanism
Support multi-mode polymorphic gbase 8C database continuous innovation and heavy upgrade
浅谈JVM(面试常考)
随机推荐
26、 File system API (device sharing between applications; directory and file API)
The present is a gift from heaven -- a film review of the journey of the soul
Codeforces Round #732 (Div. 2) D. AquaMoon and Chess
object serialization
[to be continued] [UE4 notes] L2 interface introduction
Pointnet++ learning
The number of enclaves
Yolov5 adds attention mechanism
过拟合与正则化
kubeadm系列-02-kubelet的配置和启动
利用HashMap实现简单缓存
[to be continued] [UE4 notes] L1 create and configure items
ssh免密登录设置及使用脚本进行ssh登录并执行指令
卷积神经网络——卷积层
National teacher qualification examination in the first half of 2022
[to be continued] [depth first search] 547 Number of provinces
第六章 数据流建模—课后习题
Light a light with stm32
Add level control and logger level control of Solon logging plug-in
Haut OJ 1352: string of choice