Modos de CPU y virtualización recursiva.

4

Estoy tratando de entender la virtualización y los hipervisores.

Así que el sistema operativo principal, digamos Linux, se ejecuta en anillo 0, con programas de espacio de usuario ejecutándose en anillo 3. El usuario inicia VMware, con Linux ejecutándose dentro de él. ¿En qué anillos / modos se está ejecutando el Linux virtual? ¿Y decir que el usuario inicia otro sistema operativo virtual de Linux dentro del sistema operativo virtual de Linux? ¿Son otros modos emulados por VMware? ¿Cómo se mantienen separadas estas capas para protegerlas de fallas y comportamientos maliciosos?

¿Y lo anterior se implementa de manera diferente en diferentes plataformas? Intel VT, AMD-V, ARM, virtualización de software pura, etc.

Max
fuente

Respuestas:

2

Este artículo debe proporcionar mucha información en las líneas que está buscando. Sin embargo, es específico de VMware.

El caso general es que realmente depende de una serie de cosas:

  • ¿VT-x / AMD-V está en uso?
  • ¿Está en uso el EPT?
  • ¿VT-d o algún tipo de IOV en uso?

Las preguntas anteriores son uso de instrucciones de hardware preguntas Dependiendo de qué instrucciones de hardware de la CPU de AMD / Intel se usan para ayudar con la virtualización, la estructura del hipervisor suele ser un poco diferente. Si no las instrucciones de hardware están en uso, entonces se dice que la máquina virtual está "Completamente emulada" o "ejecutándose en software", que suele ser el modo más lento. Sin embargo, incluso sin soporte de hardware, paravirtualización (donde el SO huésped sabe que se está ejecutando en una VM) puede acelerar significativamente incluso una capa de emulación de software, al proporcionar una interfaz de programación clara entre el huésped y el host.

Algunas máquinas virtuales, como qemu sin kqemu o kvm, pueden ejecutarse enteramente en anillo 3 - pero hacerlo tiene varias limitaciones, como el rendimiento y la falta de acceso de hardware de bajo nivel. En general, incluso esos hipervisores sin ninguna aceleración de hardware se ejecutan tradicionalmente en el anillo 0, es decir, dentro del núcleo del host como controlador.

El uso de los anillos 1 y 2 es bastante raro, pero sucede, como se señala en el artículo de Anandtech. Además, los anillos 1 y 2 se usan comúnmente para hipervisores de metal desnudo como Xen. Que yo sepa, el núcleo del sistema operativo host "dom0" en Xen se ejecuta completamente en el anillo 1, y solamente el "microkernel" de Xen se ejecuta en el anillo 0. Entonces, si Linux fuera el dom0, entonces se ejecutaría en el anillo 1, y los núcleos guest (domU) serían hipervisados ​​por Xen en el anillo 0 y en el anillo 2.

Por supuesto, los "anillos" del procesador no son el único mecanismo de seguridad o aislamiento, y las instrucciones de hardware proporcionan una gran cantidad de soporte para sin peligro Separando máquinas virtuales sin tener que hacer todo en software. Los detalles, si los desea, se obtienen mejor leyendo un manual de programación del procesador Intel, específicamente sobre el tema de VT-x.

Anidado la virtualización no es generalmente posible, excepto en el caso de VMware (es el único hipervisor que conozco que puede hacerlo). Lo hace por emulando las instrucciones VT-x (y posiblemente el EPT) dentro del invitado, lo que hace que el huésped piense que tiene soporte VT-x / EPT real. Es probable que este sea un truco de hipervisor, aunque no conozco los detalles de la implementación. Sin embargo, el EPT a menudo se denomina "Tablas de páginas anidadas", por lo que me pregunto si el aspecto "anidado" implica que puede crear niveles de anidamiento más profundos que el nivel necesario para separar las tablas de páginas del host del invitado. (s).

Mucho más común para la virtualización anidada es que estás atascado ejecutando "completamente emulado" o, en el mejor de los casos, paravirtualizado, lo que genera un gran impacto en el rendimiento.

Y hablando de rendimiento, no creo que mucha gente use la virtualización anidada si pueden evitarla, excepto tal vez la anidada envase virtualización (que lleva cero CPU / memoria / sobrecarga de hardware). El impacto en el rendimiento, incluso con el VT-x virtualizado de VMware, es tan grande que se eliminan los posibles beneficios de aislamiento. Confíe en mí, un nivel de virtualización es suficiente, hasta / a menos que lleguemos a un nodo de hardware donde sea realmente práctico anidar más profundamente y poder comer el impacto de los niveles de direccionamiento indirecto.

allquixotic
fuente
1
Un caso de uso útil para la visualización anidada que personalmente utilicé fue crear un entorno de prueba de un servidor Hyper-V al que pudiera hacer una instantánea y retrotraer. Pude ejecutar un servidor Hyper-V (win2k8R2) con varias máquinas virtuales que se ejecutan dentro de una máquina virtual de VMware que se ejecuta en una caja de Windows 7.
Scott Chamberlain