Implementing RemoteFX in Windows 2012 Hyper-V

Published:

Introduction

RemoteFX is already in use today, but you're probably not aware of it.  With the advent of Windows 2012 and Windows 8, RDP has gotten a whole lot better due to the fact that RDP now uses even more RemoteFX technologies to make desktop sessions a lot smoother, faster and feature rich.  You could even stream a 720p video without RDP skipping a beat - how cool is that?

Of course, RemoteFX does rely on the underlying hardware to make things a bit zippy, but when you're delivering content through a server which generally has a poor graphics card, then the performance isn't that great.  Try it!  RDP to a physical Windows 2012 Server, and try to play a 720p video.  Performance is poor and choppy, despite you having a gigabit connection to the server.  That's because the server isn't designed for multimedia, and the graphics card is a built-in bog standard one with virtually no hardware acceleration.

Of course, the solution to this is to add a GPU.  So, take the same server, chuck in a reasonably decent graphics card, and play the same video - then voilĂ !  Brilliant display.  Lack of sound?  You probably should have remembered to enable the Windows Audio service!

Thing is - most organizations are retiring their physical servers running Remote Desktop, and replacing them with bigger, beefier servers which are becoming part of Hyper-V clusters and they're now running Virtual Servers to provide the Remote Desktop solutions.  

This article is intended to help these people be able to re-provide a great desktop experience by utilizing Hyper-V's RemoteFX feature.

Prerequisites

You will need:

One or more Physical Servers which has a CPU that supports SLAT (EPT).  Don't know if your server supports SLAT?  Run Coreinfo with the -v switch
Windows 2012 with Hyper-V installed.  Need to know how to install Hyper-V on Windows 2012?  No problem, there's an article for that too!
One or more professional desktop graphics cards.
Remote Desktop License Server configured and ready to use.
A virtual machine on which you will be performing tests via RDP.

Performance Testing (Before)

Before we go ahead and do all the good stuff, let's take a look at the performance of a Windows 8 Workstation which has been given 1 GB RAM and a single vCPU (yes, I'm stingy) on top of a Windows 2012 Hyper-V Server.

Unfortunately, I was unsuccessful in trying to get a Performance Rating in Windows 8, I would just receive the following error while trying to "Rate this computer"

Performance Rating and Tools ErrorI surmise this error is as a result of the fact that it doesn't have a "good" graphics card, or it's a virtual machine.

Fortunately for us, 3rd party software is here to save the day! Using PassMark Performance Test 8, we can do a thorough performance test.

I noticed that when I started the software, the FPS for the animation was around 11-20 fps - occasionally jumping up to around 30.  This isn't so bad, considering it's RDP.

Performance Test Startup
After running "all tests" I am able to get a baseline.  The test completes although I get some really nasty errors regarding 3D performance - but this is hardly a surprise since there is virtually no 3D capabilities in a regular RDP session.

My 2D Graphics Mark is reasonably good with a result of 404.5 - bear in mind that this is via RDP, it's actually quite good.

2D Graphics Mark
My 3D Graphics Mark is so bad that it doesn't even give it an overall score - the only score it gives me is for DirectX 9 Simple, and I think you'll agree it's not very pleasing to the eye.

3D Graphics Mark

Installing My Hardware

I ordered the cheapest possible Enterprise level GPU to use for my server - an NVIDIA Quadro 2000 PCI-Express, 1GB GDDR5 card (shown below)

NVIDIA Quadro 2000HP do their own edition of the card, and as I'm going to be putting it into an HP server, I thought I'd get that card.  The installation was fairly easy - just had to slot it into a spare PCI Express slot which was on the riser. Here it is, in place and running nicely.

Card in PCI Riser Cage
Like with all graphics cards, drivers need to be installed, so we go ahead and install the display drivers for the GPU on the host server itself.  NVIDIA are really on the ball with their drivers, so we cheerfully download and install the latest WHQL drivers for our Quadro card for Windows 2012.

Driver Installation via RDP session
Now that the server has a good graphics card, and the relevant driver installed, the next step is to enable RemoteFX in Hyper-V.  RemoteFX has a prerequisite of the Remote Desktop Virtualization Host role service, so if you've not installed it yet, go ahead and install just that role.  Unfortunately, the server will require a reboot at this point.

Remote Desktop Virtualization Host
Open up Hyper-V Manager, right click your Hyper-V server and select "Physical GPUs".  Here you can select the GPU and then the checkbox "Use this GPU with RemoteFX"

Hyper-V Settings - RemoteFX
Lastly, we're going to go ahead and enable RemoteFX on our Client PC.  This is done in the Virtual Machine Settings by adding new hardware, and selecting the RemoteFX 3D Graphics Card.

