El aislamiento temporal o aislamiento de rendimiento entre máquinas virtuales (VM) se refiere a la capacidad de aislar el comportamiento temporal (o limitar las interferencias temporales) de múltiples VM entre sí, a pesar de que se ejecutan en el mismo host físico y comparten un conjunto de recursos físicos como como procesadores, memoria y discos.
Introducción al problema
Una de las ventajas clave del uso de la virtualización en la consolidación de servidores es la posibilidad de "empaquetar" múltiples sistemas infrautilizados en un solo host físico, logrando así una mejor utilización general de los recursos de hardware disponibles. De hecho, un sistema operativo (SO) completo , junto con las aplicaciones que se ejecutan dentro, se puede ejecutar en una máquina virtual (VM). Sin embargo, cuando varias VM se ejecutan simultáneamente en el mismo host físico, comparten los recursos físicos disponibles, incluidos CPU (s), adaptador (s) de red , disco (s) y memoria. Esto agrega un nivel de imprevisibilidad en el rendimiento que puede exhibir cada VM individual, en comparación con lo esperado. Por ejemplo, una máquina virtual con un pico temporal de uso intensivo de cómputo podría perturbar a las otras máquinas virtuales en ejecución, provocando una caída temporal significativa e indeseable en su rendimiento. En un mundo de la computación que está cambiando hacia paradigmas de computación en la nube donde los recursos (computación, almacenamiento, redes) pueden alquilarse remotamente en forma virtualizada bajo acuerdos precisos de nivel de servicio, sería muy deseable que el desempeño de los recursos virtualizados sea tan estable. y predecible como sea posible.
Soluciones posibles
Se pueden utilizar múltiples técnicas para afrontar el problema antes mencionado. Su objetivo es lograr cierto grado de aislamiento temporal en las VM que se ejecutan simultáneamente, en los diversos niveles críticos de programación : programación de CPU, programación de red y programación de disco.
Para la CPU, es posible utilizar técnicas de programación adecuadas en el nivel del hipervisor para contener la cantidad de computación que cada VM puede imponer en una CPU o núcleo físico compartido. Por ejemplo, en el hipervisor Xen , se han propuesto los programadores BVT, basados en créditos y S-EDF para controlar cómo se distribuye la potencia informática entre las máquinas virtuales de la competencia. [1] Para obtener un rendimiento estable en aplicaciones virtualizadas, es necesario utilizar configuraciones de programador que no ahorren trabajo . Además, en el hipervisor KVM , algunos han propuesto el uso de estrategias de programación basadas en EDF [2] para mantener un rendimiento estable y predecible de las aplicaciones virtualizadas. [3] [4] Finalmente, con un host físico de múltiples núcleos o multiprocesadores , es posible implementar cada VM en un procesador o núcleo separado para aislar temporalmente el rendimiento de varias VM.
Para la red, es posible utilizar técnicas de modelado de tráfico para limitar la cantidad de tráfico que cada VM puede imponer al host. Además, es posible instalar múltiples adaptadores de red en el mismo host físico y configurar la capa de virtualización para que cada VM pueda otorgar acceso exclusivo a cada uno de ellos. Por ejemplo, esto es posible con los dominios de controladores del hipervisor Xen. Existen adaptadores de red de múltiples colas que admiten múltiples máquinas virtuales a nivel de hardware, con colas de paquetes separadas asociadas a las diferentes máquinas virtuales alojadas (por medio de las direcciones IP de las máquinas virtuales), como los dispositivos de cola de dispositivo de máquina virtual (VMDq) de Intel. . [5] Finalmente, la programación en tiempo real de la CPU también se puede utilizar para mejorar el aislamiento temporal del tráfico de red de múltiples VM implementadas en la misma CPU. [6]
Cuando se usa la programación en tiempo real para controlar la cantidad de recursos de CPU reservados para cada VM, un problema desafiante es contabilizar adecuadamente el tiempo de CPU aplicable a las actividades de todo el sistema. Por ejemplo, en el caso del programador Xen, los servicios de dominios de controlador y Dom0 pueden compartirse entre varias máquinas virtuales que acceden a ellos. De manera similar, en el caso del hipervisor KVM, la carga de trabajo impuesta al SO host debido al tráfico de red para cada SO huésped individual podría no ser fácilmente distinguible, porque involucra principalmente controladores de dispositivos a nivel de kernel y la infraestructura de red (en el host SO). Se han propuesto algunas técnicas para mitigar tales problemas para el caso Xen. [7]
En la línea de las reservas adaptativas , es posible aplicar estrategias de control de retroalimentación para adaptar dinámicamente la cantidad de recursos reservados a cada máquina virtual para mantener un rendimiento estable para las aplicaciones virtualizadas. [8] Siguiendo la tendencia de adaptabilidad, en aquellos casos en los que un sistema virtualizado no está cumpliendo con los niveles de rendimiento esperados (ya sea por interferencias imprevistas de otras VM en ejecución concurrente, o por una mala estrategia de implementación que simplemente recogió una máquina con recursos de hardware insuficientes), es posible migrar en vivo máquinas virtuales mientras están en ejecución, para alojarlas en un host físico más capaz (o menos cargado).
Referencias
- ^ Ludmila Cherkasova; Diwaker Gupta; Amin Vahdat (3 de septiembre de 2007), "Comparación de los tres programadores de CPU en Xen" (PDF) , Revisión de la evaluación del rendimiento. Vol 35, Number 2 , consultado el 30 de junio de 2010
- ^ Fabio Checconi, Tommaso Cucinotta, Dario Faggioli, Giuseppe Lipari, Reservas jerárquicas de CPU multiprocesador para el kernel de Linux , Actas del quinto taller internacional sobre plataformas de sistemas operativos para aplicaciones integradas en tiempo real (OSPERT 2009), Dublín, Irlanda, junio de 2009
- ^ Tommaso Cucinotta, Gaetano Anastasi, Luca Abeni, Respetando las limitaciones temporales en los servicios virtualizados , Actas del segundo taller internacional IEEE sobre aplicaciones y arquitectura orientada a servicios en tiempo real (RTSOAA 2009), Seattle, Washington, julio de 2009
- ^ 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, diciembre de 2008
- ^ Shefali Chinni, Radhakrishna Hiremane, Colas de dispositivos de máquinas virtuales , Informe técnico sobre latecnología de virtualización de Intel, 2007
- ^ Tommaso Cucinotta, Dhaval Giani, Dario Faggioli y Fabio Checconi, Proporcionar garantías de rendimiento a las máquinas virtuales mediante programación en tiempo real , Actas del quinto taller sobre virtualización y computación en la nube de alto rendimiento (VHPC 2010), Ischia (Nápoles), Italia, Agosto de 2010.
- ^ Diwaker Gupta, Lucy Cherkasova, Robert Gardner, Amin Vahdat, Aplicación del aislamiento del rendimiento en máquinas virtuales en Xen , Actas de la 7ma Conferencia Internacional de Middleware (Middleware 2006), Lecture Notes in Computer Science, Volumen 4290/2006, páginas 342-362 , Melbourne, Australia, noviembre de 2006
- ^ Ripal Nathuji; Aman Kansal y Alireza Ghaffarkhah (abril de 2010), "Q-Clouds: Gestión de efectos de interferencia de rendimiento para nubes con reconocimiento de QoS" , Proc. de la 5a conferencia europea sobre sistemas informáticos (EuroSys 2010) , París, Francia