Mar 24

Citrix PVS Write Cache Design Considerations

Citrix Provisioning Services (PVS) streams a single disk image to multiple devices. Provisioning Services can be used to deliver a Windows OS to a device which can be either a physical or virtual machine. Devices provisioned using PVS boot from the network and do not require a local disk.


The streamed image is read-only and changes, writes, are cached to a write cache location configured per streamed image. The image itself is non-persistent, user persistent data can be redirected to another location or stored on a personal vDisk that has been associated with the device.

An important design consideration when provisioning using PVS becomes; where should you put write cache for images deployed using PVS? Unfortunately like any design consideration the answer is: it depends and there may be more than one good way to do it. There are a number of ways to configure write cache but for this article I am going to look at two of the most commonly used options: Cache on Device Hard Disk and Cache on Server Disk.

Cache on Device Hard Disk
When streaming a PVS image to a physical device using the cache on device hard disk allows for the use of local disks on the device to cache writes. This will keep writes from each device from traveling across the network.


Caching on Device Hard Disk Pros:

  • Writes kept “closer” to the device
  • Leverages physical local disks when streaming to physical devices
  • If write cache fills only a single device is affected
  • Cached writes do not consume network resources
  • Reduced load on PVS Server(s)

Caching on Device Hard Disk Cons:

  • Write cache space is pre-allocated to devices.
  • PVS vDisk images have to be configured with a specific drive configuration for local disk cache to work
  • Sizing can be challenging- one size may not fit all.

Storing write cache on the local disk is definitely a great option when provisioning to physical devices. This allows local disks in the device to be leveraged for write caching which cuts down on storage usage on the PVS server and network usage between the PVS server and the physical device. Cache on local hard disks cannot be used with disk-less physical devices.

If Store on Device Hard Disk is configured for an image and a local write cache location does not exist the write cache will be stored on the server in the write cache location configured for vDisk store. The Cache on Device Hard Disk option is best suited for PVS images deployed to physical devices with a local disk resource configured to be used for write cache.

But what about streaming PVS images to a virtual machine? Caching on device hard disk works just as it does with a physical device. A disk must exist on the virtual machine and be formatted NTFS to be used for write cache. This means that disk space for write cache must be pre-allocated and it exist whether it is need or not, for example when a virtual desktop provisioned with PVS is powered down.

When configuring a local write cache for a virtual machine provisioned using PVS the write cache space is pre-allocated to each device. Thin-provisioned disks can be used for the write cache disks to help with storage efficiency. If disk are not thin-provisioned space for write cache is consumed for a device whether it is needed or not, for example the space is consumed even when the virtual machine is powered down and does not need the write cache. Thin-provisioning write cache disks does come at a cost increased management since storage can be over-provisioned.

Cache on Server
Write cache on the Server redirects writes to a write cache location configured on the PVS image store. A temporary file is created for each streamed image in the write cache location and writes generated by a provisioned image stored in this file. When an streamed device is powered off or rebooted the write cache file for the device is deleted.


Caching on Server Pros:

  • Write cache space on disk only consumed when needed
  • No special configuration of the PVS vDisk image required

Caching on Server Cons:

  • Writes travel across the network to reach the write cache
  • Filling up cache effects all devices using the write cache.
  • Increased load on PVS Server(s)
  • Availability challenges. All PVS Servers would need access to the write cache locations to be able to fail between PVS servers.

Depending on “where” the write cache location is in relation to the PVS server and the amount of write cache required, the Cache on Server disk option may be well suited for PVS images deployed to virtual machines, especially in smaller environments. One potential drawback to this would be the increased load on the PVS server due it servicing not only the stream but also the writes of each device.

If persistent data is redirected to other locations and if network communications between the virtual machines and the PVS server(s) does not leave the virtual network; caching on server can provide more efficient use of disk space and provide good performance provided the PVS Servers are configured with resources (disk, cpu, and RAM) to support the additional load.

Some Useful PVS Write-Cache Resources
Here are a few resources that can be used for planning and designing PVS deployed images:

About the author


Hersey Cartwright is an IT professional with extensive experience designing, implementing, managing, and supporting technologies that improve business processes. Hersey is Solutions Architect for SimpliVity covering Virginia, Washington DC, and Maryland. He holds the VMware Certified Design Expert (VCDX-DV #128) certification. Hersey actively participates in the VMware community and was awarded the VMware vExpert title in 2016, 2015, 2014, 2013, and 2012. He enjoys working with, teaching, and writing about virtualization and other data center technologies. Follow Hersey on Twitter @herseyc

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

six + 10 =