Virtualización X86

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
virtualización asistida por hardware en CPU x86/x86-64

La virtualización x86 es el uso de capacidades de virtualización asistida por hardware en una CPU x86/x86-64.

A finales de la década de 1990, la virtualización x86 se lograba mediante complejas técnicas de software, necesarias para compensar la falta del procesador de capacidades de virtualización asistidas por hardware y al mismo tiempo lograr un rendimiento razonable. En 2005 y 2006, tanto Intel (VT-x) como AMD (AMD-V) introdujeron un soporte limitado de virtualización de hardware que permitía un software de virtualización más simple pero ofrecía muy pocos beneficios de velocidad. Un mayor soporte de hardware, que permitió mejoras sustanciales en la velocidad, llegó con los modelos de procesador posteriores.

Virtualización basada en software

La siguiente discusión se centra únicamente en la virtualización del modo protegido de la arquitectura x86.

En modo protegido, el kernel del sistema operativo se ejecuta con un privilegio más alto, como el anillo 0, y las aplicaciones con un privilegio más bajo, como el anillo 3. En la virtualización basada en software, un sistema operativo host tiene acceso directo al hardware, mientras que los sistemas operativos invitados tienen acceso limitado al hardware, como cualquier otra aplicación del sistema operativo host. Un enfoque utilizado en la virtualización basada en software x86 para superar esta limitación se llama privilegio de anillo, que implica ejecutar el sistema operativo invitado en un anillo superior (menos privilegiado) a 0.

Tres técnicas hicieron posible la virtualización del modo protegido:

  • La traducción binaria se utiliza para reescribir cierto anillo 0 instrucciones en términos de anillo 3 instrucciones, tales como POPF, que de otro modo fallaría silenciosamente o se comportaría de manera diferente cuando se ejecutó por encima del anillo 0, haciendo imposible la virtualización clásica trampa y aislamiento. Para mejorar el rendimiento, los bloques básicos traducidos deben ser caché de una manera coherente que detecta el parche de código (utilizado en VxDs por ejemplo), la reutilización de páginas por el sistema operativo invitado, o incluso código automodificador.
  • Una serie de estructuras clave de datos utilizadas por un procesador necesitan ser sombreadas. Debido a que la mayoría de los sistemas operativos utilizan memoria virtual en página, y la concesión del sistema operativo invitado acceso directo a la MMU significaría pérdida de control por el gestor de virtualización, parte del trabajo de la x86 MMU necesita ser duplicado en software para el sistema operativo invitado utilizando una técnica conocida como sombra página tablas. Esto implica negar al usuario OS cualquier acceso a las entradas de tablas de página reales mediante la captura de los intentos de acceso y emularlos en su lugar en el software. La arquitectura x86 utiliza estado oculto para almacenar descriptores de segmento en el procesador, por lo que una vez que los descriptores de segmento se han cargado en el procesador, la memoria de la que se han cargado puede ser sobrescrito y no hay manera de recuperar los descriptores del procesador. Tablas de descriptor de sombra Por lo tanto, debe utilizarse para rastrear los cambios realizados en las tablas descriptor por el sistema operativo invitado.
  • Emulación del dispositivo I/O: Los dispositivos no compatibles en el sistema operativo invitado deben ser emulados por un emulador de dispositivo que funciona en el sistema operativo host.

Estas técnicas generan cierta sobrecarga de rendimiento debido a la falta de soporte de virtualización MMU, en comparación con una máquina virtual que se ejecuta en una arquitectura virtualizable de forma nativa, como IBM System/370.

En los mainframes tradicionales, el hipervisor tipo 1 clásico era autónomo y no dependía de ningún sistema operativo ni ejecutaba ninguna aplicación de usuario. Por el contrario, los primeros productos de virtualización x86 estaban dirigidos a estaciones de trabajo y ejecutaban un sistema operativo invitado dentro de un sistema operativo host integrando el hipervisor en un módulo del kernel que se ejecutaba bajo el sistema operativo host (hipervisor tipo 2).

Ha habido cierta controversia sobre si la arquitectura x86 sin asistencia de hardware es virtualizable como lo describen Popek y Goldberg. Los investigadores de VMware señalaron en un artículo de ASPLOS de 2006 que las técnicas anteriores hicieron que la plataforma x86 fuera virtualizable en el sentido de cumplir con los tres criterios de Popek y Goldberg, aunque no mediante la técnica clásica de atrapar y emular.

