Artisan Numérique

/système/virtualisation/virtualbox/ Decouverte de VirtualBox

J'ai découvert Virtual Box, complètement par hasard, en cherchant à régler un conflit de performance entre VmPlayer et le kernel standard de la nouvelle mandriva 2008.0. L'ensemble patinant comme pas possible, je me suis donc lancé dans un gouglage de circonstance pour comprendre d'où venait le mal. C'est alors que je tombe sur un article parlant de Virtual Box. Dans mon petit cerveau qui traite souvent bien trop vite les informations qui nous arrivent en flot dense et continu, je connaissais bien ce nom mais l'avais classé un peu rapidement dans la catégorie "Nième virtualisation spécialisé pour les *nix".

Et bien voilà une bien grosse erreur car Virtual Box accepte TOUS les OS basés sur du code i86. Il est à ce titre un équivalent de VmWare WorkStation s'offrant le luxe de tourner aussi bien sur MacOS, Linux et Windows.

J'ai découvert Virtual Box, complètement par hasard, en cherchant à régler un conflit de performance entre VmPlayer et le kernel standard de la nouvelle mandriva 2008.0. L'ensemble patinant comme pas possible, je me suis donc lancé dans un gouglage de circonstance pour comprendre d'où venait le mal. C'est alors que je tombe sur un article parlant de Virtual Box. Dans mon petit cerveau qui traite souvent bien trop vite les informations qui nous arrivent en flot dense et continu, je connaissais bien ce nom mais l'avais classé un peu rapidement dans la catégorie "Nième virtualisation spécialisé pour les *nix".

Et bien voilà une bien grosse erreur car Virtual Box accepte TOUS les OS basés sur du code i86. Il est à ce titre un équivalent de VmWare WorkStation s'offrant le luxe de tourner aussi bien sur MacOS, Linux et Windows.

Qu'est-ce que la virtualisation ?

Nous pourrions couvrir un livre complet sur le sujet, il y en a d'ailleurs déjà beaucoup. Pour faire simple, il faut partir de la problématique de départ. A savoir, comment exécuter sur une machine donnée (la votre ;-) ), une application, un programme, qui a été écrit pour une autre machine qui n'a rien à voir (autre processeur, autre siècle, etc...).

La première réponse à cette question fût l'émulation. Un émulateur est un programme qui va servir d'interprète. Son travail peut être décomposé en deux temps. Tout d'abord il va "traduire" le binaire à exécuter dans le language natif de votre système et donc de son micro-processeur. Ensuie, à chaque fois que l'application traduite va cherche à écrire sur un disque, à afficher quelque chose sur l'écran, l'émulateur va intercepter cet appel pour le faire passer par ses propres rouages.

L'émulation est un processus complet efficace à 100%. Il permet d'exécuter sur un PC des programmes prévus pour des machines qui n'ont rien avoir. Des émulateurs permettent par exemple de lancer un vieux jeu écrit écrit il y a 20 ans pour un Amstrad sur un PC récent sous Linux, ou encore de jouer à la "playstation" mais sous Windows...

Mais si l'émulation est système de nature universelle, sa mise en œuvre est lourde, lente, et à peu près inutilisable lorsqu'il s'agit de lancer un OS moderne complet (un Windows sous Linux par exemple). C'est là qu'intervient la virtualisation.

Contrairement à l'émulation, la virtualisation ne cherche plus à "traduire" le binaire. Elle part en effet du principe que ce dernier a été écrit pour le même micro-processeur que le système physique. Il va donc seulement chercher à intercepter les appels aux resources physiques. La virtualisation ne peut donc pas de lancer un jeu de PlayStation mais permet (théoriquement) d'exécuter un Mac OS 10 dans sa version Intel sur Linux/PC. Et comme il n'y a plus de traduction, nous disposons dans un système de virtualisation des mêmes performances de calcul que sur le système hôte.

Les solutions de virtualisation sont nombreuses. Microsoft par exemple, qui n'aime pas être en reste, a racheté (comme d'habitude) un produit d'émulation d'origine Mac : Virtual PC pour le faire muter en outil de virtualisation. Dans le monde libre, nous avons QEmu, un outil puissant lui aussi parti d'un émulateur pur mais qui se dirige peu à peu vers de la virtualisation. Il convient aussi de citer des projets récents plein de promesses comme Xen, très orienté serveur de virtualisation. Enfin, il y a l'acteur historique, VmWare, qui propose aujourd'hui une large gamme de produit allant de l'utilisation en poste de travail à des solutions complexes de serveurs de virtualisation.

C'est dans ce contexte que débarque Virtual Box, une solution de virtualisation qui va concurrencer directement les produits de VmWare, mais avec une licence GPL.

