Objectif :
La création d'un émulateur à grande échelle dans le but de tester des applications nécessitant un grand nombre de machines.
Pour cela, il faut replier les machines, c'est-à-dire que chaque machine physique va en réalité contenir plusieurs machines virtuelles (VM). Le but est d'obtenir un facteur de repliment de 100, donc qu'il y ait 100 VM par machine physique.
Pour réaliser ce projet, il faut donc posséder un outil capable de gérer ces 100 VM. Nous avons donc dû choisir parmis les
outils de virtualisation existant.
Pour évaluer ces outils, il a fallut utiliser des
benchmarks.
Ensuite comme aucun de ces outils ne possède toutes les caractéristiques requises, il nous faudra les améliorer.
Après il faudra également que les machines virtuelles puissent communiquer entre-elles (qu'elles soient sur la même machine physique ou non). Ceci devra être paramétrable (débit, latence, topologie,...)
Virtualisation :
Dans le domaine informatique, la virtualisation fournit
une vue logique plutôt que physique des données, de la puissance de calcul, de
la capacité de stockage, et d'autres ressources.
ParaVirtualisation :
Dans le domaine informatique, la paravirtualisation
est une technique de virtualisation qui présente l'abstraction des machines
virtuelles avec une interface logicielle qui est semblable mais non identique à
celle des machines physiques. Ceci exige des systèmes d'exploitations d'être
"portés" dans le but de gérer ces machines virtuelles.
Machine virtuelle
Le sens originel de machine virtuelle est la création
de plusieurs environnement d'exécution sur un seul ordinateur, dont chacun émule
l 'ordinateur hôte. Cela fournit à chaque utilisateur l'illusion de disposer
d'un ordinateur complet alors que chaque machine virtuelle est isolée des
autres. Le logiciel hôte qui fournit cette fonctionnalité est souvent dénommé
superviseur (
wikipedia)
Pour tester les différents outils de virtualisation, nous avons utilisé tout d'abord une série de micro-bencharks. Un pour tester le processeur, un pour la mémoire, un pour le réseau et un pour le gestion du disque dur.
- Pour le calcul, nous avons utilisé un programme effectuant une approximation itérative de la racine carré de 2.
- Pour la mémoire, nous effectuons du calcul matriciel sur des matrices à 2 dimension de grand taille. Les calculs sont des additions de matrices en boucle qui obligent à faire beaucoup d'accès mémoire.
- Pour le réseau, nous avons utilisé Netperf qui permet de mesurer le débit réseau pendant un temps donné.
- Enfin, pour le disque dur, nous avons utilisé un programme qui effectue des écritures sur le disque sans utilisé les caches.
Pour tester plusieurs composantes à la fois, nous avons utlisé des requètes https sur un serveur web apache-ssl contenant un fichier d'environ 600Mo.
Enfin, nous avons utilisé une véritable application distribuée : les NAS benchmark. Ces derniers sont des application MPI tournant généralement sur des clusters et effectuant de gros calculs matriciels. Nous les avons lancés sur des machines virtuelles (environ 800) réparties sur des machines physiques différentes (8)
Pour utiliser les microbenchmarks, nous avons procéder de la manière suivante suivante :
Les temps sont mesurés à l'aide de la fonction "gettimeofday" qui offre une précision de l'ordre de la micro seconde.
Pour lancer les tests simultanément sur plusieurs machines virtuelles, nous avons utilisé du rsh en parallèle. Pour être certain qu'une machine ne démarre pas avant que les rsh ne soient finis, nous avons mis des "sleep" de quelques secondes avant de lancer le micro-benchmark. Nous nous sommes également arrangé pour que le temps de lancement avec les rsh soit très inférieur au temps d'éxécution des benchmarks.