In this post I wanted to talk about one of the under-utilized cool features available in vSphere: Storage I/O Control (SIOC) and there are just not enough customers looking at this or using it right now. Read on to find out if SIOC could help you in your environment.
Storage I/O Control is a method that VMware can manage and prioritize I/O for virtual machines. These VMs are typically contained within a vSphere cluster and use a shared datastore. It performs this function by using similar conecpts of shares and limits that you would be familiar with from CPU and memory that has been around in vSphere for years. VMware can then dynamically allocate I/O across the nodes in a vSphere cluster. You will need to own the Enterprise Plus licensing level to take advantage of SIOC.
The process of turning on SIOC is super simple, but if you start to adjust the settings from their defaults you will want to spend ample time looking into the effects.
To get the process started, I navigated to the Datastore view within the vSphere Client. Then I selected the datastore that I want to enable for SIOC. The example image below shows that I have highlighted that SIOC is currently disabled. To enable I will choose to edit the properties of the datastore.
When looking at the properties for my datastore, the choices are minimal. I can enable SIOC and adjust the Congestion Threshold. Not too many options here. I have elected to turn on SIOC and the default threshold is 30 ms of latency. The congestion threshold is the point at which SIOC will step in and begin to prioritize I/O for VMs that are located on this datastore.
The default threshold can be adjusted up or down if you have specific requirements, or if the underlying storage has characteristics that warrant the change. For example this datastore is located on a hybrid flash storage array and 30 ms of latency might be too much for my requirements. So I may want to consider adjusting the threshold down. The threshold can be configured from a minimum 10 ms to a maximum of 100 ms. A friendly warning: Do not change without researching your requirements and the effects of your change.
By default all VMs are configured with a Normal share value and have an unlimited IOP setting for all of its disks. The image below shows that you can edit these settings from the Resources tab on a VM properties. If you set an IOP limit for a virtual disk, vSphere will enforce this limit if the Congestion Threshold that we set is violated for the datastore with SIOC enabled.
A shares value can also be configured on a per disk level on each VM. There are four share values that can be set and are outlined below.
By setting the share value much like when you configure CPU or memory shares, vSphere is going to enforce it’s prioritization of I/O based on the shares. This would allow you to give a higher prioritization to VMs that require more performance in times of congestion. Again, before you dive into changing share values for your VMs, understand the risks over allowing vSphere to provide an equal shared to all.
With the increasingly important role that the vSphere web client is playing in new version of vSphere, I thought you should also see the process for enabling SIOC from this view. The process is pretty similar, but the web client does look very different. The image below shows that I have navigated to the datastore view and have clicked the datastore on which I want to enable SIOC. From there I can choose the Manage tab (I have highlighted the SIOC section). I can edit and enable from here.
When editing the properties you see a similar screen to the one in the previous section. From here you can enable or disable SIOC and adjust the congestion threshold.
I would recommend that you consider the effects that SIOC may have in your environment. If you have suffered from I/O congestion in the past, SIOC may be a good solution for you. This is a great feature that not enough customers are using right now and many could benefit from it.