4 votos

¿Se admite la virtualización anidada en los chips de Apple Silicon (M2/M3)?

Estoy tratando de averiguar si los últimos chips Apple Silicon admiten virtualización totalmente anidada. Específicamente la capacidad de ejecutar una máquina virtual dentro de otra máquina virtual.

Realmente es difícil encontrar respuestas definitivas. La mayoría de las discusiones sobre esto están en foros de fanáticos que dicen que los chips de Apple admiten el conjunto de instrucciones ARM. Lo cual tiene un procedimiento completamente desarrollado para la virtualización infinitamente anidada.

8voto

Jose Chavez Puntos 645

La respuesta corta es sí. Los detalles técnicos están a continuación:

Niveles de Privilegio

Depende un poco de lo que quieras decir exactamente con "soporte". Para comprender mejor las sutilezas de esa palabra, primero una descripción rápida y general de cómo las CPUs ARM (como la serie M de Apple Silicon) ejecutan software en diferentes niveles de privilegio:

Las CPUs ARM dividen el mundo en diferentes niveles de excepciones, a saber, EL0, EL1, EL2 y EL3. Aquí EL0 es el nivel menos privilegiado y EL3 es el nivel más privilegiado.

Cómo Funcionan

El software que se ejecuta en un nivel de excepción específico está restringido de varias maneras. Cuando ese software intenta realizar alguna operación que ha sido restringida, la CPU generalmente pausará ese software y en su lugar comenzará a ejecutar el software que se ejecuta en un nivel de excepción superior, permitiendo a ese software decidir si y cómo la operación debería permitirse continuar.

Como ejemplo, una aplicación estándar como "Calendar.app" se ejecutaría en EL0. Si intenta hacer algo privilegiado, como acceder al almacenamiento en disco, la CPU pausaría efectivamente el programa y dejaría que el código del sistema operativo que se ejecuta en EL1 decida si y cómo esa operación debería permitirse continuar.

Niveles de Privilegio y Virtualización

Cuando se agrega la virtualización asistida por hardware en la mezcla, a menudo encontrarás que el software que realiza la gestión de la virtualización (conocido como el hipervisor) se ejecuta en EL2.

Apple actualmente no hace uso de EL3.

Esta forma de organizar los niveles de privilegio también se encuentra en las CPUs de Intel. Aquí es posible que hayas oído hablar de "anillos", que es básicamente el mismo concepto. Sin embargo, ellos enumeran de manera opuesta, por lo que el anillo 0 es el más privilegiado.

Virtualización Anidada

Ahora, con la visión general teórica a un lado, podemos comenzar a responder la pregunta en cuestión:

Virtualización Anidada sin Asistencia de Hardware

Por supuesto, es totalmente posible usar la virtualización anidada con la serie Apple Silicon al igual que con casi cualquier otra CPU. Simplemente puedes ejecutar todo en EL0 sin requerir características especiales de sistema operativo o hardware. Se puede hacer con emulación y generalmente será bastante lento.

Otra posibilidad es utilizar la virtualización asistida por hardware ordinaria. La primera capa sería virtualizada por hardware como de costumbre. Luego usarías software de paravirtualización para ejecutar un sistema operativo modificado dentro del primer nivel de invitado en EL0, para tener invitados del segundo nivel. Sería complicado, limitado en rendimiento y requeriría un software de invitado personalizado. Usualmente no es lo que querrías.

Virtualización Anidada Asistida por Hardware

Supongo que estás hablando de virtualización anidada asistida por hardware en lugar de:

En ese caso, tienes un hipervisor principal que proporciona el primer nivel de virtualización, y un hipervisor de invitado que proporciona el segundo nivel (o más) de virtualización. Como se mencionó antes, el hipervisor principal se ejecuta en EL2. Esto significa que el hipervisor de invitados se ejecuta en EL1.

Apple M1 CPU - sin asistencia de hardware

Las características de hardware para la virtualización se controlan a través de registros (y otros medios). En el procesador Apple M1 CPU los registros en EL2 no pueden ser modificados en absoluto por software de EL1. Esto significa que un hipervisor de invitados en ejecución en EL1 dentro de una máquina virtual no puede usar características de virtualización de hardware para proporcionar virtualización anidada.

Asistencia de hardware v8.3-A

ARM introdujo soporte para virtualización anidada con su especificación v8.3-A. Esto significa que un hipervisor de invitados en ejecución en EL1 modificando los registros de EL2 para la virtualización anidada asistida por hardware (HCR_EL2.NV, HCR_EL2.NV1 y HCR_EL2.AT) hará que la CPU pause el hipervisor de invitados y permitirá que el hipervisor principal en EL2 decida si y cómo proceder. Eso es una parte importante para habilitar la virtualización anidada. Hay otros detalles, por ejemplo relacionados con la gestión de memoria e interrupciones.

Una cosa a tener en cuenta es que este proceso de pausar el software y permitir que se ejecute un software más privilegiado lleva algo de tiempo. Esto es lo que se conoce como un cambio de contexto, que también conoces del macOS estándar donde ocurre un cambio de contexto cada vez que se transita de la ejecución de código de la aplicación a la ejecución de código del sistema operativo. Por lo tanto, preferiblemente querrás tener la menor cantidad de cambios de contexto posibles para obtener un rendimiento óptimo.

Asistencia de hardware v8.4-A

Dado que la virtualización anidada implica cambiar múltiples registros con bastante frecuencia, aquí se producirá una reducción de rendimiento. Con la especificación v8.4-A de ARM introdujeron una optimización de rendimiento, que se puede considerar como permitir que el hipervisor de invitados en EL1 modifique varios registros y luego permitir que el hipervisor principal en EL2 los procese en conjunto. Eso mejora el rendimiento para la virtualización anidada. Esta característica se habilita a través del registro HCR_EL2.NV2.

Indicación de Características de la CPU

La especificación de ARM también incluye una forma para que la CPU informe al software de qué características soporta. Específicamente para la virtualización anidada, la CPU puede señalar que no soporta la virtualización anidada en absoluto, que soporta el nivel v8.3-A (HCR_EL2.NV, HCR_EL2.NV1 y HHCR_EL2.AT) o que soporta el nivel v8.4-A (adición de HCR_EL2.NV2).

Capacidades de la Serie Apple M

La CPU Apple M1 no soporta virtualización anidada asistida por hardware en absoluto.

Las CPUs Apple M2 y M3 soportan el nivel v8.4-A de virtualización anidada asistida por hardware.

Soporte de Software para Virtualización Anidada

Sin embargo, Apple no ha proporcionado software a nivel de usuario para esa característica. Es decir, los marcos de Virtualización e Hipervisor que vienen con macOS no admiten (aún) la virtualización anidada asistida por hardware.

Esto significa que, por ejemplo, al ejecutar Windows 11 dentro de VMware Fusion o Parallels Desktop, no tendrás acceso a la función WSL2 (Windows Subsystem for Linux 2).

Sé que se ha avanzado en Asahi Linux para admitir esto, por lo que en algún momento futuro, es muy probable que el hardware existente de M2 y M3 obtenga soporte.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X