As VMware View 5.1 launches administrators will start to trial the new View release, and in special they will test the benefits of View Storage Accelerator. This article is focused in helping administrators to properly size hosts and storage for use with CBRC.
View Storage Accelerator uses a vSphere platform feature called CBRC (Content Based Read Cache). CBRC is an in-host RAM cache for VMDK blocks commonly accessed by virtual desktops. Narasimha explain in his article how to configure and enable View Storage Accelerator.
CBRC Storage Sizing
When View Storage Accelerator is enabled (OS disk, or OS and Persistent Disk), a per-VMDK digest file is created to stores hash information about the VMDK blocks.
The estimated size of each digest file is roughly:
- 5 MB per GB of the VMDK size [hash-collision detection turned-off (Default)]
- 12 MB per GB of the VMDK size [hash-collision detection turned-on]
vCenter Tasks will show the digest creation status:
Note that the digest file creation for a large replica disk can take a reasonable amount of time and IOPS, the fore it’s is recommendable not to run the operation, create new desktop pools, or recompose existing pools during production hours.
As an example, a 25GB Windows VM Replica will consume about 125MB of storage space for the digest file. For snapshots (deltas) or persistent disks, a snapshots is created for the digest file also. If a VMDK is cloned, the digest file is copied.
Does that mean that CBRC also supports Full Clones? –
Yes, but VMware is not supporting View Storage Accelerator with Full Clones at this point in time.. [Update] Thanks to Matt Eccleston for pointing out that administrators can enable host caching on pools that contain linked clones and pools that contain full virtual machines – and they are both supported by VMware. Windows full clones that have fairly common blocks will see performance improvements.
For Persistent disks that have 5GB capacity the digest file will be approximately 24MB.
Host Memory Sizing
CBRC uses a RAM cache to manage the cached disk blocks. The per-VMDK digest file is also loaded into memory.
CBRC should not be enabled under memory-overcommit environments. If a host is memory over-committed and CBRC is enabled – the memory pressure is increased as CBRC also uses memory for the cache. In such cases, the host could experience increased swapping and the overall host performance could be impacted.
The graph below demonstrate the moment CBRC with 512MB cache is enabled on the host:
Host swap and performance degradation can be mitigated by reducing VM density according to CBRC memory consumption; or sizing the hosts appropriately to include extra RAM for CBRC on top of post-TPS (Transparent Page Sharing) RAM requirements.
For each VMDK digest created aproximately 24MB of RAM will be consumed, in addition to the defined CBRC cache. As an example, if only one system disk is being hashed and the host cache is 50MB, than: 500MB + 24MB = Total of 524MB memory used.
Remember that it is possible to create digests for System and Persistent disks. In another example, if 64 VMs are in use there would be 64 Persistent Disks, plus 1 replica disk. In this case we would have 65 VMDK to be hashed. Assuming that host cache is using 2GB RAM (maximum size), than: 2048GB + (65 * 24MB) = Total of 3.5GB memory used.
The following options are exposed through /config/CBRCFilter/intOpts and visible through the VMware vSphere Client Advanced Configuration. VMware View has built-in the capabilities to manage the options below and it’s not recommended to manually modify any of the items below.
/config/CBRC/intOpts/DCacheMemReserved – Memory consumed by CBRC Data Cache (in MB)
/config/CBRC/intOpts/DCacheSize – Size of CBRC Data Cache in MB. This cannot be changed if CBRC.Enable is set to 1.
/config/CBRC/intOpts/DigestJournalBootInterval – Interval (in minutes) for which Digest Journal is temporarily disabled to avoid interfering with the boot process
/config/CBRC/intOpts/Enable – Enable Content Based Read Cache
For the entire vSphere ESXi 5.0.0 GA VSISH Configurations refer to William Lam’s post.
CBRC has also been exposed via VIM API and is available via the vim-cmd CLI. It is possible to enable, disable and regenerate the digest per VMDK, but remember that VMware View is dynamically managing this for you.
The following commands will be used to enable/disable CBRC for a specific VMDK.
- vim-cmd vmsvc/digest.enable <vmid> <disk>
- vim-cmd vmsvc/digest.disable <vmid> <disk>
- vim-cmd vmsvc/digest.regenerate <vmid> <disk>
Lastly, I would like to mention that you don’t have to run all the calculations yourself. I am integrating CBRC calculations into my View Online Calculator.