RDP lag is almost always blamed on internet speed. But when your ping is solid and your bandwidth meter is asleep, the real problem is usually sitting inside the NIC driver — not the ISP.
I hit this recently on a Windows Hyper-V host that was painful to use over RDP. Keystrokes felt sticky, windows dragged with a half-second delay, and the whole session felt like it was running over a dial-up connection.
The ping to 8.8.8.8 came back at 20 ms with 0% packet loss.
The internet was not the problem.
Check the Obvious First
Before touching the NIC, rule out the simple stuff:
Ping 8.8.8.8 # latency and loss
Task Manager # CPU, RAM, disk usage
Get-NetAdapter # link speed and duplex
If those look healthy and RDP still feels awful, the NIC driver is the next place to look.
The Diagnosis
Pull up the advanced properties for your primary Ethernet adapter in PowerShell:
Get-NetAdapterAdvancedProperty -Name "Ethernet" |
Where-Object { $_.DisplayName -match "(EEE|Energy|Interrupt|Power|Moderation|Green|Reduce|Ultra)" }
On many Windows machines — servers included — you will see something like this:
| DisplayName | DisplayValue |
|---|---|
| Energy Efficient Ethernet | On |
| Interrupt Moderation | Enabled |
| Interrupt Moderation Rate | Adaptive |
| Reduce Speed On Power Down | Enabled |
| Ultra Low Power Mode | Enabled |
Five settings. All of them tuned for battery life on a laptop. If your machine is a workstation, server, or anything that stays plugged into mains power, every single one is working against you.
Why These Settings Tank RDP Performance
RDP traffic is bursty. A frame renders, gets encoded, and is sent as a burst of packets. Then the screen goes quiet until the next mouse move or keystroke.
Here is what each power-saving feature does to that traffic pattern:
Energy Efficient Ethernet (EEE) — Puts the NIC into a low-power idle between packets. When the next RDP frame burst arrives, the NIC has to wake before transmitting. That wake-up delay hits on every frame burst. Constant micro-stutter.
Interrupt Moderation — Batches incoming packets and only interrupts the CPU when enough have piled up. Low total throughput but high interactivity (which is exactly what RDP looks like) means every keystroke and mouse click gets delayed by the batch window.
Interrupt Moderation Rate (Adaptive) — Tells the NIC to dynamically choose between aggressive batching (low CPU, high latency) and quick response. On Intel I219 and similar chipsets, “Adaptive” leans conservative — it favours power saving over responsiveness.
Reduce Speed On Power Down — Drops the link speed when activity is low. RDP looks idle most of the time. The link speed renegotiation adds delay every time you touch the mouse.
Ultra Low Power Mode — A blanket trade-off that sacrifices responsiveness for power draw across the entire NIC. Useful on a laptop running off battery. Harmful everywhere else.
The Fix
Five PowerShell commands. They take effect immediately — no reboot needed:
Set-NetAdapterAdvancedProperty -Name "Ethernet" `
-RegistryKeyword "EEELinkAdvertisement" -DisplayValue "Off"
Set-NetAdapterAdvancedProperty -Name "Ethernet" `
-RegistryKeyword "*InterruptModeration" -DisplayValue "Disabled"
Set-NetAdapterAdvancedProperty -Name "Ethernet" `
-RegistryKeyword "ITR" -DisplayValue "Off"
Set-NetAdapterAdvancedProperty -Name "Ethernet" `
-RegistryKeyword "ReduceSpeedOnPowerDown" -DisplayValue "Disabled"
Set-NetAdapterAdvancedProperty -Name "Ethernet" `
-RegistryKeyword "ULPMode" -DisplayValue "Disabled"
Replace "Ethernet" with the name of your actual adapter (check with Get-NetAdapter).
A note on security: Disabling these features does not weaken your network. EEE, interrupt moderation, and power-saving modes are purely about power consumption and CPU offload. They have nothing to do with firewalling, encryption, or access control. You are not opening anything up — you are just telling the NIC to stay awake and respond promptly.
Verify the Changes
Get-NetAdapterAdvancedProperty -Name "Ethernet" |
Where-Object { $_.RegistryKeyword -in @(
"EEELinkAdvertisement",
"*InterruptModeration",
"ITR",
"ReduceSpeedOnPowerDown",
"ULPMode"
)} |
Format-Table DisplayName, DisplayValue -AutoSize
All five should show Off or Disabled.
After applying these, the difference in RDP responsiveness should be immediate and obvious. It was for me — went from “why is this so painful” to “feels like I’m sitting at the console.”
If RDP Is Still Lagging
If you have done the above and things are still sluggish, work through these in order:
1. Flow Control
Set it to Disabled instead of “Auto Negotiation” or “Rx & Tx Enabled.” Pause frames can stall bursty traffic like RDP. Most modern switches handle this fine.
Set-NetAdapterAdvancedProperty -Name "Ethernet" `
-RegistryKeyword "*FlowControl" -DisplayValue "Disabled"
2. Check Both Ends
The same NIC power-saving features may be enabled on the machine you are RDP’ing from. Run the same checks on the client. Laptops are particularly bad for this.
3. RDP over UDP
RDP uses UDP by default for the display channel (port 3389). If your firewall or NAT drops UDP, RDP falls back to TCP-only, which compounds the problem because TCP retransmits lost packets in order — one dropped packet stalls everything behind it.
Check that UDP 3389 is open end-to-end. If you cannot allow UDP (public Wi-Fi, restrictive corporate firewall), set the group policy to prefer TCP preemptively so the client does not waste time attempting UDP:
Computer Configuration
-> Administrative Templates
-> Windows Components
-> Remote Desktop Services
-> Remote Desktop Connection Client
-> Turn Off UDP On Client: Enabled
This is a trade-off — TCP-only RDP over a clean link is fine. Over a lossy link, it is worse than UDP. But a client that keeps trying and failing UDP before falling back adds a negotiation delay on every connection attempt.
4. Hyper-V Virtual Switch Overhead
If the target machine is a Hyper-V host with multiple virtual switches, every RDP packet may be traversing the vSwitch stack. There is no quick toggle for this, but it helps to know: a Hyper-V host running many VMs and virtual networks will never feel quite as snappy over RDP as a bare-metal box. The NIC fixes above mitigate the worst of it, but the switch fabric overhead is real.
5. RSS (Receive Side Scaling)
Make sure RSS is enabled so incoming packets are distributed across CPU cores instead of piling onto one:
Get-NetAdapterRSS -Name "Ethernet"
If Enabled is False:
Enable-NetAdapterRSS -Name "Ethernet"
6. RemoteFX and GPU
If you are using GPU-accelerated RDP (RemoteFX, AVC/H.264 encoding), make sure the GPU drivers on the host are up to date. A misbehaving GPU encoder can introduce its own per-frame latency that feels identical to network lag.
Audit All Your NICs at Once
This one-liner scans every connected adapter for power-saving flags. Worth running on any Windows machine you RDP into regularly:
Get-NetAdapter | Where-Object Status -eq "Up" | ForEach-Object {
$adapter = $_.Name
Get-NetAdapterAdvancedProperty -Name $adapter |
Where-Object { $_.RegistryKeyword -in @(
"EEELinkAdvertisement",
"*InterruptModeration",
"ITR",
"ReduceSpeedOnPowerDown",
"ULPMode",
"*FlowControl"
)} |
Select-Object @{N='Adapter';E={$adapter}}, DisplayName, DisplayValue
} | Format-Table -AutoSize
Security and Impact Summary
A quick table for anyone who needs to justify these changes to a security-conscious team:
| Setting | What It Does | Security Impact | Performance Impact |
|---|---|---|---|
| Energy Efficient Ethernet | NIC idle sleep between packets | None | High — eliminates micro-stutter |
| Interrupt Moderation | Batches interrupts to save CPU | None | High — reduces per-packet latency |
| Interrupt Moderation Rate | Adaptive batching threshold | None | Medium — removes variable delay |
| Reduce Speed On Power Down | Drops link speed when idle | None | Low — removes renegotiation delay |
| Ultra Low Power Mode | Broad NIC power saving | None | Low — removes wake-up penalty |
| Flow Control | Allows switch to send pause frames | Minimal* | Medium — prevents pause-frame stalls |
*Flow Control is a Layer 2 mechanism. Disabling it means the NIC will not honour pause frames from the switch. On a well-provisioned network with no congestion, this is safe. On a heavily congested network, pause frames are a coping mechanism — but if you are running RDP over a congested network, NIC settings are the least of your problems.*
The Takeaway
When RDP is slow and your internet is fine, the NIC driver is the most likely bottleneck. Intel and Realtek ship desktop and server NICs with the same power-saving defaults as a laptop Wi-Fi card, and Windows does not disable them for you.
Five commands. No reboot. No security exposure. Instant improvement.
Leave a Reply