En conclusion du dossier sur Windows 7 écrit en collaboration avec PCInpact, j'ai cité quelques projets de recherche en cours chez Microsoft. La presse informatique a déjà beaucoup parlé de l'un d'entre eux: Singularity, un nouveau micronoyau écrit en Sing# (langage MSIL/.NET). Mais j'ai aussi évoqué un projet du nom de code Helios...

Dès 2015 les analystes prévoient que les PC deviennent massivement parallèles.

Multi-Kernel Les systèmes d'exploitation actuels sont conçus pour des architectures homogènes. Chaque processeur est géré de manière équivalente. Mais avec l'arrivée du multicore, des GPGPU et bientôt du manycore, il est nécessaire de revoir en profondeur les fondations. En 2008 Le Microsoft Research (MSR) et l'ETH Zurich System group ont élaboré ex nihilo le système d'exploitation distribué BarrelFish. L'idée est de conceptualiser le PC comme un ensemble de nœuds dans un réseau. Chaque cœur ou GPU est mis en œuvre depuis un micronoyau différent. Chaque noyau est doté de son propre ordonnanceur et de sa propre gestion de mémoire. Les noyaux peuvent communiquer entre eux par des mécanismes de passage de messages. Ce système essaye de bannir le concept d'état partagé et tente plutôt de répliquer les états partagés entre les différents noyaux de la même façon que le font des serveurs au sein d’un cluster. En abandonnant ce concept d’état partagé, les verrous utilisés pour contrôler l'accès des threads aux états partagés deviennent inutiles. Sur un PC manycore avec un système classique, ces verrous seraient devenus de vrais goulots d'étranglement pour les performances.

Architecture de Singularity Mais Microsoft travaille sur un autre projet similaire qui semble plus intéressant. Le système Helios (par analogie au système solaire) constitue une modification du Singularity OS, qui reprend l'idée des noyaux satellites de BarrelFish. Singularity isole totalement les processus par le langage. Ce qui signifie qu'on ne peut pas charger de code (comme des dll) après le chargement du processus. Le processus est dit scellé. 85% des plantages de Windows sont provoqués par les pilotes. Avec ce fonctionnement le pilote tournant dans un SIP (Software Isolated Process) isolé du noyau, ne pourra pas faire planter le système.

Les échanges entre les processus(IPC) se font par des systèmes de canaux d'échanges complètement typés et spécifiés. Singularity intègre uniquement un mécanisme d'échange local sans copie de données.

Les applications Singularity sont compilées en MSIL (code .NET). A l'installation, le compilateur Bartok va compiler le code MSIL en code assembleur de l'architecture cible. Il va aussi vérifier que le code respecte le principe d'isolation des processus et également procéder à d'autres vérifications formelles. Alors que les systèmes actuels sont permissifs et tentent de limiter les dégâts plus tard, Singularity adopte une approche radicalement différente en étant restrictif au départ puis en s'assurant que les applications chargées sont fiables selon plusieurs critères.

Helios Helios peut être représenté par un noyau coordinateur autour duquel orbitent des noyaux satellites. Helios intégre un noyau satellite pour l'architecture XSCale d'Intel et un autre pour les systèmes multiprocesseurs NUMA (un noyau par domaine NUMA). Le noyau coordinateur est chargé de démarrer les autres noyaux et d'initialiser les communications entre eux.

  • Les processus Singularity sont dispatchés entre les différents noyaux. Un processus ne peut pas s’exécuter sur plusieurs noyaux et de même, tous les threads d'un processus ne doivent s’exécuter que sur un seul noyau. Mais sur Singularity la notion de dll a changé. Sur Windows les dll étaient chargées dans l'espace d'adressage mémoire du processus. Avec L'isolation des processus, les dll s'exécutent maintenant dans leur propre processus. Ainsi une application Singularity est maintenant composée d'un ou de plusieurs processus.
  • Les noyaux communiquent entre eux avec le mécanisme IPC de Singularity cité plus haut. Ce mécanisme a été amélioré pour gérer des échanges distants entre les applications. L'implémentation dépend de l'architecture. On notera que du fait qu'il est possible d'utiliser des échanges TCP, on peut imaginer que certains composants du système soient hébergés au sein des datacenters que Microsoft est en train de mettre en place.
  • Il est possible de régler une affinité pour qu'une application privilégie tel ou tel noyau satellite.
  • L'interface (ABI) entre le noyau et les applications est la même sur tous les noyaux satellites.
  • Les applications Helios/Singularity seront compilées à l'installation sur l'architecture cible du noyau satellite choisi. Ces applications exploitent complètement l'architecture matérielle. Si une nouvelle architecture devait apparaitre, Les développeurs n'auraient pas à redistribuer l'application.

Helios ne fonctionne pas avec les GPU actuels qui ne possèdent pas le minimum matériel (il manque un timer et un contrôleur d'interruption). Mais ses concepteurs travaillent déjà sur une implémentation de noyau satellite pour Larrabee. Les noyaux satellites d'Helios nécessitent actuellement 128Mo de RAM et un CPU tournant à 600Mhz mais l'équipe espère pouvoir ramener les prérequis à 32Mo de RAM et à un CPU de quelques centaines de MHz après optimisation.

Benchmarks Helios Sur le document source deux benchmarks ont été publiés. Le premier met en oeuvre un indexeur de disque sans noyau satellite et un noyau satellite sur une carte XScale. Dans le deuxième cas l'application fonctionne 28% plus rapidement. Le deuxième benchmark mesure les performances de l'ordonnanceur. Il mesure le temps pris par 16 threads pour appeler un million de fois l'API threadyield de basculement de thread sur une machine NUMA. Le test avec les noyaux satellites activés est 68% plus rapide. On constate de manière évidente qu'Helios est réellement adapté à ces architectures parallèles.

A la fin du document, Galen Hunt et son équipe expliquent devoir encore réfléchir pour faire fonctionner Windows avec Helios. Le futur de Windows est probablement de devenir un système satellite d’Helios.

Le 16 août 2009 ©Charon www.ma-config.com

sources:

Barrelfish

Helios

Singularity

Source code Singularity et documentation

Master And Subordinate Operating System Kernels For Heterogeneous Multiprocessor Systems

Homogeneous Programming For Heterogeneous Multiprocessor Systems