NOTE: If this is greyed out then it means you did not meet all the hardware requirements!  Most likely, your CPU does not support SLAT.

RemoteFX 3D Video Adapter Add
RemoteFX 3D Video Adapter Settings
After adding the card, we power the virtual machine back on, and perform the exact same tests we just did.  No need to install any drivers!  They're already there because they're part of the Hyper-V tools.

Performance Testing (After)


Here we have the startup - as you can see, a lot faster than it was earlier.

Performance Test 8.0 Startup (After)
The results of the 2D Mark - an improvement of at least 50% from previous.

2D Graphics Mark
And the results of the 3D Mark - as you can see it's much better than it was before.

3D Graphics Mark

Proof of the pudding

Earlier, I was boasting that you can play HD videos through RDP.  Don't believe me?  Well, here's me playing The Aurora through VLC and you can clearly see that this is HD quality.  Not Full HD mind you, but 720p without skipping any frames.

Video Playback through VLC
The video featured is The Aurora (Northern Lights) and can be seen on Vimeo (link below)

Limitations and Caveats

You should be aware of the following before running to your boss asking for money to buy some awesome graphics cards:

All the testing done in this article is based on Windows 8 or Windows 2012.  RDP in both of these products use RDP version 8.  If you have Windows 2008 R2 or Windows 7 clients or servers, then the performance won't be as amazing.
Microsoft has tested 12 vGPU's per GPU Core.  This means that if you put in the maximum supported amount of 4 graphics cards, you can effectively run 48 virtual machines which have RemoteFX enable per physical machine. You are not however limited to this amount, so if your hardware can handle it, you can do even more.
NOT ALL GRAPHICS CARDS ARE SUITABLE!  Be sure to check the Windows Server Catalogue (link below) for graphics cards
Don't be tempted to buy a Desktop Graphics card thinking "Surely 3072 CUDA Cores is a lot better than a piffling 192 CUDA Cores" - because firstly, your monster of a graphics card will probably not even fit in your server, and secondly, the server is not likely to be equipped with the power requirements needed to make it run.  You may however find that Desktop products will work - they're just not recommended or approved for RemoteFX.

Further Reading

Certified Professional Graphics Cards on Windows Server Catalogue
RemoteFX on Wikipedia
Microsoft RemoteFX on Technet
NVIDIA Quadro vs. GeForce GPUs on NVIDIA (PDF)
The Aurora on Vimeo.

All links were correct at the time of publishing.  All hardware and software mentioned are Trademarks of their respective owners. The Aurora is copyright property of TSO Photography.
2
21,551 Views

Comments (9)

Shane McKeownIT Engineer
Top Expert 2012

Commented:
Ok, thanks for the quick reply - and I will vote yes ;)

But joining the HOST to the domain means the DC won't be booted during a reboot - is this not going to cause issues? Long as it doesn't then I'll give it a shot...just want to be sure

Author

Commented:
It's NOT GOOD PRACTICE to have your only domain controller running as a VM inside a host which needs to communicate with the domain.  Unfortunately our little plan don't work so don't do it!  If you add your host to the domain, your host will not be able to log in (i.e. it won't make a secure channel to the domain), and even though you can log on with local credentials, and be able to start the Domain Controller, the host will never log in to the domain, since it only attempts a login at startup.  You could try to restart the netlogon service (reboot not required), then try to log in as a domain admin, but this sounds like it's going to get a lot messier than you'd like it to be.  I would highly recommend having a secondary domain controller (even if it's a PC) running on a physical machine, so that the domain is always available if your primary host needs to be rebooted for any reason.
Shane McKeownIT Engineer
Top Expert 2012

Commented:
That's what I thought...which is why I was confused when your guide said machine needs to be domain joined...wonder if there is anyone in Microsoft who actually thinks about these things before designing them...

Grand, at this stage this is in test mode so I can spin up another machine to act as a DC for testing purposes...thanks for the info anyways...

I assume I click on 'Was this article helpful' button above to vote? Can't see anywhere else to hit...

Author

Commented:
Yes, but I think you may have done it already as I received an e-mail saying "Congratulations! Your article "Implementing RemoteFX in Windows 2012 Hyper-V" was voted helpful by one of your peers, earning 50 bonus points." :)  Thank you.
Shane McKeownIT Engineer
Top Expert 2012

Commented:
Yep I bit the bullet and clicked it!! Cheers...

View More

Have a question about something in this article? You can receive help directly from the article author. Sign up for a free trial to get started.