Modern microprocessors utilise Simultaneous Multithreading (SMT)—commonly branded as Intel Hyper-Threading or AMD SMT—to expose two or more logical execution threads per physical processor core. While SMT significantly enhances multi-threaded compute throughput, sharing execution units, caches, and branch predictors between threads introduces vulnerability to speculative execution side-channel attacks (such as L1 Terminal Fault, Microarchitectural Data Sampling, and Spectre variants). In Windows 11 Hyper-V, the Hypervisor Scheduler dictates how virtual machine guest processors (vCPUs) map to physical CPU threads. Through PowerShell and hypervisor boot configuration, administrators can enforce strict Core Scheduler policies to guarantee mathematical hardware isolation.
Understanding Hyper-V Hypervisor Scheduler Architectures
Microsoft Hyper-V provides three distinct scheduler operational modes:
- Classic Scheduler (Default legacy mode): Schedules individual vCPUs onto any available logical processor thread across the host. A physical core’s sibling threads can concurrently execute code from two different virtual machines or between a guest VM and the host root partition, maximizing resource utilization at the cost of vulnerability to SMT cross-thread eavesdropping.
- Core Scheduler: Enforces physical core boundaries. Sibling hardware threads on a physical core run virtual processors strictly from the same virtual machine at any given time. Cross-VM and VM-to-host execution never co-exist on the same physical execution core, neutralizing SMT side-channel vulnerabilities.
- Root Scheduler: Available in specialised client scenarios, giving the root Windows host operating system direct affinity control over thread scheduling.
Inspecting Host SMT and Scheduler Topology via PowerShell
Before modifying scheduler parameters, verify whether SMT is enabled on the host processor and inspect the current hypervisor scheduler configuration. Launch PowerShell with elevated administrator privileges:
# Inspect physical and logical processor cores
Get-CimInstance Win32_Processor | Select-Object Name, NumberOfCores, NumberOfLogicalProcessors
# Calculate SMT ratio (if logical processors > cores, SMT is active)
$CPU = Get-CimInstance Win32_Processor
Write-Host "Cores: $($CPU.NumberOfCores), Threads: $($CPU.NumberOfLogicalProcessors)"
To inspect the active Boot Configuration Data (BCD) hypervisor scheduler setting, query bcdedit:
# Query active hypervisor scheduler type
bcdedit /enum {current} | Select-String "hypervisorschedulertype"
If the command returns nothing, Hyper-V operates under the default scheduler mode.
Enabling the Hyper-V Core Scheduler
To configure Hyper-V to use the security-hardened Core Scheduler, update the Windows boot configuration data:
# Configure the hypervisor to enforce Core Scheduler policy
bcdedit /set hypervisorschedulertype Core
For high-throughput development environments where maximum multi-tenant density is required and side-channel threats are mitigated through other compensating controls, you can revert to the classic scheduler:
# Set classic scheduler mode (maximum throughput, inter-VM SMT sharing)
bcdedit /set hypervisorschedulertype Classic
Note: Modifying hypervisorschedulertype alters the initialisation parameters of the Windows hypervisor microkernel; a system restart is required for the change to take effect.
Configuring Virtual Machine Hardware Thread Count Per Core
When the Core Scheduler is active, Hyper-V allows administrators to expose virtual SMT topology to guest operating systems. By configuring the guest to recognize physical thread pairings, the guest kernel optimizes its own internal thread scheduling.
# Configure a target virtual machine to utilize 2 hardware threads per core
Set-VMProcessor -VMName "Ubuntu-Server" -HwThreadCountPerCore 2
# Verify the virtual processor configuration
Get-VMProcessor -VMName "Ubuntu-Server" | Select-Object VMName, Count, HwThreadCountPerCore
If you set -HwThreadCountPerCore 1, the hypervisor disables SMT inside the guest, scheduling only one vCPU per physical core and dedicating the sibling hardware thread as an idle cushion.
Auditing Core Isolation and Speculation Mitigations
To verify whether the operating system and hypervisor have successfully engaged core isolation mitigations, utilize the official Microsoft SpeculationControl diagnostic PowerShell module:
# Install and import the SpeculationControl module
Install-Module -Name SpeculationControl -Force -Scope CurrentUser
Import-Module SpeculationControl
# Execute speculation and scheduler validation
Get-SpeculationControlSettings
Inspect the output under the SMT and Core Scheduling section:
| Setting Name | Required State | Operational Meaning |
|---|---|---|
HypervisorCoreSchedulerPresent |
True |
Confirms the hypervisor supports and loaded the Core Scheduler. |
HypervisorCoreSchedulerEnabled |
True |
Confirms active enforcement of physical core boundaries between VMs. |
BpbEnabled |
True |
Branch Predictor Barrier active across context switches. |
Reverting to Default Hypervisor Scheduling
If benchmark testing demonstrates that legacy workloads require the unconstrained multi-tenant packing of the default hypervisor scheduler, remove the explicit BCD override:
# Delete the custom hypervisor scheduler configuration
bcdedit /deletevalue hypervisorschedulertype
# Restart the host machine to apply default hypervisor behavior
Restart-Computer
Configuring the Hyper-V Core Scheduler in Windows 11 provides enterprise-grade physical boundary enforcement, protecting multi-tenant virtual machines against hardware SMT side-channel extraction.