BACKGROUND IMAGE: iSTOCK/GETTY IMAGES
Microsoft Storage QoS (Storage Quality of Service) is a feature for monitoring and managing the performance of storage resources allocated to individual virtual machines (VMs) running on Hyper-V and Scale-Out File Servers or Cluster Shared Volumes (CSV). In either scenario, a failover cluster is required for storage servers -- but not for compute servers -- and all servers must run the same version of Windows Server 2016. Storage QoS was originally introduced with Windows Server 2012 but has been enhanced for Windows Server 2016.
Storage QoS monitors storage activity and ensures storage is used fairly within input/output (I/O) performance windows established through formal policies. Storage QoS allows administrators to monitor the storage performance of every VM through a common dashboard. Storage QoS manages storage I/O and prevents VMs from using excess storage resources and causing storage I/O bottlenecks. Storage QoS policies set minimum and maximum storage IOPS for every VM to ensure that performance window is observed. Storage QoS alerts administrators if storage performance is out of policy.
Storage QoS supports two policy types. Aggregated policies establish a window of minimum and maximum IOPS for a group of VMs that will share the performance window. For example, in an aggregated policy with a maximum of 400 IOPS and a minimum of 200 IOPS for a group of four VMs, each VM will receive a maximum of about 100 IOPS and no less than 50 IOPS. Dedicated policies establish minimum and maximum performance values for individual VMs. If the same 200/400 IOPS policy were applied to four VMs separately as a dedicated Storage QoS policy, each VM would receive a maximum of 400 IOPS if the storage system can keep pace.
Storage QoS can be monitored and managed through a GUI management interface or PowerShell. For example, a Storage QoS Resource will appear as a Cluster Core Resource in the Failover Cluster Manager GUI. Administrators that prefer to use PowerShell for management or scripting can use cmdlets to create, change, and check policies and resources.