Optimize VDI: Windows 10 Default Apps (Original, Anniversary and Creator Updates)


With the release of Windows 10 Build 1703 (Creator Update), Microsoft added new capabilities into the base operating system that will have an impact on the user experience in a VDI implementation.

Default Apps

Microsoft expanded the list of default applications that come pre-installed within the base OS.

With each release, the number of default apps increased.

  • Build 1511: 24 Apps
  • Build 1607: 26 Apps
  • Build 1703: 31 Apps

As shown in previous tests, leaving these apps part of the base operating system directly impact user logon time and overall system density. It is generally recommended to review the list of apps and uninstall those that are not necessary for the users.

To see a list of default Windows apps, run the following PowerShell command:
Get-ProvisionedAppXPackage -Online|Select DisplayName

Color Code:

  • Green: Remove
  • Orange: Consider removing
  • Red: Keep
  • Black: App does not exist on build
Application Name Build 1511 (Original) Build 1607 (Anniversary) Build 1703 (Creator)
Microsoft.3DBuilder Remove Remove Remove
Microsoft.Appconnector Keep
Microsoft.BingFinance Consider
Microsoft.BingNews Consider
Microsoft.BingSports Consider
Microsoft.BingWeather Consider Consider Consider
Microsoft.DesktopAppInstaller Keep Keep
Microsoft.Getstarted Remove Remove Remove
Microsoft.Messaging Consider Consider
Microsoft.Microsoft3DViewer Remove
Microsoft.MicrosoftOfficeHub Remove Remove Consider
Microsoft.MicrosoftSolitaireCollection Remove Remove Remove
Microsoft.MicrosoftStickyNotes Consider Consider
Microsoft.MSPaint Remove
Microsoft.Office.OneNote Consider Consider Consider
Microsoft.OneConnect Remove Remove
Microsoft.People Remove Remove Remove
Microsoft.SkypeApp Remove Remove Remove
Microsoft.StorePurchaseApp Keep Keep
Microsoft.Wallet Remove
Microsoft.Windows.Photos Consider Consider Consider
Microsoft.WindowsAlarms Keep Keep Keep
Microsoft.WindowsCalculator Keep Keep Keep
Microsoft.WindowsCamera Consider Consider Consider
microsoft.windowscommunicationsapps Remove Remove Remove
Microsoft.WindowsFeedbackHub Remove Remove
Microsoft.WindowsMaps Consider Consider Consider
Microsoft.WindowsPhone Consider
Microsoft.WindowsSoundRecorder Consider Consider Consider
Microsoft.WindowsStore Consider Consider Consider
Microsoft.XboxApp Remove Remove Remove
Microsoft.XboxGameOverlay Remove
Microsoft.XboxIdentityProvider Remove Remove
Microsoft.XboxSpeechToTextOverlay Remove
Microsoft.ZuneMusic Remove Remove Remove
Microsoft.ZuneVideo Remove Remove Remove

Note: Office Hub is an app that changed functionality across different builds.  In early builds, Office Hub was essentially an ad for Office 365.  In the Creator build, Office Hub adds management capabilities for Office users.

Daniel (Follow on Twitter @djfeller)
Citrix XenApp and XenDesktop 7.6 VDI Handbook
XenApp Best Practices
XenApp Video

Advertisements

XenServer PVS Accelerator Sizing – Part 2


As you might have read, I recently ran a few XenServer PVS Accelerator tests to determine a starting point for the cache size.  This initial investigation looked at Windows 10 and Windows 2012R2 for boot and logon operations.

Looking back, I determined that I want to include three additional items

  1. Impact of a larger cache size – Increase from 2GB to 4GB RAM cache
  2. Impact of applications
  3. Impact of Windows 2016

Before I get into the results, let me explain the graphs.

  • The blue, green and orange line denotes boot, logon and steady state operations. The first time those colors appear depicts the first VM; the second time the colors appear depicts the second VM. These colors are linked to the axis on the right showing percent of cache used.
  • The solid red area graph depicts the amount of network traffic sent from the Provisioning Services server to the host.  The line should initially be large and then diminish as the cache is used. It is linked to the left axis with bytes per second.

