For those of you who have worked with Storage systems, you will be aware of how important it is to calculate storage IOPS. This post doesn't go into any details on that subject, but I will try to explain this in another posting, at a later date.
I'm also not going to explain the merits of using MCS over PVS or vice versa--that's a decision that should be made depending on multiple factors, and unique to each organisation. But let's say that you've decided to use MCS (Machine Creation Services) to deploy your Xendesktop 7 Application/Xenapp 7.5 Servers (Hosted shared). You have shared storage fabric in place and an idea of the average and peak IO usage. With that in mind, you are now able to significantly improve those READ IOs from your Hosting servers by reading from the Host Servers' RAM cache, rather than having to traverse the network and hit the storage fabric for every IO read operation. Applying these Hypervisor RAM caching optimizations will have a positive impact on Read IO performance.
Here's an explanation of the VMware and Microsoft RAM caching techiques used to significantly increase IO performance.
VSPHERE CBRC - Content based read cache
Built into Vsphere 5, this is a 100% host-based caching solution which helps reduce READ IOs. It help with IO storms, os boots and reboot, virus scans etc.
There are 2 Components of the cache:
In Memory: Fixed sized of 2GB and 400MB reserved
Dynamic cache that loads blocks on demans and manages cache based on access pattersn to various blocks on the VMDK
Digest/Metadata Table: maintined on dsk for each vmdk on the host
The table holds information about the various blocks in the vmdk. A hash table with each hash pointing to a specific block
If there is a read request to a block on the VMDK, a HASH is computed and the in memory cache is checked to see if the block is present. If it is not present, the hash table is accessed and the specific block is loaded into memory. If the block is in memory, it is returned back to the user.
HYPER-V CSV
Block cache
CSV Block cache is a RAM Cache. It Allows you to Cache READ IOPS in the Hyper-V host RAM.
In Server 2012, you had to "SET" the CSV block cache and "enable" for every CSV volume. In Server 2012 R2, it is enabled by default on every CSV volume, but the cache is set to 0. So to enable the cache you have to:
# Get CSV Block Cache Size
(Get-Cluster).BlockCacheSize
# Set CSV Block Cache Size to 512MB
(Get-Cluster).BlockCacheSize = 512
Microsoft Recommend 512 (2GB MAX) CSV block cache on the HYPER-V host (Unless this is a scale out file server, which means you can use up to 80% of RAM if the OS is 2012 R2)
Windows Server 2012 R2
1. Open an elevated Windows PowerShell prompt
2. Define the size of the size of the cache to be reserved (example of setting to 2 GB)
(Get-Cluster). BlockCacheSize = 2048
Windows Server 2012
1. Open an elevated Windows PowerShell prompt
2. Define the size of the size of the cache to be reserved (example of setting to 2 GB)
(Get-Cluster). SharedVolumeBlockCacheSizeInMB = 2048
3. Enable CSV Cache on an individual disk (must be executed for every disk you wish to enable caching)
Get-ClusterSharedVolume “Cluster Disk 1” | Set-ClusterParameter CsvEnableBlockCache 1