NOTE: I have made new blog-post containing useful info about RDP 8.x (i.e. Windows 8)
Since some time back around 2000 I’ve been running a dual desktop configuration at work. One screen for my laptop at work, and one screen with RDP home to a more powerful computer. Since I spend most of my time in front of a computer I usually invest a fair amount of money when buying a new computer, so my home computer is often the powerful one.
The problem is (for the most part) bandwidth. If it was over LAN then RDP would have no problem pushing a video, but over slower links you can notice each screen update. Currently I have a 26/4Mb line (waiting for a 100/100Mb) at home, so the screen of my home computer is being sent to me on a 4Mb link. That should be enough for casual use, but not full screen video. (The reason being that RDP is sending a lossless image and can’t real-time mpeg encode the picture because of CPU-power, latency in encoding and lossy encoding – so it has to use lossless compression that is easy on the CPU.)
A secondary problem is GPU hardware. Today most applications use hardware acceleration, but when you work via RDP a virtual (purely software) graphics driver is used to render your content. This worked for pre-Vista desktops, but it’s now few years since Windows switched from the obsolete memory rendering technique to a new hardware driven rendering and applications are starting to adapt. In short hardware accelerated rendering allows applications to render their content faster using less CPU.
A third and very noticeable and annoying problem is that RDP tries to send all the frames. If visit a web page with animated banners, list a whole lot of stuff in Putty or other things that update the screen a lot you have probably noticed that the RDP session hangs and that the best way to get it back is to minimize the window (because then it doesn’t send any data and the screen can finish updating).
RDP can be configured through group policy. The first and most straight forward setting to note is compression level. Default set to save memory. Setting this to save bandwidth will … hold on … save bandwidth!
Second is a new feature in Windows 7 SP1 and Windows 2008 R2 SP1 called RemoteFX. This even works on virtualized guest os running on HyperV. In short it allows RDP sessions to use hardware acceleration for rendering. It also changes the sampling method from “every update to the screen” to “interval update”. So if your screen updates a lot you will get only every x frame (as opposed to earlier where you had to wait until all the frames had been transferred). RemoteFX will use GPU for compressing the image being sent, making your computer (CPU) faster as well.
The difference explained in short: Going from seeing screen updates happen and window freezing to everything being smooth, responsive and even being able to (almost) watch a YouTube video smoothly.
Note: This required Windows 7 SP1 or Windows 2008 R2 SP1. But some settings can be tweaked for earlier versions, so it is still worth following the instructions as far as possible.
- Start: gpedit.msc
- Go to: Administrative Templates > Windows Components > Remote Desktop Services > Remote Desktop Session Host > Remote Session Environment
- Configure RemoteFX: Enabled
This will enable GPU processing if your hardware supports it. GPU processing will speed up modern browsers, most apps, WPF apps, video, etc.
- Optimize visual experience when using RemoteFX: Enable and set both settings to “Medium” (or whatever suits you best). Feel free to experiment.
As opposed to earlier (default) settings where RDP tries to send every frame this allows RDP to skip frames to keep up and not freeze.
- Set compression algorithm for RDP data: Enabled and set algorithm to “Optimized to use less network bandwith”
- Optimize visual experience for Remote Desktop Services sessions: Enabled and set Visual experience to “Rich Multimedia.”
- Reboot and feel tha powah!
Small note: When I was first researching RemoteFX in SP1 beta I read that you had to enable RemoteFX on the client as well. I am uncertain if this is true as I do it anyway (since it also it RDP host sometimes), but I highly doubt it. Enabling it on the RDP host should be enough. However setting it on both only takes a few seconds, so …
If security is not a big concern you can disable encryption to speed things up. I haven’t tried this, but from what I read while researching RDP speed issues it should speed things up. Setting “Set client connection encryption level” under Security to “Low Level” should enable encryption for sending keys/mouse and disable encryption for receiving image.
14 thoughts on “Optimizing RDP for casual use (Windows 7 SP1, RemoteFX)”
Great stuff Ted. Many of my customers complain about this stuff. Do you know if it would help on a regular adsl line? Not everyone have fiber here in Aalesund yet 😛
It will help in any case, the main point is increasing compression speed on server (if it has a capable graphics card to offload it to) and <strong>lowering bandwith</strong>. Increasing compression will have much greater benefits on slower lines. Running RDP server behind an ADSL line will decrease total line capacity a great deal because of the async part of ADSL.
Great tip, thanks!
But I can’t find anything on the internet that suggests that this works for connecting two physical windows 7 boxes together? Would you mind sharing your setup, OS and system-wise? (Connecting physical to physical etc.)
One guy saying the server has to be Windows server:
<a href="http://social.technet.microsoft.com/Forums/en/w7itproSP/thread/b0772ecd-2a46-4efd-a12b-84a87d7e7c61" rel="nofollow ugc">http://social.technet.microsoft.com/Forums/en/w7itproSP/thread/b0772ecd-2a46-4efd-a12b-84a87d7e7c61</a>
I’m using Windows 7 Ultimate to connect to Windows 7 Ultimate and it works fine. Windows 7 and 2008 has the same subsystem for just about everything, so aside from some clearly defined differences (look at comparison charts) the technical stuff is the same. The HyperV specifics won’t benefint Windows 7 host systems of course. For that you need a host OS with 64-bit Windows 2008 SP1 HyperV and Windows 7 SP1 to work.
I read that it works on Win7 (no mention of HyperV), but it is a good question that deserves some research. I noticed a difference when I configured it, but come to think of it I probably set RDP compression at the same time. I was researching this during SP1 beta, so the info I read could have been second hand/assumptions.
Created question on ServerFault: <a href="http://serverfault.com/questions/265921/remotefx-in-windows-7" rel="nofollow ugc">http://serverfault.com/questions/265921/remotefx-in-windows-7</a>
If these settings don’t provide the necessary performance improvements, you can also try Ericom Blaze, a software-based RDP acceleration and compression product that provides improved performance over WANs. Besides delivering higher frame rates and reducing screen freezes and choppiness, Ericom Blaze accelerates RDP performance by up to 25 times, while significantly reducing network bandwidth consumption over low-bandwidth/high latency connections.
Ericom Blaze works with any standard RDP host, including VDI, Terminal Servers and remote physical machines.
You can read more about Blaze and download a free evaluation at:
<a href="http://www.ericom.com/ericom_blaze.asp?URL_ID=708" rel="nofollow ugc">http://www.ericom.com/ericom_blaze.asp?URL_ID=708</a>
Note: I work for Ericom
Thanks for the tip. I tried Ericom Blaze some time ago (or at least activated the license) and contacted the Norwegian vendor to hear about (private) licensing. As of now this is something I’d use privately. But I can’t remember getting a reply. (That happens more often than it should … In Norway we don’t do customer service unless someone throws their money at us.)
Ericom Balze doesn’t do jack. Tried it today. It was slower than using the regular RDP.
Did you found solution for such situation
I use laptop compal El51 based with win7 x86 with T400/4GB/SSDdrive/nvidia geforce go7600 and open rdp on the second monitor.
When i connect to the win2003srvsp2 and open xls or msaccess based application which have a lot of row to display
my computer just frooze (server not) – and each row is displayed one by one which can take sometimes even one minute
during this i cannot use my mouse even – computer just holds and when i checked the performance it goes to around 100%
Froze happen always when i open excell or msaccess application with many rows – instead of it i can normally use web browser or other mssql aplication.
Does anyone found such problem solution?
This is most probably because the screen updates are being queued to you and you have a slow connection to the server. Setting RDP compression settings to full on the server, lowering color depth, disabling font smoothing, and lowering resolution will make the screen respond faster. You can also use Ericom Blaze as suggested by Adam. If you need further help it is usually far better to ask on a forum such as <a href="http://www.serverfault.com/" rel="nofollow ugc">http://www.serverfault.com/</a> where many skilled people will respond with quality answers often almost immediately. This is a (private) blog where a single individiual – me – write articles on things I experiment with that other people may find helpful. 🙂
Thanks for your suggestion –
the problem is that I am connecting via LAN 100/1000Mbit
other people in this LAN have no such problems
I’ve tried to disable TCPIP balance (netsh interface tcp set global autotuninglevel=disabled) but it doesn’t helped.
My nc10 notebook via gprs have works faster.
It really looks like rdp on my system use to much resource in some specific operations on server –
If it would be a problem with bandwith i think that i should have a problem to watch youtube in webbrowser openen in rdp – but it works ok even in HD… but when i open xls with many rows and filtering – it just stopped my computer and show row-per-row like 5sec each…
I will try also as you suggested – thanks!
There is some kind of solution
<a href="http://serverfault.com/questions/106421/rdp-connection-to-windows-7-stays-really-slow/416988#416988" rel="nofollow ugc">http://serverfault.com/questions/106421/rdp-connection-to-windows-7-stays-really-slow/416988#416988</a>
Just so future google searches find this- these changes work perfectly with windows 8.1 and 10 as well. I tried them using RDP Wrapper on a windows 10 tablet with atom processor (I had to copy the registry settings over from a windows 8.1 enterprise system), and I can even watch YouTube on the local lan. Without the settings, the remote desktop works, but is extremely slow.
I am connecting to it from a windows 8.1 ent desktop.
Add these settings under the following Key:
HKLM/Policies/Microsoft/Windows NT/Terminal Services
fEnableVirtualizedGraphics => 1
MaxCompressionLevel => 2
VGOptimization_CaptureFrameRate => 2
VGOptimization_CompressionRatio => 2
VisualExperiencePolicy => 1
Insert the Values as DWORD (32-bit) values
Great guide, what I was looking for. If I enable this settings on a s****y atom n270 server with integrated intel GPU, will I see a performance improvement or degradation? Thanks