La paravirtualisation

tech-presentation-2Je vais continuer et finir la série d’articles présentant les différents types de virtualisation. J’ai déjà eu l’occasion de proposer une classification des différents types de virtualisation et de parler de la virtualisation totale ainsi que de la virtualisation matérielle assistée. Je vais continuer en vous parlant de paravirtualisation. J’ai déjà eu l’occasion d’évoquer la notion de paravirtualisation dans la présentation de Xen que j’avais faite il y a quelques temps.

L’idée de base des précédents types de virtualisation était de faire croire au système d’exploitation qu’il s’exécutait sur une machine physique alors que ce n’était pas le cas. Cette technique est la technique la plus évidente lorsqu’on essaye de virtualiser des systèmes d’exploitation principalement propriétaires ce qui est le cas de VMWare par exemple. Il s’agit d’une méthode qui permet de centraliser toutes les fonctionnalités de virtualisation dans un seul endroit, à savoir la couche de virtualisation. L’inconvénient de cette méthode est que la couche de virtualisation devient rapidement très lourde avec la quantité croissante du nombre de fonctionnalités à implémenter.

La paravirtualisation adopte une vision radicalement différente. Au lieu de chercher à faire croire aux systèmes d’exploitation qu’ils s’exécutent sur une machine physique, il est possible d’adapter le système d’exploitation à la couche de virtualisation. Ceci n’aurait bien évidemment pas été possible sans la présence de logiciels libres…

virtus

La paravirtualisation vise donc à modifier les systèmes d’exploitation pour communiquer avec un hyperviseur au lieu de communiquer avec une machine physique. Sur ce blog, je parlerais d’hyperviseur au sens de Xen ou d’Hyper-V. VMWare parle d’hyperviseur à tord et à travers mais il ne s’agit pas, selon moi, d’un vrai hyperviseur. En réalité, il s’agit d’un système d’exploitation hôte déguisé.

L’hyperviseur au sens de la paravirtualisation est en contact direct avec le matériel physique. Il est l’intermédiaire exclusif entre le matériel et les systèmes d’exploitation. Lorsqu’on se trouve donc dans un système de paravirtualisation, il n’y a plus de notion de système d’exploitation invité et de système d’exploitation hôte. Tous les systèmes d’exploitation sont virtualisés dans le sens où ils disposent d’un noyau adaptés à la couche de virtualisation. Tous les systèmes d’exploitation ne seront pas égaux pour autant, il est possible de donner des accès spécifiques à différents systèmes d’exploitation.

Les systèmes d’exploitation communiquent avec l’hyperviseur via des API de communication. Ces API de communication remplacent les traditionnels appels systèmes. Chaque couche de virtualisation dispose donc de sa propre API. Pour adapter un système d’exploitation à un hyperviseur, il faut donc intégrer son API au noyau. Cela explique en partie le passage en GPL des pilotes Hyper-V de Microsoft.

Au final, la paravirtualisation est une technique particulièrement innovante qui présente une approche plus efficace de la virtualisation. Les avantages de cette technique sont une perte de performance largement réduite par rapport à une virtualisation totale. L’inconvénient majeur est qu’il est nécessaire d’adapter les systèmes d’exploitation pour chaque couche de virtualisation. Afin de résoudre ce problème, il est possible de coupler paravirtualisation et virtualisation matérielle assistée comme dans Xen.

Un site d’entraide informatique : ServerFault

Par le biais de ce billet, je vais faire une petite parenthèse sur un site qui m’a sauvé la vie bon nombre de fois. Si vous avez déjà été amené à utiliser des logiciels dans votre vie, vous avez sans aucun doute rencontré bon nombre de problèmes qui ne semblent pas exister. A ce stade, soit vous avez un contrat de maintenance ou quelque chose de cet ordre, soit vous vous débrouillez.

Pour vous débrouiller, vous cherchez dans Google qui vous renvoi différents forums. Le soucis des forums c’est qu’il est difficile de juger de la qualité de la réponse d’une personne. De plus, souvent les gens qui obtiennent une réponse n’indique pas si la réponse a fonctionné ou si ils ont utilisé cette réponse pour trouver la solution. Je pense que ceci est lié au fait qu’on est tellement content d’avoir trouvé la solution qu’on pense à autre chose que de prévenir les copains. De plus, les forums ont tendance à rapidement vous envoyer une réponse du type « RTFM » (Read The Fu***** Manual) ou « Utilise le moteur de recherche ! ». Vous allez donc utiliser le moteur de recherche mais vous allez pas trouver votre réponse, sinon ce ne serait pas rigolo..

logo

