Slow nested VMs on Hyper-V: fix the VMQ bottleneck

Server & Cloud Intermediate 👁 5 views 📅 Jul 1, 2026

Nested VMs crawl because Hyper-V's VMQ steals CPU cycles from the host. Disable VMQ on the virtual switch to fix it.

When this error shows up

You run a nested VM inside a Hyper-V guest (like a Docker Desktop or a test lab with another hypervisor). The inner VM stutters, CPU usage on the host goes to 100%, and moving the mouse inside the nested VM takes seconds. This happens mostly on Windows Server 2019/2022 hosts with high network traffic. The trigger is usually a virtual switch with VMQ enabled, which grabs CPU from the host and doesn't give it back nicely.

Why it happens

VMQ (Virtual Machine Queue) is a hardware feature that lets the network card split incoming packets into separate queues for each VM. Sounds good, but with nested VMs, the host hypervisor doesn't know about the inner VMs. So VMQ assigns queues based on the outer VM's MAC address, not the inner ones. The result? The host CPU spins handling interrupts for queues that don't match anything useful. It's like a mail sorter throwing letters into random bins — all work, no delivery.

The fix: disable VMQ on the virtual switch

  1. Open PowerShell as admin. Right-click Start, choose Windows PowerShell (Admin) or Terminal (Admin).
  2. Check current VMQ settings. Run:
    Get-VMSwitch | Format-List Name, VMQ
    You'll see something like VMQ : True. That's the problem.
  3. Disable VMQ on the switch. Replace "Default Switch" with your switch name:
    Set-VMSwitch -Name "Default Switch" -EnableVMQ $false
    No output means it worked.
  4. Restart the host VM. The nested VM needs a fresh start. Right-click the outer VM and choose Turn Off, then Start. A simple restart won't always clear the VMQ cache.
  5. Test performance. Open the nested VM, run something heavy like a compile or a browser. Should feel snappy now.

What to check if it still fails

If disabling VMQ didn't help, check these:

  • Check VMQ on physical NICs. Sometimes the virtual switch inherits VMQ from the physical adapter. Run:
    Get-NetAdapter -Name * | Where-Object {$_.VmqEnabled} | Format-List Name, VmqEnabled
    If a physical NIC has VMQ on, disable it with:
    Disable-NetAdapterVmq -Name "YourNICName"
    Then restart the host (not just the VM).
  • Check CPU resource limits. Nested VMs need at least 2 virtual CPUs in the outer VM. Go to VM settings, Processor, and set Virtual processor count to 2 or 4. Also check Reserve percentage isn't set to 100 — that locks the CPU.
  • Check memory pressure. If the outer VM has Dynamic Memory, the nested VM might get starved. Set a static memory of at least 4 GB for the outer VM.
  • Update Hyper-V host drivers. Outdated network drivers from Intel or Realtek can cause VMQ to misbehave even after disabling it. Install the latest drivers from the manufacturer's site, not Windows Update.

The real fix is almost always VMQ. I've seen people buy new servers because of this, then feel stupid when a single PowerShell command fixes it. Try that first.

Was this solution helpful?