With that understanding out of the way, let’s look at the results.

Windows 2012R2

Windows 10

Windows 2016

Observations

First, I find it interesting that Windows Server 2016 sits between Windows 2012R2 and Windows 10 in terms of cache consumption after boot, logon and steady state operations complete. This makes sense as Windows 10 and Windows Server 2016 are considered to be similar operating systems, requiring more cache than Windows 2012R2.  But it also shows that Windows Server 2016 is more optimized, with fewer extraneous apps/services as shown in the Windows 2016 Optimization guide.

Second, even though the size of the PVS Accelerator cache was doubled 4GB from 2GB from previous tests, the overall usage remained the similar.

Third, the biggest cache utilization during logon and the least during steady state. Usage matched expectations based on read/write IO ratios for boot (80% read / 20% write), logon (50% read / 50% write) and steady state (10% read / 90% write). The more unique read IO activity, the more cache utilized.

Based on this round of tests, I’m sticking with my previous PVS Accelerator cache size recommendation and adding Windows Server 2016:

  • Windows 10: 2.5GB per image per host
  • Windows 2012R2: 2GB per image per host
  • Windows 2016: 2.5GB per image per host

Daniel (Follow on Twitter @djfeller)
Citrix XenApp and XenDesktop 7.6 VDI Handbook
XenApp Best Practices
XenApp Video

Windows Server 2016 Optimizations for Citrix XenApp


When it comes to operating system optimization, I have two sides battling with each other. Although optimizing does improve single server scalability, I believe the more you mess with the OS the greater your chances are that you will break something.

Default Apps

Unlike Windows 10, which had numerous default apps that increased user logon time, Windows Server 2016 is free from such additions.

Services

Many of the services we disabled in Windows 10 are already configured as manual startup in Windows 2016.  Looking deeper, it would appear that many of these services are either started based on a request by an application or based on a scheduled task.If a manual startup service is disabled, then any application or system component that tries to interact with the service will fail.  This will result in application/system issues, support calls and long troubleshooting times.Based on that , the only service that you think about disabling is:

Service Name

Default State

Default Status

Hosted Apps Workloads

Hosted Desktop Workloads

Themes

Automatic

Running

Disable

Enable – better user experience

Disable – better server density

Scheduled Tasks

Scheduled tasks will sporadically impact density as they only run when a trigger is tripped. When determining what to disable, we need to look at the value the task has in a non-persistent environment.  This assumption is based on the XenApp Best Practice of server consistency.

Scheduled Tasks – Applications

Tasks

Description

Application Experience \ Microsoft Compatibility Appraiser

Helps resolve application compatibility challenges.

Application Experience \ StartupTask

Determines if there are too many startup entries and then notifies
the user

 

Scheduled Tasks – Microsoft Customer Experience Program

Tasks

Description

AutoCHK \ Proxy

This task collects and uploads autochk SQM data if opted-in to the
Microsoft Customer Experience Improvement Program.

Customer Experience Improvement Program \Consolidator

If the user has consented to participate in the Windows Customer
Experience Improvement Program, this job collects and sends usage data to
Microsoft.

Customer Experience Improvement Program \KernelCeipTask

The Kernel CEIP (Customer Experience Improvement Program) task
collects additional information about the system and sends this data to
Microsoft. If the user has not consented to participate in Windows CEIP, this
task does nothing.

Customer Experience Improvement Program \UsbCeip

The USB CEIP (Customer Experience Improvement Program) task collects
Universal Serial Bus related statistics and information about your machine
and sends to the Windows Device Connectivity engineering group at Microsoft.
The information received is used to help improve the reliability, stability,
and overall functionality of USB in Windows. If the user has not consented to
participate in Windows CEIP, this task does not do anything.

 

Scheduled Tasks – Safety

Tasks

Description

Windows Defender \ Windows Defender Cache Maintenance

