The following post was written by Kirk Manzer.
There always seems to be confusion when talking about IOPs and virtual desktops (VDI). I often have people tell me their users do 40-50 IOPs. My next question is “what is the read/write ratio?”, which is often followed by a deer-in-head-lights look. What does it mean to say a user does 40 IOPs? Is that total IOPs or IOPs to storage and does it include user data IOPs? And how do you quickly determine how many IOPs you will need? Physical desktops are easy, all reads and writes go to the physical device. It is not that simple for VDI configurations, even dedicated persistent VMs, due to raid configurations of data center storage and the capability to separate read and write IOPs to different locations.
Some definitions to help clarify:
|Total IOPs||Total number of IOPs determined for a specific user or user type|
|Write IOPs||Number of writes performed as a portion of Total IOPs|
|Read IOPs||Number of reads performed as a portion of Total IOPs|
|Total Storage IOPs||Total number of IOPs to the storage in question|
|Storage Write IOPs||Number of writes performed as a portion of Total Storage IOPs|
|Storage Read IOPs||Number of reads performed as a portion of Total Storage IOPs|
Raid configurations will not affect the number of read IOPs per user, but can greatly affect the number of write IOPs per user. A Raid 1 Mirrored configuration requires two physical writes for every user write IOP and is most commonly used by HDD vendors to obtain optimal performance at a capacity cost. Raid 5 requires 4 IOPs (read old parity, read old data, write new data, write new parity) for each user write IOP, gaining capacity at the cost of performance. To achieve acceptable performance using Raid 5 requires using SSD arrays.
For VDI configurations not doing fully dedicated persistent VMs, conventional best practices have read and write IOPs separated to allow for optimal performance. Read performance and the user experience will be affected if reads and writes go to the same storage.
Both Citrix XenDesktop and VMware View offer best practices on separating reads and writes. Citrix XenDesktop utilizes PVS (Provisioning Server) to manage the master image on a separate server. Reads go to the provisioning server and, if configured to Citrix best practices, writes will go to the storage utilizing write cache files for each VM. VMware View allows for placement of the replicas on a different location than the storage containing the associated linked clones. The Replica is placed on high performing/low capacity storage like SSDs to provide optimal read performance. The writes are to the linked clones on higher capacity storage. With read and write IOPs separated the read/write ratio becomes important.
If a user is doing 40 IOPs, but the reads come from one location and the writes go to a different storage location, we need to break down the IOPs. As an example, assume a user is 40/60 read/write (r/w) ratio. This means 40% (16) of the IOPs are read, and 60% (24) are writes. So, using the Citrix model we can know the reads are coming from the provisioning server and the only writes are going to our storage. But what about user data? A best practice for VDI has the user data storage on a different storage location like a share and not within the VM. As a rule of thumb, user data IOPs are a very small percentage of IO and are often in peaks such as the opening of a file. Until the file is saved or closed nothing is written back to the user data storage, however temporary data is written every few seconds to the write cache/differential files, which is on the storage we are concerned about. To account for user data IO, a rule of thumb is to specify 1 IOP each for read/write of user data, so in our 40 IOPs user example accounting for user data the numbers become 15 read IOPs and 23 write IOPs allowing 1 read and 1 write IOP for user data.
In our example, the 15 read IOPs would come from the provisioning server and the 23 write IOPs would go to our storage. However, testing has shown that in a Citrix XenDesktop configuration using a PVS provisioning server and write cache files, the r/w ratio to the storage is actually 10/90. There are some reads that come from the temp files on the storage. A rule of thumb here is to allow 1 read for every 10 writes, always rounding up.
To determine the IOPs to our storage:
Storage IOPs = Write IOPs + Read IOPs
Storage Write IOPs = ((Total IOPs * write %) – 1) * Raid Penalty
Storage Read IOPs = (Total IOPs * write %) / 10 rounded up
For example, our 40 IOP user has a 40/60 r/w ratio, and we will assume a Raid 1 mirror. The calculation would be:
Storage Write IOPs = ((40 *.6) – 1) * 2 = (24 – 1) * 2 = 23 * 2 = 46
Storage Read IOPs = (40 * .6) / 10 = 24 / 10 = 3 rounded up
Total Storage IOPs = 46 + 3 = 49
To support 1000 users would require 49000 IOPs from the storage if using Citrix XenDesktop and provisioning server handling the read IOPs.
If doing VMware View and following the best practice of placing the Replica(s) on a different location then the calculations are the same as with Citrix XenDesktop.
However, if the replicas are on the same storage as the linked clones, then View will perform very similar to a fully dedicated persistent VDI session. For these scenarios the Storage IOPs would be determined by:
Storage Write IOPs = ((Total IOPs * write %) – 1) * Raid penalty
Storage Read IOPs = (Total IOPs * read %) – 1
As an example, a user doing 40 IOPs with a 40/60 r/w ratio moved to a fully dedicated persistent VDI session using Raid 1:
Total IOPs = 40
Storage Write IOPs = ((40 *.6)-1) * 2 = (24-1) * 2 = 23 * 2 = 46
Storage Read IOPs = (40 * .4) – 1 = 16 – 1 = 15
Total Storage IOPs = 46 + 15 = 61
These formulas are rules of thumb and are designed to help estimate IOP requirements. To fully understand IOP requirements it is recommended an assessment of your users be done.