All these items together make up a cyclical process that enables the minimum IOPS
implementation. At the compute layer, the current capacity is constantly being
evaluated, as is the capacity at the storage layer. The centralized policy manager then
evaluates the compute and storage capacities and adjusts limits and enforces them at
the compute layer as required to meet the various minimum policies deployed. As an
example, if the policy manager sees that the capacity at the compute layer is exceeding
that at the storage layer and that storage resources will not get the required level of
IOPS, the manager adjusts maximums for other resources to ensure that the required
storage capacity is available where needed.
This functionality is enabled by default in Windows Server 2016 for any VHD on a
Cluster Shared Volume. Metrics are collected at a per VHD, per VM, per host, and per
storage volume level. Policies are created that define minimum and maximum IOPS
and maximum bandwidth (MB/s), which while implemented at a VHD level through
management tools and PowerShell, you can actually apply at various levels such as the
following:
Per VHD
Per VM
Per service
Per tenant
When policies are applied to multiple VHDs, a fair-distribution algorithm is used for
all of the resources within a specific policy.
Although the feature is enabled by default, you need to manage the policies. This can
be done through PowerShell or System Center Virtual Machine Manager. I focus on
the PowerShell approach for the management, which requires the use of GUIDs to
manage policy, while System Center uses friendly names.
A default policy of all 0s specifies a minimum IOPS of 2, with no maximum, that is
applied to everything; this policy therefore ensures a fair distribution of resources.
The first step is to create your own policy with values to meet your requirements. The
attributes of a policy are as follows:
An admin-defined policy name
Maximum normalized IOPS limit
Maximum bandwidth (bytes per second)
Minimum guaranteed normalized IOPS
Policy type (dedicated—per VHD, aggregated—shared across VHDs). For example, a
dedicated policy type means that every VHD gets the values defined in the policy,
whereas aggregated means that every VHD shares the values (so that if the policy
is applied to five VHDs, they all share the values in the policy, for example, sharing
a maximum combined IOPS).