Compartir a través de


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.

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:

  1. Abra una ventana de PowerShell con una cuenta que sea miembro del grupo Administradores de Hyper-V o equivalente.
  2. Ejecute <n>, donde Set-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 de HwThreadCountPerCore 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.

Captura de pantalla que muestra msinfo32 en una máquina virtual invitada con SMT habilitado.

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:

  1. Abra un símbolo del sistema con privilegios de administrador.
  2. Escriba bcdedit /set hypervisorschedulertype type, donde type 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

Captura de pantalla de la ventana de propiedades ID de evento de inicio del hipervisor 2. El usuario ha seleccionado la pestaña General, en la que se muestra que el tipo de programador del hipervisor es 0x2.

Captura de pantalla de la ventana Visor de eventos. El usuario ha seleccionado el identificador 2 del evento de inicio del hipervisor de Hyper-V en la lista de eventos, resaltado en azul oscuro.

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

Captura de pantalla de una consulta para el identificador de evento de inicio del hipervisor 2. Los resultados indican que el tipo de programador del hipervisor es 0x2.