Vous l’aurez compris, je trouve que les forums ne constituent pas le modèle idéal pour la résolution des problèmes. Les gentils gens de ServerFault ont donc pensé à un nouveau modèle de site web plus Web 2.0.  Cette expression ne veut pas dire grand chose mais je pense que ca traduit l’idée du modèle collaboratif avec tout plein d’AJAX et le remplacement des répertoires par des tags.

ServerFault est donc un site d’entraide d’administration système et de réseau. Lorsqu’une personne poste une réponse, les gens lui répondent comme sur un forum classique. La différence est qu’au lieu de jauger la qualité d’une réponse d’une personne par le nombre de posts d’une personne, il y a un système de notation. Si vous passez par là et que la réponse vous semble pertinente et exacte, vous pourrez alors voter pour cette réponse. Si la réponse vous semble mauvaise ou hors, vous pourrez voter contre cette réponse. Au final, les différents votes attribuent des points de réputation aux différentes personnes.

serverfault

De plus, l’auteur a la possibilité de très simplement désigner une réponse en tant que réponse qui lui a permis de solutionner le problème. Ainsi les suivants pourront savoir quelle réponse a permis de solutionner le problème. La désignation par l’auteur de la question attribue également un certain nombre de points.

J’ai déjà eu l’occasion de tester longuement ce site en tant qu’aide et en tant que poseur de questions. Il est agréable d’aider les gens car on voit que cela est utile dans la mesure où sa réputation augmente. De plus, il est possible de discuter en aparté d’une réponse au lieu d’avoir un gros flux de message peu lisible. Lorsque vous posez des questions, même pointues, il est agréable d’avoir des gens qui connaissent bien le sujet qui vous répondent. Il est également très facile de trouver une précédente question par le biais du système des tags.

Le seul soucis est que ce site est en anglais… Il existe également une version dédiée à la programmation nommée StackOverflow.

Un client OpenVPN pour Mac OS : Viscosity

Je suis heureux possesseur d’un MacBook depuis Octobre dernier. Avant cet achat, j’avais toujours été un utilisateur de PC en tous genres sous Windows puis sous Linux. Le passage à Mac fait un certain changement. Je ne parlerais pas d’un gros changement car en tant qu’utilisateur de Linux, on retrouve assez vite des repères.

Qui dit PC portable, dit mobilité. Qui dit mobilité, dit hotspot wifi non sécurisés. Un portable est donc une machine particulièrement sensible en terme de confidentialité des données et des échanges avec Internet. Utiliser Internet sur un hotspot public est particulièrement peu sécurisé surtout dans les grands lieux publiques tels que les gares SNCF. Il est possible de récupérer tous types de données transmises en clair très simplement. De plus, lorsqu’on se retrouve sur un réseau convenablement protégé de nombreux ports sont bloqués et il peut s’appliquer un filtrage web.

L’utilisation d’OpenVPN s’impose donc. Je sais qu’il existe de nombreuses alternatives payantes telles que Cisco VPN ou autres mais pour une utilisation personnelle, c’est plutôt superflu. Lorsque mon PC portable était sous Ubuntu, l’utilisation d’OpenVPN était tout à fait simple. Il suffisait de refaire le fichier de configuration en se calquant sur le serveur et le tour était joué. Au passage, pour installer OpenVPN, je vous conseille de consulter le tutoriel de Smurf disponible sur le site de Gayux.

Pour les utilisateurs de MacOS, je vous recommande donc chaleureusement l’application Viscosity.

L’installation se fait de manière tout à fait simple. Il suffit d’ouvrir le .dmg et de cliquer sur l’installeur. Il vous demandera plusieurs fois votre mot de passe root afin de pouvoir installer les différents modules nécessaires à son bon fonctionnement.

La configuration se fait de manière très simple. L’intitulé des champs à renseigner ressemble beaucoup aux différentes directives du fichier de configuration d’OpenVPN. Vous avez également la possibilité de visionner le log de la connexion à votre serveur VPN afin de pouvoir détecter de potentielles erreurs.

gui1

Cette application vous permet également de visionner quelques statistiques d’utilisation de votre liaison VPN. C’est pas super utile mais non moins joli.

detailswin

Une petite icône présente sur la barre du haut de votre écran vous permet à tout moment d’avoir un aperçu de l’état de votre connexion et de passer d’un VPN à un autre.

screenshot1_small

Au final, Viscosity est une application très efficace qui fait ce qu’on lui demande de faire. En plus, elle est plutôt jolie. Vous pouvez l’essayer gratuitement pendant 30 jours et puis ensuite vous pourrez l’acheter pour la modique somme de 9 USD.

La véritable intégration de la virtualisation dans le réseau

