The Remote Desktop Services workload on Windows Server 2012 R2 allows for deployment of a virtual machine or session based desktop or application environment. If you’re evaluating the RemoteFX vGPU feature for a full desktop virtual machine deployment with Windows Server 2012 R2 and Hyper-V, this article will help guide you through the options and configurations available. Note, RemoteFX vGPU cannot be used with a Remote Desktop Session Host (RDSH) or RemoteApp deployment.
First, some helpful material to get you started:
An environment configured for RemoteFX vGPU using this guide, followed by
A review of the RemoteFX vGPU changes introduced in Windows Server 2012 R2
Understanding the RemoteFX Graphics Pipeline
Typically, without hardware accelerated capabilities, a user remotes to a virtual machine and interacts with applications which may use the CPU ("software rasterization") for any graphics processing.
In Windows Server 2012, the RemoteFX vGPU allows render and compute operations in a virtual machine to be hardware accelerated using a physical GPU on the virtualization host. There are multiple components involved in delivering a hardware accelerated experience in Windows Server. Consider the diagram and related table below that present an overview of the RemoteFX graphics pipeline components:
Understanding Client Side Requirements
The final mile in delivering a great end to end experience has a crucial dependency on the version of the RDP client both on the endpoint/client and virtual machine/guest.
Each version of Windows has delivered improvements in RDP (Remote Desktop Protocol) which are compatible with previous versions of Windows through publicly available Interoperability Packages (IP). This enables you to update your RDP version but may result in the probability of deploying an environment with a mix of clients on the endpoint and virtual machines; typically manifested by a poor user experience due to the different protocol versions especially when testing over a WAN.
The highest effective RDP on Windows 7 SP1 is RDP 8.0 (KB2592687) which you can get here. After installing the update, make sure you enable RDP 8.0 by setting the GP by following the instructions in the aforementioned link.
The table below will help you identify the effective RDP that will be used depending on the mix of clients deployed, especially when RemoteFX vGPU is being used.
Effective RDP Protocol with RemoteFX on Windows Server 2012 R2
*Enabling RemoteFX vGPU for a Windows 7 virtual machine results in a RDP 7.1 protocol.
Enabling and Disabling Hardware Acceleration
As you evaluate your GPU options and application performance with the RemoteFX vGPU, it helps to understand the best way to enable and disable hardware acceleration to determine the Windows and application benefits it provides.
Most applications don’t require hardware acceleration, but for those that do, installing the RemoteFX adapter in a VM enables this capability. Toggling the capability by uninstalling the RemoteFX adapter in the virtual machine settings is the recommended way. This is especially important to know since some GPUs such as the NVIDIA Grid cards have multiple adapters. As such, disabling a single adapter in Hyper-V settings does not disable the rest of the Grid adapters available for RemoteFX (unless you explicitly do so for each adapter which is tedious). Consequently, if you haven’t uninstalled the RemoteFX adapter, the RemoteFX graphics worker process algorithm will assign the VM to the next available adapter.
The Recommended Way to Disable the RemoteFX Adapter
The simplest and most effective way is to “Remove” the RemoteFX adapter from a virtual machine.
Don’t Do This
Disabling RemoteFX on a GPU via Hyper-V Settings is not a reliable way to disable hardware acceleration in a VM.
For example in this instance below, I can disable RemoteFX on GPU #2. However if GPU #1 is enabled for RemoteFX, will be used by any VM with the RemoteFX adapter installed. As such, the recommended way is the above method.
Applications to Use When Testing RemoteFX vGPU
For applications that require DirectX hardware acceleration, the RemoteFX video adapter in a virtual machine provides that capability. The levels supported are: 11.1, 11.0, 10.1, 10.0, 9.3, 9.2, 9.1, easily viewable using the dxdiag command. For instance on Windows 8.1, you can click on Run enter dxdiag and the following dialog will be returned where you can view the DX versions supported on the virtual machine.
Since GPUs tend to be expensive, it helps to justify the experience that they provide in a VDI environment. There are simple ways to test such as running applications or features in Windows (e.g. Aero in Windows 7 and transparency) that require GPU acceleration.
To help, we have listed a few examples below that should provide a demonstrative experience in a virtual machine with a RemoteFX vGPU adapter. As noted above, observe the experience with and without the RemoteFX vGPU Adapter installed for a virtual machine.
The things to observe are:
- Frames Per Second (FPS)
- Image quality
- Smoothness when manipulating an image
- Performance at different resolutions
The samples are attached below – run the DX apps in each folder after unzipping. Toggling any of the above models to full screen is also a good test.
Notes on Window 7
RemoteFX vGPU on Windows 7 SP1 is limited to DX9 and as such the DX11 samples will only work on Windows 8.1. Effects such as Aero will result in a much better useful experience with the RemoteFX vGPU and result in lower CPU utilization on a virtual machine.
Host Side Monitoring
While running any render type application in a virtual machine, installing a tool like GPU-Z on your host can allow you to observer GPU utilization (host side physical GPU only). This allows you to verify that an application is indeed performing an operation requiring hardware acceleration. Depending on the GPU, you may get additional data with GPU-Z, but GPU Load is a good sensor to monitor.
We hope this provides a framework for evaluating RemoteFX vGPU on Windows Server 2012 R2 and Hyper-V.
Note: Questions and comments are welcome. However, please DO NOT post a request for troubleshooting by using the comment tool at the end of this post. Instead, post a new thread in the RDS & TS forum. Thank you!