- How to use VMware vSAN ReadyNode Configurator - Fri, Dec 17 2021
- VMware Tanzu Kubernetes Toolkit version 1.3 new features - Fri, Dec 10 2021
- Disaster recovery strategies for vCenter Server appliance VM - Fri, Nov 26 2021
When managing and maintaining a VMware vSphere environment, keeping an eye on storage and storage I/O is extremely important. In most virtualization environments where shared SAN storage is in place, it is not uncommon to see storage I/O resources exhausted before CPU and in many cases memory too.
SIOC allows you to prevent a single virtual machine from monopolizing I/O consumption on your datastore. SIOC is able to ensure an equal (or fair) distribution of I/Os between VMs when contention occurs. SIOC is not triggered during normal operations. There is a threshold that acts as a trigger for the I/O queue throttling mechanism that is enabled on the datastore.
In terms of performance, SIOC offers some control over the datastores where your workloads are running. If some of your VMs have a high load while others are underperforming because the storage is not able to deliver enough, SIOC is the element that can control that.
SIOC prevents your critical VMs from being affected by VMs from other hosts that access the same datastore and "steal" valuable I/O operations per second (IOPS).
After SIOC is enabled on the datastore, ESXi starts to monitor the datastore for any latency. If ESXi marks a datastore as congested and its latency reaches a predefined threshold, each VM on that datastore is allocated I/O resources in proportion to its shares.
Configuring shares on virtual machines sets how IOPS will be distributed between those VMs. A VM with high shares is going to get more IOPS than a VM that is configured with low or normal shares.
Storage I/O Control requirements and some limitations
All your datastores that are enabled with SIOC (SIOC is enabled per datastore) have to be managed by a single vCenter Server.
SIOC is supported on Fibre Channel, NFS, and iSCSI connected storage. Raw device mappings (RDM) are not currently supported.
If you're using extents on your datastores, then you cannot use SIOC. This is not supported.
Some arrays might be using automated storage tiering, so in this case you should check the VMware storage compatibility guide and make sure it is compatible with SIOC.
How to activate SIOC and where?
Connect to your vCenter Server via the vSphere client and then browse to the datastore icon in the vSphere Client.
Select Configure > Datastore capabilities > Edit.
On the next screen, you'll see three radio buttons:
- Enable Storage I/O Control and statistics collection—Activates the feature. Note: You can uncheck the Include I/O statistics for SDRS.
- Disable Storage I/O Control but enable statistics collection—You can select the option to include I/O statistics for SDRS if used.
- Disable Storage I/O Control and statistics collection—Disables SIOC and statistics collection.
By default, the Disable Storage I/O Control and statistics collection option is active and selected. So you can go ahead and select the Enable Storage I/O Control and statistics collection radio button.
Adjust the percentage of peak thresholds if you like. The defaults are set to 90%, which is a recommended value, but there are other values you can choose from.
Here is the view.
There is also the option to enter another number, but you'll get a nice warning message saying that "Setting improper congestion threshold values could be detrimental to the performance of the virtual machines on the datastore".
The manual value is not in percent but in milliseconds (ms). When you click it, you'll see that you can choose from three different predefined values as well.
Click OK to validate and you're done. Proceed with all the shared datastores you might have in your organization or only the ones where you have your business-critical workloads running.
Storage I/O control troubleshooting
Each time you add a new host that is connected to a shared datastore, you have to re-enable SIOC. If you experience problems with SIOC and you have recently changed the number of hosts, simply disable and re-enable SIOC.
Make sure that you're using the correct values and that those values have not been modified. You should enter 30 ms, which is the recommended value.
Where can you check the VMs shares/limits at the cluster level? Navigate and select your cluster > Monitor > Storage. Then view the shares and shares value columns there.
If you're not using resource pools, you can set shares at the VM level for your critical business VMs. Controlling and avoiding latency problems at the VM level with SIOC, which is only triggered when contention occurs, is a good way to protect the business-critical workloads you might have in your enterprise.
Subscribe to 4sysops newsletter!
SIOC is configured at the datastore level and is only in action when storage latency increases above a predefined threshold. You should consult SAN's manufacturer manual for recommended values. Setting values too low or too high might not deliver the expected results.
Want to write for 4sysops? We are looking for new authors.
Very interresting article which made re-verify my settings and try to understand it more.
But it opened some questions, especially after you've mentionned "If you're not using resource pools…"
I'm now wondering if it is not an upcoming functionality to controle SIOC at the RP level!
On the other side, it also made me wonder how the VM share level is interracting with the RP level (CPU & mem). An example: if you have a RP (scalable) with high share configured and all your VMs are individually configured to normal: if you set one VM to high, will it give even more prioritiy (high VM in high RP) or is RP setting overulling the individual setting?
I've searched but couldn't find any info (yet) about that.
Anyway, controlling SIOC at the RP level would be a nice improvement…
Good question Franck,
I really don't know about any future integration with RP and SIOC, but yes, would make sense.
And would you know the impact between Ressource Pool and single VM share configuration?
Is any of them overuling the other or can they be combined?