tech-presentation-2J’ai déjà eu l’occasion de parler à travers différents articles de virtualisation de systèmes d’exploitation. Je vais bien entendu continuer cette série d’articles afin de faire le tour de tous les types majeurs de virtualisation cependant je souhaiterais faire une petite parenthèse. Cet article fait suite à une démonstration technologique à laquelle j’ai pu assister dans le cadre de mon stage.

La virtualisation est une technique qui met à mal les configurations et la conception traditionnelle du réseau. Traditionnellement, derrière un port d’un équipement réseau se trouve une machine. Sur cette machine on retrouve une adresse mac et un adresse IP. La virtualisation chamboule cette convention. On se retrouve rapidement à avoir un nombre important de d’adresses mac et d’adresses IP derrière un même port physique. De plus, traditionnellement un port sur lequel on branche une machine est un port en mode « access » en langage Cisco (non propagation des étiquettes de VLAN) alors qu’avec la virtualisation ces ports vont devoir se trouver en mode « trunk » (propagation des étiquettes de VLAN).

Les choses se compliquent de manière significative dès qu’on commence à insérer la notion de migration de machines virtuelles. Traditionnellement, un déplacement de machine nécessite le déplacement d’un technicien et la reconfiguration des équipements. Avec la virtualisation, la migration de machines virtuelles se fait en deux clics à distance et ne doit pas nécessiter l’intervention d’une personne sur site. Ce qui change fondamentalement, c’est qu’on va devoir adapter la configuration du réseau à la volée en fonction de changements applicatifs.

Le réseau est habitué à s’adapter à des changements au niveau 3 du modèle OSI avec les nombreux protocoles et algorithmes de routage. Le réseau est capable de s’adapter tant bien que mal aux changements de topologie de niveau 2 avec des technologies telles que le Spanning Tree. Cependant, il n’a pas du tout l’habitude de s’adapter à des changements applicatifs. Or dans le cas de la migration de machines virtuelles, il va falloir qu’il le fasse et qu’il le fasse vite et bien.

La virtualisation va donc s’interfacer avec le réseau pour pouvoir le commander et le faire s’adapter en fonction des migrations de machines virtuelles. L’interfaçage avec une interface de configuration du réseau sera donc indispensable. La mise en place d’un équipement réseau (virtuel ou physique peu importe) pour coordonner ces modifications et modifier les topologies va également être nécessaire.

En termes de fonctionnalités, chaque machine virtuelle va avoir son propre port virtuelle sur lequel il sera possible d’associer des configurations qui s’attribuent traditionnellement aux ports de switchs ou de routeur. L’équipement réseau virtuel pourra être capable de servir de routeur, d’IDS ou même de firewall applicatif. La gestion du réseau sera centralisé car il est indispensable de pouvoir gérer tous les équipements réseau d’un seul emplacement afin d’avoir une harmonie.

Vous allez me dire que tout ceci est bien beau et bien sympa, et vous aurez bien raison. Cependant sans implémentation pratique cela ne servirait pas à grand chose. Il n’existe, hélas, aucune implémentation libre de ce type d’application mais il en existe cependant des implémentations propriétaires. J’ai nommé Cisco Nexus 1000v mais qui n’est disponible que pour VMWare. Selon certaines informations, Citrix serait également en train de travailler sur une implémentation open source d’un telle application ce qui serait une avancée majeure pour la virtualisation open source ! De plus, la plateforme Cisco Nexus 1000v semble être prévue pour être exécutée sur plusieurs hyperviseurs étant donné qu’il est possible de spécifier le type d’hyperviseur. Aujourd’hui, seul VMWare fonctionne mais pourquoi pas Xen demain ?

Ca, c’est le futur de la virtualisation ! Et ca fait plaisir !

La virtualisation matériel assistée

tech-presentation-2Je vais continuer dans la suite logique des billets précédents. Pour rappel, j’ai précédemment parlé de l’intérêt de la virtualisation, proposé une classification des différents types de virtualisation et puis expliqué plus en détail la virtualisation totale. Je vais donc continuer cette série d’article en vous parlant de virtualisation matériel assistée.

Tout d’abord, le terme de virtualisation matériel assistée semble assez explicite. On comprend bien qu’il s’agit de virtualisation qui va être assistée par une fonctionnalité spécifique du matériel. Les détails du fonctionnement de cette technologie le sont cependant bien moins. Ce terme est une traduction de l’anglais « Hardware Assisted Virtualization ». On peut aussi trouver comme autre traduction « virtualisation assistée par matériel ». Tous ces termes sont cependant équivalents. Cependant, la virtualisation partielle n’a aucun rapport.

HAV