Otros sistemas como Denali, L4 y Xen tomaron una ruta diferente, conocida como paravirtualización, que implica portar sistemas operativos para que se ejecuten en la máquina virtual resultante, que no implementa las partes del conjunto de instrucciones x86 real que son Difícil de virtualizar. La E/S paravirtualizada tiene importantes beneficios de rendimiento, como se demuestra en el documento SOSP'03 Xen original.

La versión inicial de x86-64 (AMD64) no permitía una virtualización completa solo de software debido a la falta de soporte de segmentación en modo largo, lo que hacía imposible la protección de la memoria del hipervisor, en particular , la protección del controlador de trampas que se ejecuta en el espacio de direcciones del kernel invitado. La revisión D y los procesadores AMD de 64 bits posteriores (como regla general, los fabricados en 90 nm o menos) agregaron soporte básico para la segmentación en modo largo, lo que permite ejecutar invitados de 64 bits en hosts de 64 bits mediante traducción binaria. . Intel no agregó soporte de segmentación a su implementación x86-64 (Intel 64), lo que hace imposible la virtualización solo de software de 64 bits en las CPU Intel, pero el soporte Intel VT-x hace posible la virtualización asistida por hardware de 64 bits en la plataforma Intel.

En algunas plataformas, es posible ejecutar un invitado de 64 bits en un sistema operativo host de 32 bits si el procesador subyacente es de 64 bits y admite las extensiones de virtualización necesarias.

Virtualización asistida por hardware

En 2005 y 2006, Intel y AMD (trabajando de forma independiente) crearon nuevas extensiones de procesador para la arquitectura x86. La primera generación de virtualización de hardware x86 abordó la cuestión de las instrucciones privilegiadas. El problema del bajo rendimiento de la memoria del sistema virtualizado se solucionó con la virtualización MMU que se agregó al chipset más tarde.

Unidad central de procesamiento

Modo virtual 8086

Basado en experiencias dolorosas con el modo protegido 80286, que por sí solo no era lo suficientemente adecuado para ejecutar bien aplicaciones DOS simultáneas, Intel introdujo el modo virtual 8086 en su chip 80386, que ofrecía procesadores 8086 virtualizados en los chips 386 y posteriores. Sin embargo, el soporte de hardware para virtualizar el modo protegido estuvo disponible 20 años después.

Virtualización AMD (AMD-V)

AMD Phenom Die

AMD desarrolló sus extensiones de virtualización de primera generación con el nombre clave "Pacifica" y las publicó inicialmente como AMD Secure Virtual Machine (SVM), pero luego las comercializó bajo la marca registrada AMD Virtualization, abreviado AMD-V.

