Administrar de tipos de programador del hipervisor de Hyper-V
En este artículo, se describen los nuevos modos de lógica de programación de procesadores virtuales presentados en Windows Server 2016. Estos modos, o tipos de programador, determinan cómo asigna y administra el trabajo el hipervisor de Hyper-V entre procesadores virtuales invitados. Un administrador de host de Hyper-V puede:
- Seleccione tipos de programador de hipervisor más adecuados para las máquinas virtuales invitadas.
- Configure las máquinas virtuales para aprovechar la lógica de programación.
Requisitos previos
Debe instalar las siguientes actualizaciones para usar las características de programador del hipervisor que se describen más adelante en este documento. Estas actualizaciones incluyen cambios para admitir la nueva opción de BCD hypervisorschedulertype
, que es necesaria para la configuración del host.
Versión | Versión | Actualización necesaria | Artículo de Knowledge Base |
---|---|---|---|
Windows Server 2016 | 1607 | 2018.07 C | KB4338822 |
Windows Server 2016 | 1703 | 2018.07 C | KB4338827 |
Windows Server 2016 | 1709 | 2018.07 C | KB4338817 |
Windows Server 2019 | 1804 | Ninguno | Ninguno |
Segundo plano
Antes de analizar la lógica y los controles detrás de la programación de procesadores virtuales de Hyper-V, es importante comprender ciertos conceptos como multithreading simultáneo y cómo Hyper-V virtualiza los procesadores.
Descripción de SMT
El multiproceso simultáneo (SMT) es una técnica de los diseños de procesador modernos que permite que los que los subprocesos de ejecución independientes compartan los recursos del procesador. Normalmente, SMT ofrece un modesto aumento del rendimiento a la mayoría de las cargas de trabajo. Paraleliza los cálculos siempre que sea posible, lo que aumenta el rendimiento de las instrucciones. Sin embargo, también hay ocasiones en las que no hay ninguna mejora notable en el rendimiento o incluso una ligera pérdida cuando los subprocesos compiten entre sí para los recursos de procesador compartidos.
Para usar SMT con Windows Server, debe tener un procesador compatible. Por ejemplo, un procesador con tecnología Intel Hyper-Threading o Micro Devices Avanzados (AMD) Multithreading (SMT).
Para los fines de este artículo, las descripciones de SMT y cómo se usan en Hyper-V se aplican igualmente a los sistemas Intel y AMD.
Para obtener más información sobre la tecnología Intel HT, vea Tecnología Intel Hyper-Threading.
Para obtener más información sobre SMT de AMD, vea La arquitectura del núcleo "Zen".
Descripción de cómo virtualiza Hyper-V los procesadores
Antes de considerar los tipos de programador del hipervisor, debería considerar la arquitectura de Hyper-V. Puede encontrar un resumen más detallado de cómo funciona esta arquitectura en la Información general sobre Hyper-V, pero por ahora debe tener en cuenta los siguientes conceptos:
Hyper-V crea y administra particiones de máquina virtual en las que se asignan y comparten los recursos de proceso, bajo control del hipervisor. Las particiones proporcionan límites de aislamiento sólidos entre todas las máquinas virtuales invitadas y entre estas y la partición raíz.
La partición raíz es en sí misma una partición de máquina virtual, aunque tiene propiedades únicas y mayores privilegios que las máquinas virtuales invitadas. La partición raíz:
- Proporciona los servicios de administración que controlan todas las máquinas virtuales invitadas.
- Proporciona compatibilidad con dispositivos virtuales para invitados.
- Administra todas las entradas y salidas del dispositivo para las máquinas virtuales invitadas.
Recomendamos no ejecutar ninguna carga de trabajo de aplicación en la partición raíz.
Cada procesador virtual de la partición raíz se asigna con una correspondencia estricta 1:1 a un procesador lógico subyacente. Una VP de host siempre se ejecuta en el mismo LP subyacente. No hay ninguna migración de VP de la partición raíz.
De forma predeterminada, los procesadores lógicos en los que se ejecutan los procesadores virtuales de host también pueden ejecutar las particiones raíz de los procesadores virtuales invitados.
El hipervisor puede programar un VP invitado para que se ejecute en cualquier procesador lógico disponible. Aunque el programador del hipervisor intenta tener en cuenta la ubicación temporal de la caché, la topología del acceso no uniforme a memoria (NUMA) y muchos otros factores al programar un procesador virtual de invitado, este, en última instancia, se puede programar en cualquier procesador lógico del host.
Tipos de programador del hipervisor
En Windows Server 2016, el hipervisor de Hyper-V admite varios modos de lógica del programador, que determinan cómo programa el hipervisor los procesadores virtuales en los procesadores lógicos subyacentes. Estos tipos de programador son:
El programador clásico
El programador clásico ha sido el valor predeterminado para todas las versiones del hipervisor de Hyper-V de Windows desde su inicio, incluido Hyper-V de Windows Server 2016. El programador clásico proporciona un modelo de programación de reparto equitativo y rotación preventiva para los procesadores virtuales invitados.
El tipo de programador clásico es el más adecuado para mayoría de los usos tradicionales de Hyper-V, como nubes privadas, proveedores de hospedaje, etc. Las características de rendimiento de tipo programador clásico se optimizan mejor para admitir una amplia gama de escenarios de virtualización, como:
- Sobrescribir VP a LP.
- Ejecutar muchas máquinas virtuales y cargas de trabajo heterogéneas al mismo tiempo.
- Ejecución de máquinas virtuales de alto rendimiento a mayor escala.
- Compatibilidad con el conjunto completo de características de Hyper-V sin restricciones y otros escenarios.
Programador de núcleo
El programador de núcleo del hipervisor es una alternativa a la lógica del programador clásico, presentada en Windows Server 2016 y la versión 1607 de Windows 10. El programador de núcleos ofrece un límite de seguridad seguro para el aislamiento de la carga de trabajo de invitado. También reduce la variabilidad del rendimiento de las cargas de trabajo dentro de las máquinas virtuales que se ejecutan en un host de virtualización habilitado para SMT. El programador de núcleo permite ejecutar máquinas virtuales SMT y no SMT al mismo tiempo en el mismo host de virtualización habilitado para SMT.
Programador de núcleo:
- Usa la topología SMT del host de virtualización.
- Opcionalmente, expone pares SMT a máquinas virtuales invitadas.
- Programa grupos de procesadores virtuales invitados de la misma máquina virtual en grupos de procesadores lógicos SMT.
Este trabajo se produce simétricamente. Si los procesadores lógicos están en grupos de dos, los procesadores virtuales se programen en grupos de dos y nunca se comparta un núcleo entre máquinas virtuales. Cuando programa el procesador virtual para una máquina virtual sin SMT habilitado, ese procesador virtual consume todo el núcleo cuando se ejecuta. El resultado general del programador de núcleo es el siguiente:
- Crea un límite de seguridad seguro para el aislamiento de la carga de trabajo de invitado. Los VP invitados solo pueden ejecutarse en pares de núcleo físico subyacentes, lo que reduce la vulnerabilidad a los ataques de snooping del canal lateral.
- Se reduce la variabilidad en el rendimiento.
- Puede reducir potencialmente el rendimiento. Si solo se puede ejecutar un procesador virtual del grupo, solo se inicia uno de los flujos de instrucciones del núcleo mientras el otro se deja inactivo.
- El sistema operativo y las aplicaciones que se ejecutan en la máquina virtual invitada pueden usar las interfaces de programación (API) y el comportamiento de SMT para controlar y distribuir el trabajo entre subprocesos SMT, como se haría en una máquina física.
Por lo que respecta a Windows Server 2019, Hyper-V utiliza el programador de núcleo de manera predeterminada. En versiones anteriores como Windows Server 2016, el programador era opcional y el programador clásico es la opción predeterminada.
Comportamiento del programador de núcleo con SMT deshabilitado en el host
En algunos casos, puede configurar el hipervisor para usar el tipo de programador principal, pero la funcionalidad SMT está deshabilitada o no está presente en el host de virtualización. En estos casos, Hyper-V usa el comportamiento del programador clásico independientemente de la configuración del tipo de programador de hipervisor.
Programador raíz
El programador raíz llegó con la versión 1803 de Windows 10. Cuando se habilita el tipo de programador raíz, el hipervisor da a la partición raíz el control de la programación de trabajos. El programador NT de la instancia del sistema operativo de la partición raíz administra todos los aspectos de la programación de trabajos en los procesadores lógicos del sistema.
El programador raíz aborda los requisitos únicos a la compatibilidad con una partición de utilidad y proporciona un aislamiento seguro de la carga de trabajo, como se usa con la Protección de aplicaciones de Windows Defender (WDAG). En este escenario, dejar las responsabilidades de programación al sistema operativo raíz ofrece varias ventajas:
- Puede usar los controles de recursos de CPU aplicables a escenarios de contenedores con la partición de utilidad, lo que simplifica la administración y la implementación.
- El programador del sistema operativo raíz puede recopilar fácilmente métricas sobre el uso de la CPU de carga de trabajo dentro del contenedor. Puede usar estos datos como entrada en la misma directiva de programación aplicable a todas las demás cargas de trabajo del sistema.
- Estas mismas métricas también ayudan a atribuir el trabajo realizado en un contenedor de aplicaciones al sistema host. El seguimiento de estas métricas es más difícil con las cargas de trabajo de máquina virtual tradicionales, donde parte del trabajo en nombre de todas las máquinas virtuales en ejecución tiene lugar en la partición raíz.
Uso del programador raíz en sistemas cliente
Desde Windows 10, el programador raíz solo se usa de forma predeterminada en los sistemas cliente, que significa:
- Puede habilitar el hipervisor para admitir la seguridad basada en virtualización y el aislamiento de la carga de trabajo de WDAG.
- Es importante operar correctamente sistemas futuros con arquitecturas de núcleo heterogéneos.
Esta configuración es la única configuración del programador del hipervisor admitida para sistemas cliente. Los administradores no deben intentar invalidar el tipo de programador predeterminado del hipervisor en sistemas cliente con Windows.
Controles de recursos de CPU de máquina virtual y el programador raíz
Los controles de recursos de procesador de máquina virtual proporcionados por Hyper-V no se admiten cuando habilita el programador raíz del hipervisor. La lógica del programador del sistema operativo raíz administra los recursos del host de forma global y no administra los recursos invitados de una sola máquina virtual. Los controles de recursos de procesador por cada máquina virtual de Hyper-V, como los límites, las ponderaciones y las reservas, solo pueden ser aplicables cuando el hipervisor controla directamente la programación de los procesadores virtuales, como con los tipos de programador clásico y de núcleo.
Uso del programador raíz en sistemas de servidor
No recomendamos usar el programador raíz con Hyper-V en servidores. Ya que sus características de rendimiento aún no se han caracterizado y ajustado completamente para adaptarse a la amplia gama de cargas de trabajo típicas de muchas implementaciones de virtualización de servidores.
Habilitación de SMT en máquinas virtuales invitadas
Una vez configure el hipervisor del host de virtualización para usar el tipo de programador de núcleo, también puede configurar las máquinas virtuales invitadas para usar SMT. Exponer el hecho de que los procesadores virtuales tienen Hyper Threading en una máquina virtual invitada permite al programador del sistema operativo invitado y las cargas de trabajo que se ejecutan en la máquina virtual detectar y usar la topología SMT en su propia programación de trabajos.
- En Windows Server 2016, SMT invitado no está configurado de forma predeterminada. Un administrador del host de Hyper-V debe habilitarlo explícitamente.
- A partir de Windows Server 2019, las nuevas máquinas virtuales que cree en el host heredan la topología SMT del host de manera predeterminada. Por ejemplo, una máquina virtual de la versión 9.0 que cree en un host con dos subprocesos SMT por núcleo también tendría dos subprocesos SMT por núcleo.
Debe usar PowerShell para habilitar SMT en una máquina virtual invitada. No hay ninguna interfaz de usuario proporcionada en el Administrador de Hyper-V. Para habilitar SMT en una máquina virtual invitada:
- Abra una ventana de PowerShell con una cuenta que sea miembro del grupo Administradores de Hyper-V o equivalente.
- Ejecute
<n>
, dondeSet-VMProcessor -VMName <VMName> -HwThreadCountPerCore <n>
es el número de subprocesos SMT por núcleo que ve la máquina virtual invitada.<n> = 0
establece el valor deHwThreadCountPerCore
para que coincida con valor del recuento de subprocesos SMT por núcleo del host.
Nota
En Windows Server 2019 y versiones posteriores, puede establecer HwThreadCountPerCore = 0
en lugar de coincidir con el número de subprocesos SMT del host.
En la captura de pantalla siguiente se muestra la información del sistema tomada del sistema operativo invitado que se ejecuta en una máquina virtual. Hay dos procesadores virtuales y SMT habilitados. El sistema operativo invitado detecta dos procesadores lógicos que pertenecen al mismo núcleo.
Configurar el tipo de programador del hipervisor en Hyper-V de Windows Server 2016
Hyper-V de Windows Server 2016 usa el modelo de programador del hipervisor clásico de manera predeterminada. Opcionalmente, puede configurar el hipervisor para usar el programador principal. El programador principal aumenta la seguridad al restringir las máquinas virtuales invitadas para que se ejecuten en los pares físicos de SMT correspondientes. Esta configuración admite el uso de máquinas virtuales con programación SMT para sus máquinas virtuales invitadas.
Nota
Recomendamos que todos los clientes que ejecutan Hyper-V de Windows Server 2016 seleccionen el programador de núcleo para asegurarse de que los hosts de virtualización estén protegidos de forma óptima frente a máquinas virtuales invitadas potencialmente malintencionadas.
De manera predeterminada, Hyper-V de Windows Server 2019 utiliza el programador de núcleo
Para garantizar que los hosts de Hyper-V se implementen con la configuración de seguridad óptima, Hyper-V de Windows Server 2019 ahora usa el modelo de programador de núcleo del hipervisor de manera predeterminada. El administrador del host puede configurar opcionalmente el host para que use el programador clásico heredado. Antes de invalidar la configuración predeterminada, los administradores deben leer, comprender y considerar detenidamente los impactos que tiene cada tipo de programador en la seguridad y el rendimiento de los hosts de virtualización. Para obtener más información, consulte Acerca de la selección del tipo de programador del hipervisor de Hyper-V.
Seleccionar el tipo de programador del hipervisor en Windows Server
La configuración del programador del hipervisor se controla mediante la entrada de BCD hypervisorschedulertype
.
Para seleccionar un tipo de programador:
- Abra un símbolo del sistema con privilegios de administrador.
- Escriba
bcdedit /set hypervisorschedulertype type
, dondetype
es una de estas opciones:
Classic
Core
Root
Debe reiniciar el sistema para que los cambios que haga en el tipo de programador del hipervisor surtan efecto.
Nota
El programador raíz del hipervisor no se admite en Hyper-V de Windows Server en este momento. Los administradores de Hyper-V no deben intentar configurar el programador raíz para su uso con escenarios de virtualización de servidor.
Determinar el tipo de programador actual
Puede determinar qué tipo de programador del hipervisor actual está usando Hyper-V en ese momento al examinar el registro del sistema del Visor de eventos. Puede ver el identificador 2 de evento de inicio del hipervisor más reciente, que informa del tipo de programador de hipervisor configurado en el inicio del hipervisor. Puede obtener los eventos de inicio del hipervisor en el Visor de eventos de Windows o en PowerShell.
El identificador 2 de evento de inicio del hipervisor indica el tipo de programador del hipervisor, donde:
- 1 = Programador clásico, SMT deshabilitado
- 2 = Programador clásico
- 3 = Programador de núcleo
- 4 = Programador raíz
Consulta del evento de inicio del tipo de programador del hipervisor de Hyper-V mediante PowerShell
Para consultar el identificador 2 de evento del hipervisor mediante PowerShell, ejecute los siguientes comandos desde un símbolo del sistema de PowerShell:
Get-WinEvent -FilterHashTable @{ProviderName="Microsoft-Windows-Hyper-V-Hypervisor"; ID=2} -MaxEvents 1