During a presentation that I gave at the E2EVC Conference in Barcelona a few weeks ago, I spoke of a situation whereby the addition of a software GPU into a virtual desktop can cause Microsoft Office, Internet Explorer, Firefox and Chrome to all leverage this software GPU for advanced rendering of 3D graphics. When a GPU is normally present on a physical workstation, this is a great way to accelerate the performance of these applications on a desktop computer. When you’re using these products in a virtual desktop environment, things change slightly. All of the major virtual desktop solutions (VMware View, Citrix XenDesktop and Microsoft RDVH) enable a software GPU in the virtual desktop session when their VM enlightenment drivers are installed into the virtual desktop image. This software GPU enables things like Windows Aero to function even when a physical GPU isn’t present in the virtual machine. This is generally a good thing as it allows for a “like-physical” desktop experience. However, emulating a real GPU in software (CPU) takes its toll from a performance perspective. Ultimately, it can result in a significant degradation of user experience as well as a reduction in scalability of the virtual desktop platform. In many cases, that scalability can be restored, by following one of two paths:
1) Actually deploy a GPU in your servers and leverage the GPU for offloading the GPU instructions from these applications. NVidia GRID vGPU technology is a method that can be used to generate good scalability and great performance / economics.
2) Disable the use of accelerated graphics in Office, IE, Firefox, Chrome, etc which forces them to use software rendering in lieu of the software emulated GPU (essentially you’re going to use software rendering in both cases, only not pretending to be a GPU saves significant CPU). This doesn’t provide the benefit of the GPU acceleration, but if you don’t have a GPU in the host machines anyway, this will preserve some scalability.
How each application implements acceleration differs, but here’s a few screenshots to indicate where this setting is disabled so that software rendering is used instead of software GPU emulation:
Internet Explorer 11 (and 9 and 10 as well):
Choose Internet Options, then under Accelerated Graphics check the box for “Use software rendering instead of GPU rendering”
Click on Settings, then “Show advanced Settings”, then de-select “Use hardware acceleration when available”
Click on Tools->Options. Then click on the Advanced tab across the top, then General Tab below. Uncheck “Use hardware acceleration when available” as shown here.
Microsoft Office 2013 (applies to 2010 as well):
Open Microsoft Word and choose File->Options. Then click on the Advanced item in the left window pane, scroll down to the Display section and select / check the box for “Disable hardware graphics acceleration”
All of this information is great and all, but you probably don’t want to instruct every user on how to change these settings. Instead, it’s easier to just inject these settings for all users on your virtual desktop platform. Many of these settings manipulate registry values in the HKEY_CURRENT_USER registry hive or store preferences in the user profile and therefore it’s not something that you can turn on/off in machine registry modifications or GPO. However, you can either adjust these in your default user profile, or what I prefer to do is just build a set of Group Policy Preferences entries to adjust these for every user as they logon to my virtual desktop platform. Unfortunately, Chrome and Firefox cannot be managed this way, but there are ways of solving those as well. Here are the relevant settings you’ll need to incorporate to disable software GPU emulation in these apps.
IE 9, 10, 11:
Key: HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main
Unfortunately Google Chrome does not have a simple registry entry that can be used to alter its use of a software GPU. Google Chrome stores its preferences into files in the Local AppData folder of the user profile. There are, however, several ways that you can carry out this change:
1) Ensure that any place where Google Chrome can be launched from you’ve appended the –disable-gpu switch to the end of the chrome.exe command line. This will make sure a software renderer is used.
2) Download and implement the Google Chrome AD GPO templates to adjust the behavior of Chrome when used in an AD GPO environment. Details on this process can be found here.
3) Deploy Chrome to your users using a master_preferences file. This is only useful if Chrome isn’t already deployed. Details on this process can be found here.
4) Configure a managed deployment of Google Chrome using the Google Apps Admin Console. Details on this process can be found here.
Special thanks to @scott_matteson for some great write-ups on Google Chrome deployments that I’ve linked above.
There are multiple ways to implement an override for Firefox, but like Google Chrome the settings that are active for Firefox are not maintained within registry entries, but rather are stored in preferences files in the user profile (at least with Firefox it’s a roaming folder location). The two settings that you’ll want to disable are named gfx.direct2d.disabled and layers.acceleration.disabled. Like Google Chrome there are multiple ways to alter the preferences:
1) Deploy Firefox with a pre-configured set of preferences. See here for more details.
2) Create a all-companyname.js or user.js preferences override that Firefox will leverage when launched to build a default user configuration. More details on this here. The preference entries you want to disable hardware acceleration are:
3) Jeremy Moskowitz (Group Policy MVP) has added support for Firefox settings into his PolicyPak product. While I have not personally verified that the hardware acceleration setting is included, I assume that it’s in there. Details on Jeremy’s PolicyPak configuration for Firefox can be found here. This method will allow you to use GPO to manage Firefox settings. NOTE: There have been various add-ins for Firefox over the years that allowed for GPO management, but they have been somewhat problematic. If you want GPO-style management, go with PolicyPak.
That should be enough information to get you started. I’m currently extremely busy in my new career, but hopefully I’ll get some time to put together some videos to illustrate the impact of these settings differences in the coming weeks.