El 23 de mayo de 2006, AMD lanzó el Athlon 64 ("Orleans"), el Athlon 64 X2 ("Windsor") y el Athlon 64 FX ("Windsor& #34;) como los primeros procesadores AMD que admiten esta tecnología.

La capacidad AMD-V también se incluye en la familia de procesadores Athlon 64 y Athlon 64 X2 con revisiones "F" o "G" en socket AM2, Turion 64 X2 y procesadores Opteron de segunda y tercera generación, Phenom y Phenom II. Los procesadores APU Fusion son compatibles con AMD-V. AMD-V no es compatible con ningún procesador Socket 939. Los únicos procesadores Sempron que lo admiten son las APU y las CPU de escritorio Huron, Regor y Sargas.

Las CPU AMD Opteron que comienzan con la línea Family 0x10 Barcelona y las CPU Phenom II admiten una tecnología de virtualización de hardware de segunda generación llamada Rapid Virtualization Indexing (anteriormente conocida como Nested Page Tables durante su desarrollo), posteriormente adoptada por Intel como Extended Page Tables. (EPT).

A partir de 2019, todos los procesadores AMD basados en Zen son compatibles con AMD-V.

El indicador de CPU para AMD-V es "svm". Esto se puede comprobar en derivados de BSD mediante dmesg o sysctl y en Linux mediante /proc/cpuinfo. Las instrucciones en AMD-V incluyen VMRUN, VMLOAD, VMSAVE, CLGI, VMMCALL, INVLPGA, SKINIT y STGI.

Con algunas placas base, los usuarios deben habilitar la función AMD SVM en la configuración del BIOS antes de que las aplicaciones puedan utilizarla.

Virtualización Intel (VT-x)

Intel Core i7 (Bloomfield) CPU

Anteriormente con el nombre en código "Vanderpool", VT-x representa la tecnología de Intel para la virtualización en la plataforma x86. El 13 de noviembre de 2005, Intel lanzó dos modelos de Pentium 4 (modelo 662 y 672) como los primeros procesadores Intel compatibles con VT-x. El indicador de CPU para la capacidad VT-x es "vmx"; en Linux, esto se puede verificar a través de /proc/cpuinfo, o en macOS a través de sysctl machdep.cpu.features.

"VMX" significa Extensiones de máquina virtual, que agrega 13 nuevas instrucciones: VMPTRLD, VMPTRST, VMCLEAR, VMREAD, VMWRITE, VMCALL, VMLAUNCH, VMRESUME, VMXOFF, VMXON, INVEPT, INVVPID y VMFUNC. Estas instrucciones permiten entrar y salir de un modo de ejecución virtual en el que el sistema operativo invitado se percibe a sí mismo como ejecutándose con privilegios completos (anillo 0), pero el sistema operativo anfitrión permanece protegido.

A partir de 2015, casi todos los procesadores Intel móviles, de escritorio y de servidor más nuevos son compatibles con VT-x, con algunos de los procesadores Intel Atom como la principal excepción. Con algunas placas base, los usuarios deben habilitar la función VT-x de Intel en la configuración del BIOS antes de que las aplicaciones puedan utilizarla.

Intel comenzó a incluir tablas de páginas extendidas (EPT), una tecnología para la virtualización de tablas de páginas, desde la arquitectura Nehalem, lanzada en 2008. En 2010, Westmere agregó soporte para iniciar el procesador lógico directamente en modo real, una característica llamada "invitado sin restricciones", que requiere EPT para funcionar.

Desde la microarquitectura Haswell (anunciada en 2013), Intel comenzó a incluir VMCS shadowing como una tecnología que acelera la virtualización anidada de VMM. La estructura de control de máquina virtual (VMCS) es una estructura de datos en la memoria que existe exactamente una vez por VM, mientras es administrada por el VMM. Con cada cambio del contexto de ejecución entre diferentes VM, el VMCS se restaura para la VM actual, definiendo el estado del procesador virtual de la VM. Tan pronto como se utilizan más de un VMM o VMM anidados, aparece un problema similar al que requirió que se inventara la administración de tablas de páginas ocultas, como se describió anteriormente. En tales casos, VMCS debe ser sombreado varias veces (en caso de anidamiento) e implementado parcialmente en software en caso de que el procesador no admita hardware. Para hacer que el manejo de Shadow VMCS sea más eficiente, Intel implementó soporte de hardware para Shadow VMCS.

Virtualización VIA (VIA VT)

Los procesadores VIA Nano serie 3000 y superiores admiten la tecnología de virtualización VIA VT compatible con Intel VT-x. EPT está presente en Zhaoxin ZX-C, un descendiente de VIA QuadCore-E & Eden X4 similar al Nano C4350AL.

Virtualización de interrupciones (AMD AVIC e Intel APICv)

En 2012, AMD anunció su Controlador de interrupción virtual avanzado (AVIC) cuyo objetivo es reducir la sobrecarga de interrupciones en entornos de virtualización. Esta tecnología, como se anunció, no es compatible con x2APIC. En 2016, AVIC estará disponible en los modelos 6Xh de la familia AMD 15h (Carrizo) procesadores y más nuevos.

También en 2012, Intel anunció una tecnología similar para la virtualización de interrupciones y APIC, que no tenía marca en el momento del anuncio. Posteriormente, se denominó virtualización APIC (APICv) y estuvo disponible comercialmente en la serie Ivy Bridge EP de CPU Intel, que se vende como Xeon E5-26xx v2 (lanzado a finales de 2013) y como Xeon E5-46xx v2 (lanzado a principios de 2014).

Unidad de procesamiento de gráficos

La virtualización gráfica no es parte de la arquitectura x86. Intel Graphics Virtualization Technology (GVT) proporciona virtualización de gráficos como parte de arquitecturas gráficas Gen más recientes. Aunque AMD APUs implementa el conjunto de instrucciones x86-64, implementan las propias arquitecturas gráficas de AMD (TeraScale, GCN y RDNA) que no admiten virtualización gráfica. Larrabee fue la única microarquitectura gráfica basada en x86, pero probablemente no incluyó soporte para la virtualización de gráficos.

Conjunto de chips

La virtualización de memoria y E/S la realiza el chipset. Normalmente, estas funciones deben estar habilitadas por el BIOS, que debe poder admitirlas y también estar configurado para usarlas.

Virtualización de E/S MMU (AMD-Vi e Intel VT-d)

Un registro del kernel de Linux que muestra información AMD-Vi

Una unidad de administración de memoria de entrada/salida (IOMMU) permite que las máquinas virtuales invitadas utilicen directamente dispositivos periféricos, como Ethernet, tarjetas gráficas aceleradas y controladores de disco duro, a través de DMA y reasignación de interrupciones. A esto a veces se le llama paso PCI.

Una IOMMU también permite a los sistemas operativos eliminar los buffers de rebote necesarios para comunicarse con dispositivos periféricos cuyos espacios de direcciones de memoria son más pequeños que el espacio de direcciones de memoria del sistema operativo, mediante el uso de la traducción de direcciones de memoria. Al mismo tiempo, una IOMMU también permite que los sistemas operativos y los hipervisores eviten que el hardware malicioso o con errores comprometa la seguridad de la memoria.

Tanto AMD como Intel han publicado sus especificaciones IOMMU:

  • Tecnología de Virtualización I/O de AMD, "AMD-Vi", originalmente llamada "IOMMU"
  • Intel "Tecnología de la virtualización para I/O Directo" (VT-d), incluido en la mayoría de procesadores Intel más nuevos (pero no todos) desde la arquitectura Core 2.

Además del soporte CPU, tanto el chipset como el firmware del sistema (BIOS o UEFI) necesitan apoyar plenamente la funcionalidad de virtualización IOMMU para que sea usable. Sólo los dispositivos PCI o PCI Express compatibles nivel de funcionamiento (FLR) se puede virtualizar de esta manera, ya que se necesita para reasignar varias funciones de dispositivo entre máquinas virtuales. Si un dispositivo a ser asignado no admite Interrupciones Signaled Mensaje (MSI), no debe compartir líneas de interrupción con otros dispositivos para que la asignación sea posible. Todos los dispositivos PCI convencionales enrutados detrás de un puente PCI/PCI-X-to-PCI Express pueden ser asignados a una máquina virtual de invitados sólo de una vez; los dispositivos PCI Express no tienen tal restricción.

Virtualización de red (VT-c)

  • Intel "Tecnología de la virtualización para la conectividad" (VT-c).
Virtualización de E/S de raíz única PCI-SIG (SR-IOV)

Virtualización de E/S de raíz única PCI-SIG (SR-IOV) proporciona un conjunto de métodos de virtualización de E/S generales (no específicos de x86) basados en hardware nativo PCI Express (PCIe). según lo estandarizado por PCI-SIG:

  • Servicios de traducción de direcciones (ATS) soporta IOV nativo a través de PCI Express vía traducción de dirección. Requiere soporte para nuevas transacciones para configurar tales traducciones.
  • IOV de raíz única (SR-IOV o SRIOV) soporta IOV nativa en topologías PCI Express complejas existentes. Requiere soporte para nuevas capacidades de dispositivo para configurar múltiples espacios de configuración virtualizados.
  • Multi-root IOV (MR-IOV) soporta IOV nativo en nuevas topologías (por ejemplo, servidores de cuchillas) construyendo en SR-IOV para proporcionar múltiples complejos de raíz que comparten una jerarquía común PCI Express.

En SR-IOV, el más común de ellos, un host VMM configura los dispositivos compatibles para crear y asignar "sombras" de sus espacios de configuración para que los invitados de las máquinas virtuales puedan configurar y acceder directamente a dichos espacios "sombra" recursos del dispositivo. Con SR-IOV habilitado, las interfaces de red virtualizadas son directamente accesibles para los invitados, evitar la participación del VMM y dar como resultado un alto rendimiento general; por ejemplo, SR-IOV alcanza más del 95% del ancho de banda de la red básica en el centro de datos virtualizado de la NASA y en la nube pública de Amazon.

Contenido relacionado

ALGOL Y

ALGOL Y fue el nombre dado a un sucesor especulado del lenguaje de programación ALGOL 60 que incorporaba algunas características radicales que fueron...

Filosofía de la inteligencia artificial

La filosofía de la inteligencia artificial es una rama de la filosofía de la tecnología. Esta se centra en investigar la inteligencia artificial y sus...

Red troncal

Una red troncal o central es una parte de una red informática que interconecta redes y proporciona un camino para el intercambio de información entre...

Historial de versiones de macOS

La historia de macOS, el actual sistema operativo Mac de Apple anteriormente llamado Mac OS X hasta 2011 y luego OS X hasta 2016, comenzó con el proyecto de...

Historia de la supercomputación

El término supercomputación surgió a fines de la década de 1920 en los Estados Unidos en respuesta a los tabuladores de IBM en la Universidad de Columbia....
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save