In the upcoming blogposts I will write about optimizing Windows 10 in a non-persistent VDI environment and especially focus on optimizing the login speed. Rob Beekmans already blogged about optimizing Windows 10 for VDI, I will focus on optimizing the login experience and the impact of User Environment Management solutions. The plan is to combine all the optimizations and results and create a whitepaper.


In most Virtual Desktop Infrastructures (VDI) the operating system being used for the virtual desktops is still Windows 7 (we all skipped Windows 8.x). One of the reason is that when using Windows 7 you are certain that most (legacy) applications will work. Another reason that Windows 10 is not the common OS used in VDI environments is that it is more difficult to remove or disable the “consumer” experience, like cortana, (builtin) Windows Store Apps or to manage the Windows tiles. Especially login to Windows 10 for the first time can take a while. With persistent desktops, where the user profile is stored on the VDI-desktop and the user will always log on to the same desktop, this is not a problem. Only the first time a user logs on to their desktop is slow. But the next time the user logs on again, the login duration is within 5 seconds.

As 80-90% of the VDI-environments are non-persistent, this can be quiet a challenge. Especially getting a fast logon with a non-persistent Windows 10 environment can be tricky. Imagine that a user has to wait a while every time he or she logs onto their Windows 10 VDI because Windows is “getting things ready”.

In this blog post series, I will investigate how to get the fastest login with a non-persistent Windows 10 environment and what is the impact of using a profile management solution. In this first blogpost, I describe the test environment I will use for these tests and give a couple of preliminary results. In the following blogposts, I will present the results of login speeds of a clean Windows 10 installation and compare it with different kind of optimizations. There are a lot of optimizations that can be applied to Windows 10, but not all of them will have an impact on the login speed.

Areas which can be optimized in Windows 10:

  • Remove Builtin Windows Store Apps
  • Disable Active Setup and Run-keys
  • Disable Scheduled tasks
  • Disable services
  • Registry optimizations
  • Optimize default profile

After applying these optimizations, I will compare different kind of profile management solutions, like VMware User Environment Manager, RES ONE Workspace and FSLogix. Next step will be to add Office 2016 to the image and see what the impact is to the Windows 10 Login. I will also configure basic User Environment settings, like drive mappings, shortcuts, user policies and printers using various UEM solutions, to see what the impact is on the Windows 10 login speed.

Test infrastructure

I’m lucky to be able to use the hardware that was previously used for the Project VRC tests. In 2015, Project VRC already performed analysis on what the impact is on optimizing Windows 10. The difference now is that I use the latest Windows 10 version (1607) and will focus on login speed, not on maximizing user density.

the following infrastructure for the tests:


  • 2x Cisco UCS blades B200-M2 for the Backend infrastructure (Domain Controllers, DHCP, DNS, File services, vCenter server Appliance for Backend hosts, vCenter server Appliance for VDI host, etc).
  • 1x Cisco UCS blade B230-M2 for VDI, vSphere ESXi 6.5, 2x 10 core CPU (2.266GHz), 256GB RAM
  • Hitachi AMS2100 FC shared storage

For more details on the hardware, see the whitepaper Architecture and hardware setup 2013-2016.


  • One Connection server: VMware Horizon 7
  • A dedicated vCenter Appliance 6.5
  • A fileserver for collecting logfiles (Splunk/UberAgent), storing profile-data and loginVSI files.

And that’s it!

I use VMware Horizon instant clones because of the architecture and the components you need. Just a single Connection server and a vCenter appliance and you’re good to go. No database, no composer, I don’t think it can be easier.

I will use LoginVSI to automate the login process and I will use UberAgent to analyse the logon durations. Initially, I will keep the Windows 10 image as clean as possible. These are the installed components:

Initially, Microsoft Onedrive was also installed, I removed that.

I have a couple of default group policy settings applied:

Default GPO settings (CP-VDI-Default)

Preliminary results

My first test is to set a baseline login duration of a new user. I used the following Windows 10 VM:

  • Windows 10, 64 bit, 1607 Enterprise edition
  • 1 vCPU
  • 4GB RAM
  • 40GB harddisk

