Hi everyone! Today we're excited to share the improvements we've made to the RemoteFX virtual graphics processing unit (vGPU) in Windows Server 2012 R2. There are four improvements we invested in, specifically:
1. Improving DirectX API coverage
2. Support for higher monitor resolutions and higher default monitor resolutions
3. Exposing higher VRAM to RemoteFX vGPU-enabled virtual machines
4. Higher scale by leveraging NUMA in Windows Server 2012 R2
Let’s review each improvement in detail.
In Windows 8.1 the RemoteFX vGPU becomes fully DX11.1 capable, an improvement from Windows 8, which was only capable of DX11.0. Deployments that use a DX11.1-capable GPU can run applications that take advantage of DX11.1 capabilities such as double precision calculations.
The RemoteFX vGPU still supports DX11.0, allowing support for both DX11.0 and DX11.1 physical GPUs (the list of RemoteFX supported GPUs can be found here).
The default resolution that vGPU-enabled virtual machines support is now 1920 x 1200. This change allows a majority of end users to start out in a full-screen session when connecting to a vGPU-enabled virtual machine—preventing windowed sessions or users manually changing the default resolution to get to a full-screen session.
The RemoteFX vGPU also has a larger range of resolutions and number of monitors supported in Windows 8 and Windows 8.1.
The best way to understand this is by reviewing what Windows 8 supported for the maximum amount of VRAM exposed in a vGPU-enabled virtual machine:
In Windows 8.1 the maximum VRAM allocation is dynamic and depends on the minimum amount of system memory that the virtual machine starts with.
In Windows 8.1, the dedicated VRAM is either 128 MB or 256 MB depending on the resolution and number of monitors assigned to the virtual machine. The shared VRAM allocated varies between 64 MB and 1 GB depending on the minimum amount of system memory that is assigned to the virtual machine when it starts. The formula used to determine the amount of shared memory is here.
TotalSystemMemoryAvailableForGraphics = MAX(((TotalSystemMemory - 512) / 2), 64MB)
To elaborate on this, consider the table below that depicts virtual machines started with a minimum of 512 MB. They get the minimum of 64 MB of shared memory and will expose the following total VRAM:
Windows 8.1: Total (dedicated + shared) VRAM exposed (in MB)
On the other hand, virtual machines that start with a minimum of 2512 MB of system memory will get the maximum of 1 GB of shared memory and will expose the following total VRAM:
The VRAM exposed within a vGPU-enabled virtual machine does not map directly to the physical GPU VRAM. The RemoteFX vGPU dynamically manages VRAM on the physical GPU and users can end up consuming more or less VRAM on the physical GPU than what is exposed within the virtual machine.
Windows 8.1 includes optimizations for non-uniform memory access and as such servers with NUMA will observe significant increases in scaling vGPU-enabled deployments. Our testing on a NUMA system shows an increase in the number of users that can be hosted on such systems.
To test the RemoteFX vGPU improvements, download Windows Server 2012 R2.
This is great to know, I've only recently been starting to use the RemoteFX features available in server 2012 R2 but so much of it seems to just be 'magic' without much I can find in terms of documentation.
Other pieces I can't seem to understand, I see event log entries about 'H264 Enabled: 0', but can't find information about how to enable H264 encoding... as well as reference to vGPU UMode and vGPU UMode64 drivers that never seem to get used, or a conprehensive list of RDP Client options.
I have been following Microsofts VDI offering and compared to other Microsoft products SQL and Exchange documentation is pretty bad. Microsoft approved scaling calculators (excel) would be useful and feature documentation would be great. My base source of information for information about Microsofts VDI solutions ends being a few companies that implement solutions or an org that just winged it to see what happened. Both of the above seem to be just trial and error.
This sounds great! I'm wondering, however, is it (or will it soon be) possible to utilize the graphics card on a remote Windows client you RDP into? I would be nice to take advantage of RemoteFX in that scenario as well.
Thanks for the great blog article!
I have a Windows Server 2012 R2 with 2 NVIDIA GRID K1 cards (8 physical GPUs) installed. How is the load load-balanced between my virtual machines? Can Windows actually use more than one physical GPU? Are 8 supported and does it make sense?
Is vGPU supported also on RDSH on Windows 2012 R2 or just in a VDI scenario?
I've a Nvidia Quadro and a RDSH 2012 R2 virtual server inside Hyper-V, can I take advantage of the GPU for my RD Sessions?
What will happen when you attempt to connect from a 4k (3840x2160) monitor?
How is it with OpenGL support? Still only OpenGL 1.1 supported or not?
RemoteFX Display problems with Windows 8.1 VM but not Windows 7 VM running on Windows Server 2012 R2 Hyper-V VDI Server
Has anyone seen anything like this?
After many, many, hours of wading through and eliminating potential variables the issue has been narrowed down to being present only with a Windows 8.1 VM and not with a Windows 7 VM, on the same server.
The problem is with bizarre glitchy display issues (Random Pixellation, Fuzzy Screen areas, Entire Screen filled with random shapes/colors etc.).
This is a Server 2012 R2 environment it is running Hyper-V Remote Desktop Virtualization Host.
An Nvidia Quadro K2200 adapter has been enabled for RemoteFX and passed through.
Also have tried Nvidia Grid K2 adapter. Both adapters use same driver set and multiple driver versions have been tested.
Two Generation 1 VM's have been created. One for WIndows 8.1, One for Windows 7. All updates installed.
Each VM uses the same set of Hyper-V resources, Virtual Switch etc. (The settings for each VM are the same).
With RemoteFX disabled on each VM the issue is not present on either VM.
With RemoteFX enabled on each VM the issue is present on the Windows 8.1 VM and not the Windows 7 VM.
There is no difference if only one VM at a time is enabled and running. (Not GPU load related)