Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se describen los modos de lógica de programación de procesadores virtuales en Windows Server y Windows. 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.
Segundo plano
Antes de considerar la lógica y los controles detrás de la programación de procesadores virtuales Hyper-V, es importante entender ciertos conceptos como el multithreading (SMT) y cómo Hyper-V virtualiza los procesadores.
Descripción de SMT
SMT es una técnica en el diseño moderno del procesador que proporciona una manera de separar subprocesos de ejecución independientes para compartir recursos de procesador. SMT normalmente proporciona un aumento modesto del rendimiento a las cargas de trabajo. Paraleliza los cálculos siempre que sea posible, lo que aumenta el rendimiento de las instrucciones. Sin embargo, cuando los subprocesos compiten entre sí por los recursos de procesador compartidos, a veces no hay ninguna mejora notable en el rendimiento. Incluso puede haber una ligera disminución en el rendimiento.
Para usar SMT con Windows Server, debe tener un procesador compatible. Los procesadores con Intel Hyper-Threading Technology (Intel HT Technology) o Advanced Micro Devices (AMD) SMT son ejemplos de procesadores compatibles.
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 AMD SMT, consulte Arquitectura principal de AMD "Zen".
Descripción de cómo virtualiza Hyper-V los procesadores
Antes de considerar tipos de planificador de hipervisor, debe comprender la arquitectura Hyper-V. Para obtener un resumen detallado de cómo funciona esta arquitectura, consulte Hyper-V Información general sobre tecnología. Por ahora, tenga 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.
Existe una asignación uno a uno entre los procesadores virtuales de la partición raíz y los procesadores lógicos subyacentes. Un procesador virtual host siempre se ejecuta en el mismo procesador lógico subyacente. No hay ninguna migración de procesadores virtuales de partición raíz.
De forma predeterminada, los procesadores lógicos que hospedan los procesadores virtuales de partición raíz también pueden ejecutar procesadores virtuales invitados.
El hipervisor puede programar un procesador virtual invitado para que se ejecute en cualquier procesador lógico disponible. El programador del hipervisor intenta tener en cuenta la localidad temporal de caché, la topología de acceso a memoria no uniforme (NUMA) y muchos otros factores cuando asigna un procesador virtual de un invitado. Pero en última instancia, el procesador virtual se puede programar en cualquier procesador lógico host.
Tipos de programador del hipervisor
El hipervisor Hyper-V admite varios modos de lógica del programador, que determinan cómo el hipervisor programa procesadores virtuales en los procesadores lógicos subyacentes. Estos tipos de programador son:
El programador clásico
El programador clásico es el programador predeterminado que se usa en todas las versiones de Hyper-V anteriores a Windows Server 2019. 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 adecuado para la mayoría de los usos tradicionales de Hyper-V, como nubes privadas, proveedores de hospedaje, etc. Las características de rendimiento del tipo de programador clásico están optimizadas para admitir una amplia gama de escenarios de virtualización, como:
- Sobrescribir procesadores virtuales a procesadores lógicos.
- 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 principal del hipervisor es una alternativa a la lógica del programador clásico. El programador principal está disponible a partir de Windows Server 2016 y Windows 10 versión 1607. 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 programan en grupos de dos y nunca se comparte un núcleo entre máquinas virtuales. Cuando programa un procesador virtual para una máquina virtual sin SMT habilitado, ese procesador virtual consume todo el núcleo cuando se ejecuta. Al usar el programador principal:
- Crea un límite de seguridad sólido para el aislamiento de la carga de trabajo de los invitados. Los procesadores virtuales invitados solo se pueden ejecutar en pares de núcleos físicos 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 de un grupo, solo se inicia uno de los flujos de instrucciones del núcleo. El otro se deja inactivo.
- El sistema operativo (SO) y las aplicaciones que se ejecutan en la máquina virtual invitada pueden usar el comportamiento de SMT y las interfaces de programación (API) para controlar y distribuir el trabajo entre subprocesos de SMT, al igual que lo hacen con 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 principal es opcional y el programador clásico es el predeterminado.
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. En la instancia del sistema operativo de partición raíz, el programador NT administra todos los aspectos de la asignación de trabajo a 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 para la directiva de programación y aplicarlos 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 que el hipervisor de Hyper-V usa en procesadores de máquina virtual individuales no se admiten al habilitar el programador raíz del hipervisor. En el sistema operativo raíz, la lógica del programador administra los recursos del host de forma global y no administra los recursos invitados de máquinas virtuales individuales. Los Hyper-V controles de recursos de procesador por máquina virtual, como límites, pesos y reservas, solo se aplican cuando el hipervisor controla directamente la programación del procesador virtual, como con los tipos de programador clásico y principal.
Uso del programador raíz en sistemas de servidor
No recomendamos usar el programador raíz con Hyper-V en servidores. Sus características de rendimiento aún no se caracterizan por completo y se ajustan 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
Después de configurar el hipervisor del host de virtualización para que utilice el tipo de programador central, también puede configurar las máquinas virtuales invitadas para que utilicen SMT. En concreto, puede especificar el número de subprocesos SMT virtuales que se van a exponer a una máquina virtual invitada. Después, el programador del sistema operativo invitado y las cargas de trabajo de máquina virtual pueden detectar y usar la topología SMT en su propia programación de trabajo.
- En Windows Server 2016, SMT invitado no está configurado de forma predeterminada. Un administrador del host de Hyper-V debe habilitarlo explícitamente.
- En Windows Server 2019 y versiones posteriores, las nuevas máquinas virtuales que cree en el host heredan la topología de SMT del host de forma predeterminada. Por ejemplo, una máquina virtual de la versión 9.0 que se crea en un host con dos subprocesos SMT por núcleo también tiene 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 mediante una cuenta que sea miembro del Hyper-V Administradores o un grupo equivalente.
Ejecute
Set-VMProcessor -VMName <VM-name> -HwThreadCountPerCore <n>
, donde<n>
es el número de subprocesos SMT por núcleo que ve la máquina virtual invitada. Si usa un valor de0
para<n>
, el valor deHwThreadCountPerCore
se establece en el número de subprocesos SMT del host por núcleo.Nota
Windows Server 2016 no admite la configuración
HwThreadCountPerCore
en0
.
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 está habilitado. El sistema operativo invitado detecta dos procesadores lógicos que pertenecen al mismo núcleo.
Configuración del tipo de programador de hipervisor
El tipo de programador de hipervisor que Hyper-V usa de forma predeterminada depende de la versión del sistema operativo. Independientemente del programador que sea el predeterminado en el sistema operativo, puede configurar el hipervisor para usar el programador principal. El programador principal aumenta la seguridad al restringir los procesadores virtuales invitados 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 procesadores virtuales invitados.
Nota
En Windows Server 2016, Hyper-V usa el programador clásico de forma predeterminada. Si usa Hyper-V en Windows Server 2016 o posterior, se recomienda seleccionar el programador principal. Realizar este cambio garantiza que los hosts de virtualización estén protegidos de forma óptima frente a máquinas virtuales invitadas potencialmente malintencionadas.
Considere los impactos en la seguridad y el rendimiento
Para ayudar a garantizar que los hosts de Hyper-V se implementan en una configuración de seguridad óptima, Hyper-V usa el modelo de programador de hipervisor principal de forma predeterminada a partir de Windows Server 2019. 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 sobre 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 hypervisorschedulertype
entrada de datos de configuración de arranque (BCD).
Para seleccionar un tipo de programador:
Abra el símbolo del sistema con privilegios de administrador.
Escriba
bcdedit /set hypervisorschedulertype <type>
, donde<type>
es una de las siguientes opciones:Classic
Core
Root
Debe reiniciar el sistema para que los cambios realizados en el tipo de programador del hipervisor surtan efecto.
Nota
El programador raíz del hipervisor no se admite en Hyper-V en 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
Puedes determinar el tipo de programador de hipervisor que Hyper-V está usando actualmente examinando el registro del sistema de Windows. Busque el evento de inicio del hipervisor más reciente que tiene un identificador de 2. Ese evento informa sobre el tipo de programador del hipervisor configurado al inicio del hipervisor. Los siguientes valores son posibles para el tipo de programador de hipervisor:
Importancia | Tipo de programador |
---|---|
1 | Programador clásico, SMT deshabilitado |
2 | Programador clásico |
3 | Programador principal |
4 | Planificador raíz |
Puede usar el Visor de eventos o PowerShell para ver los registros de eventos de inicio del hipervisor.
Uso de PowerShell para consultar los registros del sistema para un evento de inicio de hipervisor
Para consultar los registros del sistema de un evento de hipervisor con un identificador de 2 mediante PowerShell, ejecute el siguiente comando:
Get-WinEvent -FilterHashTable @{ProviderName="Microsoft-Windows-Hyper-V-Hypervisor"; ID=2} -MaxEvents 1