Recently I was working through an issue that was reported by one of our Partners. I wanted to see if I could reproduce the issue and if it may have been an issue with vVols with Pure. What was the issue you ask? Essentially there was an issue reported that inconsistent behavior was seen with Digest type vVols. You create Digest type vVols when you enable CBRC (Content Based Read Cache) with ESXi and then enable Digest on the Data vVols themselves. In the end, this post is to show how to enable digest for a Data vVol in vSphere 7.0. Since it took me way too long to figure out on my own, hopefully this can help others save some time too.
What is CBRC and Digest?
CBRC (Content Based Read Cache) is primarily something I only saw with VDI deployments. When CBRC is enabled it allows VMs to get a read cache to alleviate read intensive workloads (it’s a very over simplified explanation), such as power on events like boot storms or anti virus scans. Tasks like creating linked clones and powering them on end up not having to issue all of those reads directly to the storage.
There are two parts to getting CBRC enabled or being used for the VMs. First, you need to enable CBRC on the ESXi hosts directly. Second, you need to configure each of the VMs virtual disk to enable Digest. The digest disk is basically the index of what’s on the virtual disk files themselves (again another over simplified explanation).
Enabling CBRC on the ESXi Hosts
First process required is enabling CBRC on each ESXi host. From the host view go to Configure and then advanced system settings. In advanced system settings set enabled as true.
That was the easy part. With CBRC enabled on the hosts I need to enable it for the virtual machine and it’s virtual disks.
Enabling CBRC on the Virtual Machine and Disks
The easiest way I found to enable CBRC was from the MOB (Managed Object Browser), but I could have used python or powercli to do this too (I think). The MOB is reachable in a browser by going to vCenter-fqdn-or-ip/mob/ .
The first place I go to is the vm folders object and find the VM that I want to enable CBRC for. In this case it was vm-8204
I click on vm-8204 then I want to get the configuration of the vm and it’s virtual disks. I then click on Config in the VirtualMachineConfigInfo row.
From there I click on Hardware in the VirtualHardware row.
I click on the more section as I need to see more information about the devices and then locate the virtual disk object. In the example it’s device[2000]. Additional devices may have shown up as device[2001] or device[2002] depending on the amount of additional virtual disks the Virtual Machine has.
After clicking on device[2000] I can see the device information for this virtual disk. For additional information that I’ll want to check I need to go to the device backing and click on backing.
The device backing information shows that digest is not enabled. I note down the URL it took in the mob to get to this device backing.
Now I need to actually configure digest for the virtual disks. A blog post by William Lam got me started. The problem was that the post was pretty old and didn’t apply for the vSphere 6.7 and 7.0 environments that I needed to reproduce the issue in. The post at least let me get the URLs that I needed to find the CBRC manager and how to configure digest. The main url that you need to know about is vCenter-fqdn-or-ip-address/mob/?moid=CbrcManager&method=configureDigest . Even though there aren’t the logical links that lead you to the CBRC manager, I can still force my navigation there using that URL.
Once at the configure digest screen I can put in the required information. I’ll end up using this configuration in the example I’m showing:
spec <!-- array start --> <spec> <vm type="VirtualMachine">vm-8204</vm> <deviceKey>2000</deviceKey> </spec> <!-- array end --> enabled true disableFullChain enablePartition
I just needed to fill in the spec and set enabled to true, but there is the list and screenshot. Now you can see the reason why I noted down the VM’s moid and the device ID from the VM. Once I had that information in there I go ahead and hit invoke method. If the VM had multiple virtual disks I’d go ahead and repeat the workflow as need. When I needed to repeat it again, I just ended up opening a few browser tabs to do them each.
After I run through the process I go back to the device backing information for the VM and refresh. I was able to set digestEnabled as True.
Success! I enabled CBRC on my vVols based VMs. While this isn’t super interesting or something that I’d be doing all the time. I wanted to have the process documented just in case I needed to do it again. What better place than my blog?