Installation...

Virtual Box est ceci dit relativement récent, la première version date du début de l'année comme en témoigne le changeLog. Un logiciel jeune donc, mais loin d'être dépourvu d'atouts que nous allons tester de ce pas avec le Click'Em Up de chez Redmond.

Le premier atout de Virtual Box est sa version Open Source Edition (OSE). Certaines fonctions sont certes fermées (sources ne sont pas divulgués) mais restent utilisables dans un cadre privé. USB, RDP et iSCSI en font en autre partie et s'utilisent comme le driver nVidia, sous leur forme seulement binaires et pré-compilés.

La conséquence d'une version libre est que Virtual Box est disponible en standard dans les dépôts de la Mandriva 2008.0. Il ne nécessite donc aucun téléchargement spécifique ni configuration sauvage à la sauce vmware-config.pl. Le logiciel se divise en deux parties : un module kernel et une application cliente. L'installation se fait dès lors par un simplissime urpmi virtualbox.

Création d'une première machine

Une fois installée, la bête se lance par la commande VirtualBox donnant lieu à l'affichage d'une belle IHM en Qt qui n'est pas sans rappeler la version Workstation de VMWare. En explorant les options on se rend vite compte qu'il s'agit là d'un produit hautement abouti. Rien ne manque jusqu'au SnapShots (sauvegarde réutilisable de l'état d'une VM à un instant T).

Fabriquer une nouvelle machine se fait en quelques clicks et je ne détaille même pas la procédure tant celle-ci est simple et intuitive. Un assistant vous guide sans encombre à travers la sélection du nom de la machine virtuelle et de l'OS visé (dans mon cas Windows XP), la création d'un disque virtuel, la redirection du CD-ROM virtuel sur une image ISO d'installation ou un CD physique. Une fois achevé, l'assistant vous installe une icône dans le gestionnaire qu'il ne reste alors plus qu'à lancer.

Comme pour une machine physique, la machine virtuelle démarre sur le CD-ROM de Windows et les étapes d'installation se suivent sans heurts pour déboucher au bout d'une demi heure sur une version fraîche et utilisable.

Déjà j'étais plutôt interdit d'en arriver là sans avoir à tripatouiller quoi que ce soit. Mais la véritable surprise est du côté des performances. J'ai tout l'impression de ne pas avoir quitté VMPlayer tant le système est aussi réactif que le virtualisateur historique avec un boot qui m'a même semblé plus court. Et, cerise sur le gâteau, le système hôte (le GNU/Linux) me semble globalement plus réactif qu'avec VMPlayer. Un aspect important lorsque l'on utilise la virtualisation d'OS en même temps que d'autres applications Linux. Et ici, tout semble indiquer que Virtual Box prend moins de ressource.

Si VirtualBox couine pour une histoire de module non chargé, faites, en tant que root, un modprobe vboxdrv et relancez.

A ce stade une chose manque par rapport à VMplayer : les drivers "natifs". En effet, même si la société VMWare n'équipe pas la version gratuite de son lecteur des fameux pilotes optimisés (écran, disque, souris) qui boostent littéralement un Windows virtuel, les malins savent qu'il suffit de télécharger la version d'évaluation de la Workstation pour en extraire le précieux windows.iso qui les contiennent.

Et bien pour Virtual Box point n'est besoin de "tricher". Il suffit simplement d'aller dans les menus et de lancer l'explicite Installer les additions client.... Après une poignée de secondes, quelques boite de message inquiètes de Windows, et, bien évidement, un redémarrage, sont installés un pilote écran optimisé, une souris non bloquante, bref, des fonctions comparables à la version payante de VMWare. Et là vous disposez d'une machine virtuelle au performance quasi équivalente à une exécution native. Mon Delphi se lance sans délais, les compilations sont rapides et l'exécution en phase avec ce que j'ai l'habitude de constater.

L'utilisation de machines existantes

Utilisant VMPlayer pour mon travail depuis plus d'un an, je n'avais aucune envie de ré-installer un système complet pour commencer à re-travailler. Fort heureusement, Virtual Box a prévu le coup. Lors de la fabrication d'une nouvelle machine, à l'étape de la sélection des disques, il est donc possible d'utiliser... un disque VmWare existant (fichiers .vmdk).

Je m'attendais à ce que rien ne fonctionne et pourtant, ça a booté... mais pas très longtemps ;-) Au bout de quelques secondes est apparu un magnifique Ecran Mortel Bleu comme je les adore. Windows me larguait ainsi sans plus d'explication avec un cryptique STOP 0x0000007B (bla,bla,bla,bla). Il m'a fallut un peu de temps et l'aide de Gouggle pour comprendre que le problème ne venait pas de Virtual Box mais de Windows (la grosse surprise). Ce dernier faisait une gentille petite crise de panique et n'arrivait plus à trouver les pilotes IDE standards pour cause de "changement de carte mère"...