Can be disabled in case an alternative virus and malware protection
has been implemented.

Windows Defender \ Windows Defender Cleanup

Can be disabled in case an alternative virus and malware protection
has been implemented.

Windows Defender \ Windows Defender Scheduled Scan

Can be disabled in case an alternative virus and malware protection
has been implemented.

Windows Defender \ Windows Defender Verification

Can be disabled in case an alternative virus and malware protection
has been implemented.

Windows Filtering Platform \BfeOnServiceStartTypeChange

This task adjusts the start type for firewall-triggered services when
the start type of the Base Filtering Engine (BFE) is disabled.

 

Scheduled Tasks – Maintenance

Tasks

Description

CHKDSK \ Proactive Scan

NTFS Volume Health Scan

Diagnosis \ Scheduled

The Windows Scheduled Maintenance Task performs periodic maintenance
of the computer system by fixing problems automatically or reporting them
through the Action Center.

DiskDiagnostic \ Microsoft-Windows-DiskDiagnosticDataCollector

The Windows Disk Diagnostic reports general disk and system
information to Microsoft for users participating in the Customer Experience
Program.

Maintenance \ WinSAT

Measures a system’s performance and capabilities

Power Efficiency Diagnostics \ AnalyzeSystem

This task analyzes the system looking for conditions that may cause
high energy use.

RecoveryEnvironment \ VerifyWinRE

Validates the Windows Recovery Environment.

Registry \ RegIdleBackup

Registry Idle Backup Task

Scheduled Tasks – General

Tasks

Description

Mobile Broadband Accounts / MNO Metadata Parser

Parses information related to mobile broadband users

Power Efficiency Diagnostics \ AnalyzeSystem

This task analyzes the system looking for conditions that may cause
high energy use.

RAS / MobilityManager

Provides support for the switching of mobility enabled VPN connections
if their underlying interface goes down.

Shell / IndexerAutomaticMaintenance

Maintains the search index

WDI \ ResolutionHost

The Windows Diagnostic Infrastructure Resolution host enables
interactive resolutions for system problems detected by the Diagnostic Policy
Service. It is triggered when necessary by the Diagnostic Policy Service in
the appropriate user session. If the Diagnostic Policy Service is not
running, the task will not run

User Interface

Many of the user interface optimizations have been used on Windows Server 2000 and beyond, consisting of good practices in order to hide administrative items from the user and to have more efficient overall usage by disabling a few user interface capabilities.

Optimization

Configuration

Disable default system Screensaver

HKEY_USERS\.DEFAULT\ControlPanel\Desktop

“ScreenSaveActive”=dword: 00000000

Hide Hard Error Messages

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Windows]

“ErrorMode”=dword:00000002

Settings “Visual Effects to Custom”

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\VisualEffects]

“VisualFXSetting”=dword:00000003

Disable “Show translucent selection rectangle”

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]

“ListviewAlphaSelect”=dword:00000000

Disable “Show shadows under windows”

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]

“ListviewShadow”=dword:00000000

Disable “Animate windows when minimizing and maximizing”

[HKEY_CURRENT_USER \ControlPanel\Desktop\WindowMetrics]

“MinAnimate”=”0”

Disable “Animations in the taskbar”

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]

“TaskbarAnimations”=dword:00000000

Disable “Enable Peek”

[HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM]

“EnableAeroPeek”=dword:00000000

Disable “Save Taskbar Thumbnail Previews”

[HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM]

“AlwaysHibernateThumbnails”=dword:00000000

Disable “Smooth edges of screen fonts”

[HKEY_CURRENT_USER \Control Panel\Desktop]

“FontSmoothing”=”0”

Disable the rest of the visual effects

[HKEY_CURRENT_USER \Control Panel\Desktop\]

“UserPreferencesMask”=RegBin: “90,12,03,80,10,00,00,00”

Disable cursor blink rate

[HKEY_CURRENT_USER \Control Panel\Desktop]

“CursorBlinkRate”=”-1″

Disable Internet Explorer First Run

Wizard

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\InternetExplorer\Main]

