How to Configure Hyper-V Core Scheduler and SMT Isolation in Windows 11 Using PowerShell

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.

Get the best tech tips delivered straight to your inbox.

Join thousands of readers mastering Apple, Google, Microsoft, and Linux.