Isolation temporelle des machines virtuelles

Un article de Wikipédia, l'encyclopédie libre.

L'isolation temporelle ou l' isolation des performances entre les machines virtuelles (VM) fait référence à la capacité d' isoler le comportement temporel (ou de limiter les interférences temporelles) de plusieurs machines virtuelles entre elles, bien qu'elles fonctionnent sur le même système hôte physique et partagent un ensemble de ressources physiques telles que les processeurs, la mémoire et les disques.

Introduction au problème[modifier | modifier le code]

L'un des principaux avantages de l'utilisation de la virtualisation dans l'unification des serveurs est la possibilité de «regrouper» de manière transparente plusieurs systèmes sous-utilisés dans un seul hôte physique, permettant ainsi une meilleure utilisation globale des ressources matérielles disponibles. En fait, un système d'exploitation (OS) entier, ainsi que les applications qui s'exécutent à l'intérieur, peuvent être exécutés dans une machine virtuelle (VM). Cependant, lorsque plusieurs machines virtuelles s'exécutent simultanément sur le même hôte physique, elles partagent les ressources physiques disponibles, notamment les processeurs, les adaptateurs réseau, les disques et la mémoire. Cela ajoute un niveau d'imprévisibilité dans les performances qui peuvent être présentées par chaque machine virtuelle individuelle, par rapport à ce qui est attendu. Par exemple, une machine virtuelle avec un pic temporaire intensif en calcul peut perturber les autres machines virtuelles en cours d'exécution, entraînant une baisse temporaire significative et indésirable de leurs performances. Dans un monde de l'informatique qui évolue vers des paradigmes de cloud computing où les ressources (de calcul, de stockage, et réseau) peuvent être louées à distance sous forme virtualisée dans le cadre d'accords de niveau de service précis, il serait hautement souhaitable que les performances des ressources virtualisées soient aussi stables et prévisibles que possible.

Solutions possibles[modifier | modifier le code]

Plusieurs techniques peuvent être utilisées pour faire face au problème ci-dessus mentionné. Elles visent à atteindre un certain degré d'isolement temporel entre les machines virtuelles exécutées simultanément, par la planification de niveaux critiques : planification du processeur, planification du réseau et planification des disques.

Pour le processeur, il est possible d'utiliser des techniques de planification appropriées au niveau de l'hyperviseur pour contenir la quantité de calcul que chaque machine virtuelle peut imposer à un processeur ou à un cœur physique partagé. Par exemple, sur l'hyperviseur Xen, les ordonnanceurs BVT, Credit-based et S-EDF ont été proposés pour contrôler la répartition de la puissance de calcul entre les VM concurrentes. Pour obtenir des performances stables dans les applications virtualisées, il est nécessaire d'utiliser des configurations de planificateur qui ne préservent pas le travail. Aussi, sur l'hyperviseur KVM, certains ont proposé d'utiliser des stratégies d'ordonnancement basées sur EDF [1] pour maintenir des performances stables et prévisibles des applications virtualisées[2],[3]. Enfin, avec un hôte physique multicœur ou multiprocesseur, il est possible de déployer chaque VM sur un processeur ou un cœur distinct pour isoler temporairement les performances des différentes VM.

Pour le réseau, il est possible d'utiliser des techniques de régulation pour limiter la quantité de trafic que chaque VM peut imposer à l'hôte. En outre, il est possible d'installer plusieurs cartes réseau sur le même hôte physique et de configurer la couche de virtualisation de sorte que chaque machine virtuelle puisse accorder un accès exclusif à chacune d'elles. Par exemple, cela est possible avec les domaines de pilote de l'hyperviseur Xen. Il existe des adaptateurs réseau à plusieurs files d'attente qui peuvent prendre en charge les machines virtuelles au niveau matériel, ayant des files d'attente de paquets distinctes associées aux différentes machines virtuelles hébergées (au moyen des adresses IP des machines virtuelles), telles que les périphériques Virtual Machine Device Queue (VMDq) d'Intel[4]. Enfin, la planification temps réel de la CPU peut également être utilisée pour améliorer l'isolation temporelle du trafic réseau à partir de plusieurs VM déployées sur la même CPU[5].

Durant la planification en temps réel, la difficulté est de comptabiliser correctement le temps CPU réservé à chaque machine virtuelle pour permettre le contrôle de la quantité de ressources CPU réservée à chaque machine virtuelle. Par exemple, dans le cas du planificateur Xen, les services Dom0 et les domaines de pilote peuvent être partagés entre plusieurs machines virtuelles qui y accèdent. De même, dans le cas de l'hyperviseur KVM, la charge de travail imposée au système d'exploitation hôte est difficilement évaluable en raison de la desserte du trafic réseau de chaque système d'exploitation invité, car elle implique principalement des pilotes de périphérique au niveau du noyau et de l'infrastructure réseau (du système hôte). Certaines techniques pour atténuer ces problèmes ont été proposées par l'hyperviseur Xen[6].

À l'instar des réservations adaptatives, il est possible d'appliquer des stratégies de contrôle de rétroaction pour adapter dynamiquement la quantité de ressources réservées à chaque machine virtuelle afin de maintenir des performances stables pour la ou les applications virtualisées. Suivant la tendance de l'adaptabilité, dans les cas où un système virtualisé n'atteint pas les niveaux de performances attendus (soit en raison d'interférences imprévues d'autres machines virtuelles exécutées simultanément, soit en raison d'une mauvaise stratégie de déploiement qui a simplement récupéré une machine avec des ressources matérielles insuffisantes ), il est possible de migrer en direct des machines virtuelles pendant leur exécution, afin de les héberger sur un hôte physique plus performant (ou moins chargé).

Notes et références[modifier | modifier le code]

  1. Fabio Checconi, Tommaso Cucinotta, Dario Faggioli, Giuseppe Lipari, Hierarchical Multiprocessor CPU Reservations for the Linux Kernel, Proceedings of the 5th International Workshop on Operating Systems Platforms for Embedded Real-Time Applications (OSPERT 2009), Dublin, Ireland, June 2009
  2. Tommaso Cucinotta, Gaetano Anastasi, Luca Abeni, Respecting temporal constraints in virtualised services, Proceedings of the 2nd IEEE International Workshop on Real-Time Service-Oriented Architecture and Applications (RTSOAA 2009), Seattle, Washington, July 2009
  3. Tommaso Cucinotta, Gaetano Anastasi, Luca Abeni, Real-Time Virtual Machines, Proceedings of the 29th Real-Time System Symposium (RTSS 2008) -- Work in Progress Session, Barcelona, December 2008
  4. Shefali Chinni, Radhakrishna Hiremane, Virtual Machine Device Queues, Intel Virtualization Technology White Paper, 2007
  5. Tommaso Cucinotta, Dhaval Giani, Dario Faggioli and Fabio Checconi, Providing Performance Guarantees to Virtual Machines using Real-Time Scheduling, Proceedings of the 5th Workshop on Virtualization and High-Performance Cloud Computing (VHPC 2010), Ischia (Naples), Italy, August 2010.
  6. Diwaker Gupta, Lucy Cherkasova, Robert Gardner, Amin Vahdat, Enforcing Performance Isolation Across Virtual Machines in Xen, Proceedings of the 7th International Middleware Conference (Middleware 2006), Lecture Notes in Computer Science, Volume 4290/2006, pp.342-362, Melbourne, Australia, November 2006