La solution, je la dois au blog de Merlin que je remercie ici. Elle consiste à :

  1. Relancer VMWare avec la machine à convertir.
  2. Aller dans le dossier X:\Windows\driver cache\i386
  3. Décompresser le fichier driver.cab qui s'y trouve (avec winrar, winzip, un décapsuleur, etc..) dans le dossier X:\Windows\system32\drivers.
  4. Ensuite importer dans le registry le petit fichier mergide.reg qui est listé à la fin de ce billet.
  5. Arrêter windows.
  6. Relancer Windows mais cette fois dans VirtualBox.

Une fois redémarré, windows retrouve miraculeusement ses petits et poursuit sont lancement. Une fois loggé, pensez à installer les outils additionnels comme indiqués au chapitre précédent et aussi à désinstaller ceux de VMWare.

Si vous avez des soucis de performance sous linux avec la commande top qui vous indique que le processus ksoftirqd est à 20%, vous devez rajouter dans le paramètre nohz=off au démarrage du kernel (append= dans lilo.conf). Cela devrait régler votre problème en attendant que l'équipe de VirtualBox règle le leur. A noter que cette astuce fonctionne aussi pour VMWare qui a le même problème.

Performances

Il est maintenant temps de tester un peu les performances de Virtual Box. Pour se faire, j'utilise l'outil nBench. Ce n'est pas ni le plus fin ni le plus complet des outils mais il est rapide à mettre en œuvre et simple à interpréter. Il teste les opérations CPU, les accès mémoire et disque. Pour la vidéo (2D), j'ai utilise l'outil PerformanceTest.

Pour service de référence, les mêmes tests ont été effectués sur VmWare et sous Wine (sauf pour la vidéo). Les chiffres donnés par Wine peuvent ainsi servir de référence des performances natives de la machine hôte.

Donc, un dessin introduisant bien mieux un court discours, voilà ce que cela donne :

La première chose que l'on constate, c'est la réalité de ce type de technologie et la preuve qu'il ne s'agit bien en rien d'une émulation. En effet, les performances CPU pures obtenues pour les opérations sur les entiers et les flottants ne permettent en effet pas de distinguer les trois plate-formes. C'est très logique car la virtualisation ne modifie pas le code exécuté, elle ne fait qu'émuler la couche matérielle. Du coup les résultats d'accès mémoire sont eux aussi, équivalents.

En revanche les différences apparaissent pour le matériel émulé, et donc typiquement, les disques. Nous savions déjà que cet aspect était le gros point noir de VMWare, ici cela apparaît très clairement. VMWare est 8.11 fois plus lent que Wine (natif) en écriture et près de 4.34 fois plus lent quant il s'agit des écritures.

Sur le même test, en n'utilisant pourtant pas son disque natif mais bien le même VMDK que VmWare, Virtual Box est lui "seulement" 2.89 fois plus lent que le natif en lecture. C'est à dire 2.81 fois plus rapide que VMWare...

Concernant l'écriture, une politique de cache de Virtual Box me semble la seule explication pour explique un score 5.24 fois supérieure au natif... Ce qui le donne du coup 22.73 plus rapide que VmWare.

Concernant la vidéo (2D) en revanche les deux plateformes sont totalement similaires.

Evidement un test n'est qu'un test et nBench n'est pas le meilleur ni le plus intelligent mais il permet de mettre en évidence que pour tout ce qui ne touche pas aux disque, Virtual Box obtient des résultats totalement comparables avec VmPlayer. Mais concernant les accès disques, il est simplement meilleur...

Conclusion

La société VmWare propose bien deux produits gratuits que l'on pourrait opposer, en terme de coût, à Virtual Box. Il s'agit de VmPlayer, un "lecteur" sans capacité de création de nouvelles machines, et VmWare Server, excellent pour virtualiser et monitorer plusieurs OS simultanés mais peu adapté à un usage en poste de travail.

Virtual Box se place donc plutôt en concurrent de la version VmWare Workstation qui elle, est payante. Il dispose à peu près des mêmes fonctionnalités que son grand frère en étant clairement plus rapide sur les accès disques et moins intrusif sur le système hôte (en tout cas sous Linux). Sa licence GPL lui permet quant à elle d'être directement intégré dans la majorité des distributions récentes (Mandriva, Ubuntu, etc.). Enfin, elle tourne comme la Workstation sur Windows et Linux, mais aussi sous MacOS.

Un beau produit comme on les aime, a suivre de très près...