This is the first baseline:

As you can see in the video, it took 50 second for the first login to complete. According to UberAgent, the login was finished after 25.70 seconds:

More detailed:

This is half the time that the user is experiencing, which is kind of weird.

So this is a clean login, without setting User environment settings, like drive mappings, start menu shortcuts, user policies, printers, etc. Normally, this will add 10-60 more seconds, depending on the UEM solution you choose and what settings you apply. I’ve seen environments where this can take even more time.

Let’s dig a little deeper with UberAgent. In the following table, the Logon performance per process type is shown:

“Other” and Shell are responsible for most of the CPU time and “Other” is also responsible for the highest IO count. To see which processes are responsible for the high CPU time, in the following table I sorted the top processes for CPU time:

Top CPU time:

Top IO count:

I’m not using flash-storage, but I can assure you IOPS is not a bottleneck in my test environment. But depending on the rate the users in your environment login to their virtual desktop (what is the maximum number of users concurrently logging on peak hours?), this should be taken into consideration when sizing a Windows 10 VDI environment. More on that in a later blogpost.


The first optimization is to add another vCPU. 1 vCPU is clearly not enough for Windows 10. 2 vCPU is the minimum I advice my customers. In some cases 3 vCPU is even better, when using PCoIP as a display protocol and you don’t have Teradici APEX cards for example.

So what is the logon duration with 2 vCPU:

As you can see in the video, it took 28 second for the first login to complete. According to UberAgent, the login was finished after 13.45 seconds:

More detailed:

That’s still almost half the time compared to the 1 vCPU VM. Let me remind you, this is still without setting the user environment. But we want the first login to be as fast as possible, as it will be a first login every time a user logs on to a non-persistent desktop.

Windows 10 versions

Now let’s discuss Windows 10 versions. I’m using the Windows 10 x64 1607 Enterprise edition, but this version has the Windows store, Windows Store Apps and some other stuff you probably don’t need in a VDI environment. As an alternative, I will use the Long term Servicing Branch (LTSB) edition. This version doesn’t have the Windows store, the builtin Windows apps and the Edge browser, but is more lean and mean for VDI. I’m interested in the login difference between the two.

First login, with 2 vCPUs and for the rest the same config as above.

As you can see in the video, it took 25 second for the first login to complete. According to UberAgent, the login was finished after 9.67 seconds:

More detailed:

Group Policy

Next step is to add a Computer Group Policy to adjust some basic settings for a (non-persistent) VDI environment. The GPO settings I added where:

Disabling the setting “show first sign-in animation” should speed up the login for the user. The following video shows the login with the Windows 10 1607 Enterprise edition (not the LTSB version):

The user experiences a login duration of 23 seconds. The user doesn’t see the first-login animation (getting things ready) and compared to the first test with a 2 vCPU VM, this is 27 seconds faster. According to UberAgent, the login duration is 13.34 seconds (compared to 25.70):

More detailed:

And with the LTSB version:

The user experiences a login duration of 14 seconds. The user doesn’t see the first-login animation (getting things ready) and compared to the first test with a 2 vCPU VM, this is 11 seconds faster. According to UberAgent, the login duration is 10.48 seconds (compared to 9.67):


More detailed:

Conclusion: according to Uberagent adding this group policy actually adds a little time to the login process, but for the user it speeds up the login process a lot. There is still a gap between the user experience and what UberAgent thinks the logon duration is, this needs to be investigated. I will keep the CP-VDI-Default and the CP-VDI-non-persistent computer policies as the default for the rest of the tests.

Persistent profile

I also want to compare the login duration to a situation where the VDI-environment is persistent and the user will always log on to the same virtual desktop. So the first login is a user logs in to a new desktop, the second login is after a reboot, and the user profile is still on the virtual machine.

These are the logon durations according to UberAgent:

This was a first look at my “Windows 10 logon optimization / User Environment management impact on logon” research.

Read part 2 of this blogpost series.