Windows Hypervisor Platform — QEMU documentation

# Windows Hypervisor Platform

Windows Hypervisor Platform is the Windows API for use of third-party virtual machine monitors with hardware acceleration on Hyper-V.

It’s implemented on top of `Vid`, which is itself implemented on the same set of hypercalls as the `mshv` driver on Linux.

WHPX is the name of the Windows Hypervisor Platform accelerator backend in QEMU. It enables using QEMU with hardware acceleration on both x86_64 and arm64 Windows machines.

## Prerequisites

WHPX requires the Windows Hypervisor Platform feature to be installed.

### Installation

On client editions of Windows, that means installation through Windows Features (`optionalfeatures.exe`). On server editions, feature-based installation in Server Manager can be used.

Alternatively, command line installation is also possible through: `DISM /online /Enable-Feature /FeatureName:HypervisorPlatform /All`

### Minimum OS version

On x86_64, QEMU’s Windows Hypervisor Platform backend is tested starting from Windows 10 version 2004. Earlier Windows 10 releases might work but are not tested.

On arm64, Windows 11 24H2 with the April 2025 optional updates or May 2025 security updates is the minimum required release.

Prior releases of Windows 11 version 24H2 on ARM64 shipped with a pre-release version of the Windows Hypervisor Platform API, which is not supported in QEMU.

## Quick Start

Launching a virtual machine on x86_64 with WHPX acceleration:

    $ qemu-system-x86_64.exe -accel whpx -M pc \
        -smp cores=2 -m 2G -device ich9-usb-ehci1 \
        -device usb-tablet -hda OS.qcow2

Launching a virtual machine on arm64 with WHPX acceleration:

    $ qemu-system-aarch64.exe -accel whpx -M virt \
        -cpu host -smp cores=2 -m 2G \
        -bios edk2-aarch64-code.fd \
        -device ramfb -device nec-usb-xhci \
        -device usb-kbd -device usb-tablet \
        -hda OS.qcow2

On arm64, for non-Windows guests, `-device virtio-gpu-pci` provides additional functionality compared to `-device ramfb`, but is incompatible with Windows’s UEFI GOP implementation, which expects a linear framebuffer to be available.

## Accelerator options

### x86_64

`-trace whpx_unsupported_msr_access` can be used to log accesses to undocumented MSRs.

`-d invalid_mem` allows to trace accesses to unmapped GPAs.

`-accel whpx,ssd=off` disables the separate security domain feature, as in a BTB flush when entering/exiting the guest. This results in a significant MMIO performance increase at the detriment of security mitigations.

## Known issues on x86_64

### Guests using legacy VGA modes

In guests using VGA modes that QEMU doesn’t pass through framebuffer memory for, performance will be quite suboptimal.

Workaround: for affected guests, use a more modern graphics mode. Alternatively, use TCG to run those guests.

### Guests using MMX, SSE or AVX instructions for MMIO

Currently, `target/i386/emulate` does not support guests that use MMX, SSE or AVX instructions for access to MMIO memory ranges.

Attempts to run such guests will result in an `Unimplemented handler` warning for MMX and a failure to decode for newer instructions.

### PIC interrupts on Windows 10

On Windows 10, a legacy PIC interrupt injected does not wake the guest from an HLT when using the Hyper-V provided interrupt controller.

As such, on Windows 10, using the Hyper-V interrupt controller is disabled by default. You can enable it via `-M q35,pic=off` which disables the PIC. In that configuration, using a UEFI is recommended.

On this release, `-M kernel-irqchip=` is not expected to be manually set during normal operation. It remains as a debugging option.

### Known issues on Windows 11

## arm64

### ISA feature support

SVE and SME are not currently supported.