“DisableFirstRunCustomize”=dword:00000001

Reduce menu show delay

[HKEY_CURRENT_USER\ControlPanel\Desktop]

MenuShowDelay”, “0”

System

The final optimizations are focused on system-level settings, allowing organizations to get the most value of their systems.

System – BIOS

Optimization

Configuration

Max Performance

Verify BIOS is set for maximum performance and not low power.

System – Commands

Optimization

Configuration

Disable hibernate

Powercfg -h off

 

System – Registry updates

Optimization

Configuration

Disable NTFS Last Access Timestamps

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]

“NtfsDisableLastAccessUpdate”=dword:00000001

Disable Memory Dump Creation

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl]

“CrashDumpEnabled”=dword:00000000

“LogEvent”=dword:00000000

“SendAlert”=dword:00000000

Increase Disk I/O Timeout to 200

Seconds

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Disk]

“TimeOutValue”=dword:000000C8

 

Daniel (Follow on Twitter @djfeller)
Citrix XenApp and XenDesktop 7.6 VDI Handbook
XenApp Best Practices
XenApp Video

XenServer PVS Accelerator Cache Sizing


How large should we make our PVS Accelerator cache? Too large and we waste resources. Too small and we lose the performance.

Let’s take a step back and recall our best practice for sizing the RAM on Provisioning Services.  We would typically say allocate 2GB of RAM for each vDisk image the server provides.  This simple recommendation gives the PVS server enough RAM to cache portions of the image in Windows system cache, which reduces local read IO. So for a PVS server delivering

  • 1 image:  we would allocate 2GB of RAM (plus 4GB more for the PVS server itself)
  • 2 images:  we would allocate 4GB of RAM (plus 4GB more for the PVS server itself)
  • 4 images:  we would allocate 8GB of RAM (plus 4GB more for the PVS server itself)

Easy.

Let’s now focus on the XenServer portion of PVS Accelerator. If we use RAM as our PVS Accelerator cache, how many GB should we allocate?

I decided to test this out.  I first set my PVS Accelerator cache to use 2GB of RAM.

Once configured, I booted and logged into a single VM. I then started a second VM on the same XenServer host.

Let’s first look at the Windows Server 2012R2 results:

When the first VM starts, the cache is empty so while the VM boots and a user logs in, the cache gets populated. When the second VM starts, it doesn’t increase the size of the cache because everything it needs to boot and log on a user has already been cached.

The expectation is that Windows 10 should show a similar behavior.

The difference between Windows 10 and Windows 2012R2 in regards to PVS Accelerator is the amount of cache consumed during bootup and logon.  Windows 10 uses significantly more cache than Windows 2012R2.

Windows 2012R2 uses 40% while Windows 10 using 80%.  So based on this, what should we allocate per XenServer host?  2GB? 1.5? 2.5?

First, remember that the boot process is weighted heavily on reads. The read/write ratio is close to the following:

  • Boot: 80% Reads : 20% Writes
  • Logon: 50% Reads : 50% Writes
  • Steady State: 10% Reads : 90% Writes

Second, these graphs only show boot and logon.  Users haven’t loaded any applications, which will initiate read operations, thus increasing the cache utilization.

Third, we have a limited supply of RAM.  Our goal isn’t to eliminate all reads, it is to significantly reduce them.

Based on that, I’d start with the following and MONITOR:

  • Windows 10: 2.5GB per image per host
  • Windows 2012R2: 2GB per image per host

Remember, the key is “per image per host”.

The PVS Accelerator cache is host specific. If my XenServer host is supporting VMs using 4 different images, I need my PVS Accelerator cache to be large enough to cache enough of the read IO to be beneficial across all 4 images.

If our environment is large enough, we will want to look at segmenting our XenServer hosts into groups of servers that host a few images. That way we can reduce RAM allocation for PVS Accelerator.

Daniel (Follow on Twitter @djfeller)
Citrix XenApp and XenDesktop 7.6 VDI Handbook
XenApp Best Practices
XenApp Videos