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 procesadores, memoria y discos.
Una de las principales ventajas de utilizar la virtualización en la consolidación de servidores es la posibilidad de "empaquetar" sin problemas varios sistemas subutilizados en un único host físico, logrando así una mejor utilización general de los recursos de hardware disponibles. De hecho, un sistema operativo (OS) completo, junto con las aplicaciones que se ejecutan en él, 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 , adaptadores de red , discos 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 VM con un pico temporal de uso intensivo de recursos informáticos podría perturbar a las otras VM en ejecución, lo que causaría una caída temporal significativa e indeseable en su rendimiento. En un mundo de informática que está cambiando hacia paradigmas de computación en la nube donde los recursos (computación, almacenamiento, redes) pueden alquilarse de forma remota en forma virtualizada bajo acuerdos de nivel de servicio precisos, sería muy deseable que el rendimiento de los recursos virtualizados fuera lo más estable y predecible posible.
Se pueden utilizar múltiples técnicas para hacer frente al problema mencionado anteriormente. Su objetivo es lograr cierto grado de aislamiento temporal entre las máquinas virtuales que se ejecutan simultáneamente, en los distintos 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 a nivel de 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édito y S-EDF para controlar cómo se distribuye la potencia informática entre las VM que compiten. [1] Para obtener un rendimiento estable en aplicaciones virtualizadas, es necesario utilizar configuraciones de programador que no conserven el trabajo . Además, en el hipervisor KVM , algunos han propuesto utilizar 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 multinúcleo o multiprocesador , 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. También 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 multi-cola que soportan múltiples VM a nivel de hardware, teniendo colas de paquetes separadas asociadas a las diferentes VM alojadas (por medio de las direcciones IP de las VM), como los dispositivos Virtual Machine Device Queue (VMDq) de Intel . [ 5] Finalmente, la programación en tiempo real de la CPU también puede utilizarse para mejorar el aislamiento temporal del tráfico de red de múltiples VM implementadas en la misma CPU. [6]
Al utilizar la programación en tiempo real para controlar la cantidad de recursos de CPU reservados para cada máquina virtual, un problema complicado es el de contabilizar correctamente 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 sistema operativo host debido a la prestación de servicio de tráfico de red para cada sistema operativo invitado individual puede no ser fácilmente distinguible, porque involucra principalmente controladores de dispositivos a nivel de núcleo y la infraestructura de red (en el sistema operativo host). Se han propuesto algunas técnicas para mitigar dichos problemas para el caso de Xen. [7]
Siguiendo 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 la(s) aplicación(es) virtualizada(s). [8] Siguiendo la tendencia de la 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 máquinas virtuales que se ejecutan simultáneamente, o por una mala estrategia de implementación que simplemente eligió una máquina con recursos de hardware insuficientes), es posible migrar en vivo las máquinas virtuales mientras están en ejecución, para alojarlas en un host físico más capaz (o menos cargado).