Proxmox — Windows 11 VM: RDP Session Drops
A Windows 11 VM in Proxmox runs fine until GUI-intensive workloads begin — browser sessions, video playback, or screen sharing. Then the RDP session drops, the QEMU Guest Agent crashes, and the VM becomes unresponsive.
Most of these problems trace back to a handful of VM configuration choices and missing drivers.
Recommended Target Configuration
| Setting | Target Value |
|---|---|
| CPU Type | host (single-node) |
| CPU Limit | 0 (no throttle) |
| RAM | Minimum = Maximum, ballooning disabled |
| Display | VirtIO-GPU + viogpudo driver installed |
| Disk Cache | writeback |
| Disk IO Thread | enabled |
| SSD Emulation | enabled |
| VirtIO Driver Version | 0.1.266 or newer |
| Memory Integrity | disabled |
| Windows Power Plan | High Performance |
| Remote Access | RDP (not noVNC for day-to-day use) |
Fix 1 — Remove the CPU Limit
This is the most common cause of sudden RDP drops. A cpulimit=2 on a 4-vCPU VM caps burst processing at 2 cores. Video decoding without GPU acceleration produces exactly the kind of sharp, short CPU spikes that hit this ceiling — the guest agent crashes and the RDP session drops.
Check whether a limit is set:
Remove it or set it equal to the number of vCPUs:
Fix 2 — Switch Display to VirtIO-GPU
The default VGA adapter has no paravirtualised driver. Windows falls back to software rendering and attempts DXVA2/D3D11 hardware decoding over a non-existent GPU — leading to freezes and crashes under any graphical load.
Change the adapter:
- In the Proxmox UI, go to VM → Hardware → Display
- Change Default to VirtIO-GPU
Then install the driver inside the running Windows VM:
- Open Device Manager → Display adapters
- Right-click the adapter → Update driver → Browse my computer
- Point to the VirtIO ISO:
viogpudo\w11\amd64
Fix 3 — Disable RAM Ballooning
A large gap between minimum and maximum RAM (e.g. 2 GB min / 4 GB max) lets the balloon driver aggressively reclaim memory under host pressure. Inside the guest this triggers swapping, which adds both I/O load and CPU overhead.
Set minimum equal to maximum, or disable ballooning entirely:
Fix 4 — Set CPU Type to host
The default kvm64 type emulates a conservative, older architecture. Setting the type to host exposes the physical CPU's actual instruction set, which significantly improves performance for compute-heavy workloads and reduces unnecessary emulation overhead.
Change via VM → Hardware → Processors → Type → host.
Cluster environments
host is only safe when the VM will never live-migrate between nodes with different CPU generations. On mixed-CPU clusters, use x86-64-v2-AES or higher to avoid migration failures.
Fix 5 — Check the VirtIO SCSI Driver Version
VirtIO SCSI driver versions 0.1.215–0.1.262 have a known bug that generates Windows Event ID 129 errors ("Reset to device") and can cause random I/O stalls under disk load.
Check the installed version in Windows:
- Open Device Manager → Storage controllers
- Right-click the VirtIO SCSI controller → Properties → Driver → Driver Version
If the version is below 0.1.266, update by running virtio-win-gt-x64.msi from the latest VirtIO ISO.
Fix 6 — Disable Memory Integrity
Windows Memory Integrity (Core Isolation) introduces nested virtualisation overhead that has a measurable performance cost inside a VM. Unless required by your use case, disable it.
- Open Windows Security → Device Security → Core isolation details
- Turn off Memory Integrity
- Restart the VM
Fix 7 — Set Power Plan to High Performance
The default balanced power plan throttles CPU frequency during low-activity periods. In a VM this adds latency to RDP sessions and causes sluggish response times for interactive workloads.
Open Settings → Power & sleep → Additional power settings and select High performance.
Immediate Workaround for Video Crashes
If the VirtIO-GPU driver is not yet installed and the VM crashes during video playback or heavy browser use, disable hardware acceleration as a temporary measure until the driver is in place:
- Chrome / Edge: Settings → System → uncheck Use hardware acceleration when available
- Firefox: navigate to
about:config→ setlayers.acceleration.disabledtotrue