---
ExHyperV
**English** | [中文](https://github.com/Justsenger/ExHyperV/blob/main/README_zh.md)
---
ExHyperV aims to provide a graphical, easy-to-use configuration tool for advanced Hyper-V features by delving into technical details such as Hyper-V documentation, [WMI](https://github.com/Justsenger/HyperV-WMI-Documentation), and [HCS](https://learn.microsoft.com/en-us/virtualization/api/hcs/overview).
Due to limited personal time and energy, the project may contain untested scenarios or bugs. If you encounter any hardware/software issues during use, please feel free to report them via [Issues](https://github.com/Justsenger/ExHyperV/issues)!
Features will be gradually improved over time. If there is a specific feature you would like to see prioritized, or if you love this project, you can support it via the donation button at the bottom of the document and leave a message!
## Interface Overview
ExHyperV uses the [WPF-UI](https://github.com/lepoco/wpfui) framework to provide a smooth, modern user interface experience with sci-fi visual effects. It supports both dark and light themes and automatically switches based on the system theme.
Supported languages: Simplified Chinese & English.
Click to see more screenshots
## Quick Start
---
### 1. Download and Run
- **Download**: Go to the [Releases page](https://github.com/Justsenger/ExHyperV/releases/latest) to download the latest version.
- **Run**: Extract the archive and run `ExHyperV.exe` directly.
---
### 2. Build (Optional)
1. Install [Visual Studio](https://visualstudio.microsoft.com/vs/) and ensure the .NET desktop development workload is selected.
2. Clone this repository using GitHub Desktop or Git.
3. Open the `/src/ExHyperV.sln` file with Visual Studio to compile.
Alternatively, you can download the [.NET SDK](https://dotnet.microsoft.com/zh-cn/download), open the project directory, and run:
```pwsh
cd src
dotnet build
```
## Technical Documentation
This section will be maintained long-term. It is written based on Hyper-V related documentation and development practices, and may contain inaccuracies.
---
### Introduction to Hyper-V
> [!NOTE]
> Hyper-V is a high-performance virtual machine manager (Hypervisor) based on Type-1 architecture.
When you enable the Hyper-V feature, the host system becomes a privileged virtual machine belonging to the Root Partition. The created virtual machines belong to Child Partitions; they are isolated from each other and cannot perceive each other's existence.
Virtualization technologies belonging to the Type-1 architecture include: Hyper-V, Proxmox (KVM), VMware ESXi (VMkernel), Xen, etc., with performance utilization rates generally above 98%.
Virtualization technologies belonging to the Type-2 architecture include: VMware Workstation, Oracle VirtualBox, Parallels Desktop, etc., with performance utilization rates around 90%~95%.
Based on these facts, you can view virtual machines as isolated small rooms where you can run potentially threatening programs, test system functions, multi-box games, or other uses without worrying about messing up the host system (Except in cases where FLR is not supported in PCIe Passthrough, where a VM restart might restart the host, or viruses with lateral movement capabilities—please pay attention to network security).
You can enable/disable Hyper-V via the Control Panel or a simple Powershell command (requires Pro or Server edition). After confirming with Y and rebooting, processes like vmms.exe, vmcompute.exe, and vmmem will run continuously in the background, and the Hyper-V Manager icon will appear in the Start menu.
```
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
```
---
### Scheduler
> [!NOTE]
> The scheduler coordinates how physical processor CPU time is allocated to virtual machine processors.
Hyper-V has three types of schedulers: Classic / Core / Root. They can be categorized into two types: Manual (Classic, Core) and Automatic (Root). Core can be seen as a variant of Classic that improves security but may reduce performance in some scenarios.
The **Classic Scheduler** dates back to Windows Server 2008. It is based on the principle of fair allocation using traditional time slicing. It randomly allocates VM processor time to any available logical processor on the host. If host resources are idle, it is more likely to allocate logical processors from different physical cores rather than hyper-threads to achieve better performance.
The **Core Scheduler** appeared later, introduced in Windows Server 2016 and Windows 10 Build 14393. Its purpose is to mitigate side-channel attacks. Even if host resources are idle, it tends to allocate two threads of the same physical core rather than more physical cores. This strategy helps improve security and VM isolation but significantly reduces the CPU performance allocated to VMs when host resources are idle. Starting from Windows Server 2019, Windows Server defaults to using the Core Scheduler.
The **Root Scheduler** was released in Windows 10 Build 17134. It collects metrics on workload CPU usage and makes automatic scheduling decisions. It is very suitable for hybrid CPU architectures (Big/Little cores). Starting from Build 17134, Windows Hyper-V (Pro) defaults to using the Root Scheduler.
The system type is independent of the scheduler type; you can switch arbitrarily, effective after rebooting the host.
---
### Processor (vCPU)
> [!NOTE]
> The ability of the virtual machine to request execution time on logical processors from the host.
#### Compute Resources
##### Core Count
Usually set to even numbers like 2, 4, 8, 16.
Increasing vCPUs significantly improves the processing speed of parallel tasks, but too many unnecessary vCPUs may bring scheduling pressure to the Hypervisor.
If the total number of VM cores exceeds the host's physical logical core count (Overselling), applications requiring immediate response will be greatly affected.
##### Reserve
The lower limit percentage of execution time provided for this virtual machine. Reserve Value = Reserve * Core Count.
##### Limit
The upper limit percentage of execution time provided for this virtual machine. Limit Value = Limit * Core Count.
##### Weight
The priority of this virtual machine in competing for CPU execution time, ranging from 0 to 10000.
#### Advanced Features
##### Host Resource Protection
When enabled, it monitors I/O requests communicated through VMBus. If abnormal behavior such as interrupt storms occurs, it reduces CPU execution time allocation to prevent affecting the host system in the root partition. Ordinary users do not need to enable this.
##### Nested Virtualization
When enabled, it passes through the CPU's VT-x/AMD-V instruction set extensions, allowing you to run a virtual machine inside a Hyper-V virtual machine. This slightly increases CPU virtualization overhead.
After enabling Nested Virtualization and Hyper-V features in the VM, the VM's Task Manager will show L1/L2/L3 cache topology and will no longer be marked as "Virtual Machine: Yes," which helps with avoiding virtualization detection.
##### Migration Compatibility
When enabled, it masks part of the CPU instruction set—exactly which part depends on [cpu-migration-compatibility.md](doc/cpu-migration-compatibility.md)—to facilitate live migration across hosts with different hardware. Ordinary users do not need to enable this.
##### Legacy System Compatibility
When enabled, it significantly strips down the CPU instruction set. This is beneficial for running Windows 7 or earlier operating systems but detrimental to running modern operating systems.
##### Virtual Machine SMT
When enabled, the virtual machine can perceive that its vCPUs appear as paired logical cores, helping the OS kernel inside the VM to better perform L1/L2 cache optimization and process scheduling.
##### Expose Architecture Performance Monitoring Unit
When enabled, it passes through the CPU's hardware counters, allowing development tools inside the virtual machine to directly access physical CPU performance monitoring hardware. Requires host support.
##### Expose Frequency Monitoring Registers
When enabled, allows the virtual machine operating system to read the actual frequency of the physical processor. Default is enabled.
##### Disable Side-Channel Attack Mitigations
When enabled, disables the IBRS / IBRS_ALL / STIBP / IBPB / SSBD / MD_CLEAR / TSX_CTRL features. This slightly improves performance but reduces virtualization security.
##### Enable Socket Topology
When enabled, the virtual machine's socket topology follows the host's physical sockets, so the VM can perform NUMA scheduling based on the real sockets.
##### APIC Mode
- Auto (default, let Hyper-V choose)
- xAPIC (legacy, MMIO access, 8-bit APIC ID → addresses up to 255)
- x2APIC (newer, MSR access, 32-bit APIC ID → addresses a huge number of processors)
- Apic (both xAPIC and x2APIC coexist; the VM boots in xAPIC and can switch to x2APIC at runtime)
##### Custom CPU Name
Allows customizing the CPU name, a maximum 48-byte ASCII string. Requires at least Build 20348.
##### CPU Pinning
CPU Pinning is implemented based on CPU Groups (Classic + Core schedulers) + Process Affinity (Root scheduler), allowing you to forcibly lock vCPUs to specified cores.
The best practice is binding 4 vCPUs to 4 cores. Binding 2 vCPUs to 4 cores will cause random drift, and binding 4 vCPUs to 2 cores will cause queuing, and so on.
If you find the scheduler performance poor, or have concerns about Intel's hybrid architecture or AMD's multi-chip architecture, please try using this feature.
> [!CAUTION]
> The following are experimental features. Use with caution.
##### L3 Cache Ways
Manually specify the L3 cache ways the virtual machine sees. When hosts in a cluster have different L3 geometries, fixing the VM's L3 ways to a constant lets cache-topology-aware software inside the VM see consistent cache information before and after migration.
##### L3 Processor Distribution Policy
Decides how vCPUs use the L3 domains. Four policies (Small to Large / Large to Small / Even·Small to Large / Even·Large to Small):
- "Small to Large / Large to Small": prefer allocating the smaller / larger L3 domain.
- "Even": spread vCPUs across the L3 domains as evenly as possible.
##### Page Shattering
Decides the shattering policy of SLAT (Second-Level Address Translation).
- Always shatter: SLAT always uses 4KB small pages.
- Never shatter: use large pages whenever possible.
- Default: decided by the platform and isolation mode.
##### Ignore Host Max Frequency
Lifts the host's frequency cap on the virtual machine. Requires CPU support for frequency-scaling delegation.
##### Expose PMU / LBR / PEBS / IPT
Passes the physical CPU's performance-monitoring hardware through to the virtual machine, for use by profiling and debugging tools inside the VM. Requires host support.
- PMU: hardware performance counters (cycles, instructions, cache hits / misses, branch mispredicts, etc.).
- LBR: Last Branch Record, reconstructs hot call paths.
- PEBS: Precise Event-Based Sampling, pins events to the exact triggering instruction.
- IPT: Processor Trace, low-overhead recording of the full execution control flow.
##### Frequency Cap / Floor / Target (MHz)
Set the virtual machine's CPU running frequency. Requires CPU support for frequency-scaling delegation.
- Cap: frequency will not exceed this value.
- Floor: frequency will not fall below this value.
- Target: run as close to this frequency as pos