Skip to content

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.


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:

qm config <VMID> | grep cpulimit

Remove it or set it equal to the number of vCPUs:

qm set <VMID> --cpulimit 0

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:

  1. In the Proxmox UI, go to VM → Hardware → Display
  2. Change Default to VirtIO-GPU

Then install the driver inside the running Windows VM:

  1. Open Device Manager → Display adapters
  2. Right-click the adapter → Update driver → Browse my computer
  3. 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:

qm set <VMID> --balloon 0

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:

  1. Open Device Manager → Storage controllers
  2. 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.

  1. Open Windows Security → Device Security → Core isolation details
  2. Turn off Memory Integrity
  3. 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 → set layers.acceleration.disabled to true