Comme vous pouvez le voir, le schéma d’architecture ne change que très peu par rapport à la virtualisation totale. Avec la virtualisation totale, nous parlions de couche logicielle de virtualisation alors que parlerons plutôt de « Virtual Machine Monitor » ou VMM dans le cas de la virtualisation matériel assistée.

Une extension du jeu d’instructions du processeur

Ensuite, il est important de préciser que la virtualisation matériel assistée n’est pas une technique à part entière. Il s’agit en réalité d’une extension du principe de virtualisation totale. La principale modification qui est apportée est l’ajout d’extensions processeur de virtualisation. Vous en avez surement entendu parlé, je parle bien d’Intel VT et d’AMD-V. Ces instructions ont été implémentées dans les processeurs afin de pouvoir améliorer la virtualisation totale. Ces instructions sont une extension du jeu d’instructions exécutables par le processeur similairement à SSE ou MMX.

Ces instructions apportent plusieurs améliorations. Tout d’abord, elles créent un anneau -1 qui sera l’endroit privilégié de l’exécution d’un hyperviseur. Ceci permet de garder la localisation traditionnelle des anneaux avec le système d’exploitation présent dans l’anneau 0 et les applications dans l’anneau 3. Les autres ne sont jamais utilisé à l’exception de quelques rares cas. J’aurais l’occasion de revenir plus tard sur la notion d’anneau. Le placement du système d’exploitation dans son anneau traditionnel permet de simplifier l’accès à certains instructions et donc de supprimer une partie du travail de la couche de virtualisation.

De plus, elles permettent aux machines virtuelles de gérer leurs propres interruptions et donc changements de contexte. Ceci évite à la couche logicielle de virtualisation de devoir les gérer. Egalement, elles permettent au matériel de gérer directement  les zones de mémoire vive (non forcément linéaires) disponibles au machines virtuelles. Sans les extensions, il était nécessaire que la couche de virtualisation émule et gère des zones.

Si vous souhaitez plus d’informations sur ces instructions, je vous invite à consulter la documentation d’Intel disponible ici ou ici.

Au final, les extensions processeur de virtualisation permettent d’améliorer la technique de la virtualisation totale. Ceci se fait par l’ajout d’un degré d’intelligence au niveau du matériel qui sera conscient de l’utilisation d’une couche de virtualisation. La virtualisation matériel assistée est donc une évolution du principe de virtualisation totale.

Les différents types de virtualisation : La virtualisation totale

Dans l’article précédent, j’ai proposé une classification des différents types de virtualisation de systèmes d’exploitation basée sur différents critères. Je vais continuer cette série d’articles en vous présentant la virtualisation totale qui est le type de virtualisation le plus répandu historiquement.

La virtualisation totale consiste à émuler l’intégrité d’une machine physique. Pour rappel, l’émulation est le principe qui consiste à remplacer un composant matériel par une application dont le comportement est similaire voire identique. Le cas le plus classique d’émulation est l’émulation de vieilles consoles de jeux telles que la Super Nintendo ou la Game Boy. L’objectif de la virtualisation totale est donc de faire croire au système d’exploitation invité qu’il est présent sur du matériel physique et non au dessus d’une couche applicative.

Il s’agit de l’approche la plus basique en terme de virtualisation : « On ne peut pas avoir du matériel physique du coup on va le remplacer par une application ». Il s’agit de la première approche qui a été adoptée par VMWare en 1999 lors de sa création.

Virtualisation Totale

Comme présenté dans le schéma, la base installée sur le matériel est un système d’exploitation classique. Tous les systèmes d’exploitation, à ma connaissance, sont capables d’exécuter une application de virtualisation totale. Ceci est lié à la simplicité de son fonctionnement. La « Couche Logicielle » évoquée dans le schéma est une application telle que VMWare ou VirtualBox qui s’exécute comme toute autre application. Cette couche logicielle va ensuite émuler autant de matériel qu’il y a de machines virtuelles.

Certains vendeurs telles que VMWare vendent des solutions de virtualisation nommées « Bare Metal Hypervisor ». Cependant ce que VMWare appelle hyperviseur n’est absolument pas un hyperviseur au sens de Xen. Il s’agit en réalité d’un Linux Red Hat customisé.

L’inconvénient de la virtualisation totale est la performance. Il est nécessaire d’émuler de nombreux composants physiques et de capter toutes les instructions émanants des machines virtuelles ce qui consomme beaucoup de ressources. Des tests montrent de pertes de performance de l’ordre de 20% à 80%. Il est possible d’améliorer significativement les performances en ajoutant des pilotes de paravirtualisation qui permettent un meilleur interfacage avec la couche logicielle sous-jacente.