The vSphere 7.0 U2 release provides the ability to use native snapshot when using the NFS protocol as the access mechanism. As described on the VMware blog:
NFS required a clone to be created first for a newly created VM and the subsequent ones could be offloaded to the array. With the release of vSphere 7.0 U2, we have enabled NFS array snapshots of full, non-cloned VMs to not use redo logs but instead use the snapshot technology of the NFS array in order to provide better snapshot performance. The improvement here will remove the requirement/limitation of creating a clone and enables the first snapshot also to be offloaded to the array.
In this blog I explain the configuration needed to test this new feature. To start we should validate the prerequisites to be able to implement this solution. According to the VMware documentation portal the prerequisites are as follows:
- Verify that the NAS array supports the fast file clone operation with the VAAI NAS program.
- On your ESXi host, install vendor-specific NAS plug-in that supports the fast file cloning with VAAI.
- Follow the recommendations of your NAS storage vendor to configure any required settings on both the NAS array and ESXi.
The NFS configuration will be done in NetApp Ontap using the “NetApp NFS Plug-in for VMware VAAI” plugin that recently added native NFS snapshot offload support.
Note: The plug-in can be downloaded from the NetApp support portal at the following link NetApp Support
Once we are in the NetApp support portal we must download version 2.0 of the plugin as shown in the following image. To install the plugin we need to unzip the downloaded file and rename the file inside the folder named vib20 with the extension .vib to the new name NetAppNasPlugin.vib.
In the next step I used the NetApp Ontap Tools to install the plugin but it can also be installed using VMware Lifecycle Manager.
To install the plugin go to [ONTAP tools => Settings => NFS VAAI tools] and in the “Existing version:” section press “BROWSE” to select where the “NetAppNasPlugin.vib” file is stored. Once the file is located press “UPLOAD” to load and install the plugin.
In this step we can see how to install the plugin to the ESXi servers by pressing the “INSTALL” button.
The following image shows that the installation of the plugin was successful. An advantage of the new version of the plugin is that no reboot of the ESXi server is required.
After installing the plugin we will proceed to validate that the Ontap Storage has support for VMware vStorage APIs for Array Integration (VAAI) features in the NFS environment. This can be verified with the command vserver nfs show -fields vstorage. As you can see the vStorage function is currently disabled in the SVM called NFS. To enable the vStorage function use the vserver nfs modify -vstorage enabled command.
OnPrem-HQ::> vserver nfs show -fields vstorage vserver vstorage ------- -------- <strong>NFS disabled </strong> OnPrem-HQ::> vserver nfs modify <strong>-vstorage enabled</strong> -vserver NFS OnPrem-HQ::> vserver nfs show -fields vstorage vserver vstorage ------- -------- <strong>NFS enabled</strong> OnPrem-HQ::>
The next requirement to be able to use native snapshot offload is the creation of an advanced setting in the VM configuration called snapshot.alwaysAllowNative. To add this value you have to go to the VM properties then to [VM Options => Advanced => EDIT CONFIGURATION].
The following image shows the value of the snapshot.alwaysAllowNative variable that according to VMware documentation must have a value equal to “TRUE”. You can use the following link as reference VMware Documentation
Now i start testing to validate that the native snapshot is working in Ontap. First i will create a snapshot with the snapshot.alwaysAllowNative function set to FALSE. Then i will make changes to the VM so that i can measure the speed of deleting and applying the snapshot changes to the base disk. In the example shown below the command New-Snapshot in PowerCLI was used to create a snapshot of the VM named RocaWeb
PS /home/rebelinux> get-vm -Name RocaWeb | New-Snapshot -Name PRE_Native_Array_Snapshot | Format-Table -Wrap -AutoSize Name Description PowerState ---- ----------- ---------- PRE_Native_Array_Snapshot PoweredOff PS /home/rebelinux>
In this step a 10GB file was copied to grow the snapshot so that i can measure how fast the changes are applied to the base disk when the snapshot is deleted. In this example the file “RocaWeb_2-000001-delta.vmdk” represents the delta where the snapshot changes are saved. This represents a traditional VMware snapshot.
[root@comp-01a:/vmfs/volumes/55ab62ec-2abeb31b/RocaWeb] ls -alh total 35180596 drwxr-xr-x 2 root root 4.0K May 31 23:40 . drwxr-xr-x 7 root root 4.0K May 31 19:02 .. -rw------- 1 root root 276.0K May 31 23:40 RocaWeb-Snapshot15.vmsn -rw------- 1 root root 4.0G May 31 23:40 RocaWeb-a03f2017.vswp -rw------- 1 root root 264.5K May 31 23:40 RocaWeb.nvram -rw------- 1 root root 394 May 31 23:40 RocaWeb.vmsd -rwxr-xr-x 1 root root 3.4K May 31 23:40 RocaWeb.vmx -rw------- 1 root root 10.0G May 31 23:51 RocaWeb_2-000001-delta.vmdk #Delta (VMFS Based Snapshot) -rw------- 1 root root 301 May 31 23:40 RocaWeb_2-000001.vmdk -rw------- 1 root root 500.0G May 31 23:37 RocaWeb_2-flat.vmdk -rw------- 1 root root 631 May 31 23:37 RocaWeb_2.vmdk [root@comp-01a:/vmfs/volumes/55ab62ec-2abeb31b/RocaWeb]
The following image shows the time it took to apply the snapshot changes to the base disk when the snapshot was removed. In summary the operation took 9 minutes in total using traditional VMware snapshot.
Note: Ontap simulator was used for this lab
In this last example the New-Snapshot command was also used to create the snapshot but with the snapshot.alwaysAllowNative option set to “TRUE”. In that way i can test the use of Native Snapshot Offload in NFS. Here again, a 10GB file was copied to the VM to grow the snapshot, so i can measure how quickly changes are applied to the base disk when the snapshot is deleted.
PS /home/rebelinux> get-vm -Name RocaWeb | New-Snapshot -Name POST_Native_Array_Snapshot | Format-Table -Wrap -AutoSize Name Description PowerState ---- ----------- ---------- POST_Native_Array_Snapshot PoweredOff PS /home/rebelinux>
Here we can see that there is no “-delta.vmdk” file but there is a file named “RocaWeb_2-000001-flat.vmdk” with the same size of 500GB as the “RocaWeb_2-flat.vmdk” file. This allows us to confirm that the NFS Native Snapshot Offload feature is enabled in Ontap.
[root@comp-01a:/vmfs/volumes/55ab62ec-2abeb31b/RocaWeb] ls -alh total 49419672 drwxr-xr-x 2 root root 4.0K Jun 1 00:07 . drwxr-xr-x 7 root root 4.0K May 31 19:02 .. -rw------- 1 root root 276.0K Jun 1 00:07 RocaWeb-Snapshot16.vmsn -rw------- 1 root root 4.0G Jun 1 00:07 RocaWeb-a03f2017.vswp -rw------- 1 root root 264.5K Jun 1 00:07 RocaWeb.nvram -rw------- 1 root root 393 Jun 1 00:07 RocaWeb.vmsd -rwxr-xr-x 1 root root 3.4K Jun 1 00:07 RocaWeb.vmx -rw------- 1 root root 500.0G Jun 1 00:09 RocaWeb_2-000001-flat.vmdk #No Delta (Array Based Snapshot OffLoad) -rw------- 1 root root 650 Jun 1 00:07 RocaWeb_2-000001.vmdk -rw------- 1 root root 500.0G Jun 1 00:03 RocaWeb_2-flat.vmdk -rw------- 1 root root 631 Jun 1 00:07 RocaWeb_2.vmdk [root@comp-01a:/vmfs/volumes/55ab62ec-2abeb31b/RocaWeb]
The following image shows the time it took to apply the snapshot changes to the base disk when the snapshot was removed using the NFS Native Snapshot Offload. In summary, you can see that applying the snapshot changes to the base disk took no time at all to finish.
NFS native snapshot offload operations are so fast because ONTAP references metadata when it creates a Snapshot copy, rather than copying data blocks, that why Snapshot copies are so efficient. Doing so eliminates the seek time that other systems incur in locating the blocks to copy, as well as the cost of making the copy itself.