rebjak.com
RSS Slovensky
← Blog
#proxmox #windows #virtualization #performance #homelab

Why host CPU type on Proxmox is slower for Windows VMs

The host CPU type enables Spectre/Meltdown mitigations inside Windows, dramatically slowing down RAM operations. The fix is x86-64-v3.

Environment: Proxmox VE, Intel Xeon E5-2650 v3, Ceph cluster, Windows Server 2019 RDS.

Symptoms

A production RDS server with 10–13 users was running slow. Grafana monitoring showed nothing dramatic — average CPU 15.8%, RAM 37.2% of 20 GiB. Initial optimization addressed disk (C: was 91.8% full) and RAM ballooning. After those changes, I looked at the VM configuration itself.

The CPU type was set to host — a standard choice recommended by many guides. It turned out that was exactly the problem.

Root cause: Spectre/Meltdown mitigations in Windows

When you set the CPU type to host, QEMU passes all CPU flags from the physical processor into the VM, including security-related ones:

  • md_clear — instruction to clear microarchitectural data (MDS mitigation)
  • flush_l1d — flush the L1 data cache (L1TF mitigation)

These flags exist because of the Spectre and Meltdown vulnerabilities from 2018. Windows sees them and responds: “this CPU is vulnerable, I need to activate OS-level protection.” It enables its own mitigations — performing extra steps on every memory access.

1. Windows detects md_clear and flush_l1d flags
2. Activates MDS, FBClear, L1TF, SBDR/FBSDP/PSDP mitigations
3. RAM latency: ~100 ns → ~2000 ns (20× slowdown)

The result is a dramatic slowdown of memory operations and overall performance — especially on older CPUs like Haswell/Broadwell.

Verification

To check the mitigation status, use the SpeculationControl PowerShell module:

Install-Module -Name SpeculationControl -Force
Get-SpeculationControlSettings
Mitigationhostx86-64-v3
MDSTrue ✗False ✓
FBClearTrue ✗False ✓
L1TFTrue ✗False ✓
SBDR/FBSDP/PSDPTrue ✗False ✓

With host CPU type — all mitigations active. With x86-64-v3 — none.

Fix: x86-64-v3

x86-64-v3 is a standardized CPU profile. It includes performance extensions (AVX, AVX2, AES, SSE4.2, FMA) but does not include the security flags md_clear and flush_l1d. Windows therefore sees no reason to activate Spectre/Meltdown mitigations.

Security is maintained — mitigations run at the Proxmox kernel (hypervisor) level, not inside each VM separately.

qm set <VMID> -cpu x86-64-v3

Requires a full shutdown + start — a reboot from within Windows is not enough.

Bonus: Live migration

The host CPU type has another problem — live migration can fail if cluster nodes have different microcode versions (a single firmware update on one node is enough). With x86-64-v3 the profile is fixed and independent of the physical CPU → migration between nodes is safe.