Throttles

Throttles are a mechanism to control the amount of resources that are used when the system is processing I/Os on supported objects. The system supports throttles on hosts, host clusters, volumes, copy offload operations, and storage pools. If a throttle limit is defined, the system either processes the I/O for that object, or delays the processing of the I/O to free resources for more critical I/O operations.

When you configure throttles on the system, keep in mind the following guidelines:
  • The throttle limit is a per node limit. For example, if a throttle limit is set for a volume at 100 IOPS, each node on the system that has access to the volume allows 100 IOPS for that volume. Any I/O operation that exceeds the throttle limit are queued at the receiving nodes.
  • The multipath policies on the host determine how many nodes receive I/O operations and the effective throttle limit.
  • If more than one throttle applies to an I/O operation, the lowest and most stringent throttle is used.
For each type of throttle, you can create either a IOPS or bandwidth limit or both. The throttle limit controls whether the processing of the host I/O continues or if it is delayed for later processing. Several reasons can exist to delay processing for specific hosts and host clusters. For example, if a host or host cluster has I/O intensive workloads, such as data mining systems, you can create a throttle limit that automatically delays the processing of I/O operations that exceed the configured throttle. Each host in the system can have a throttle defined or you can define throttle limits for a host cluster. In a host cluster throttle, all the hosts in the host cluster share the throttle limit.
Note: If you are creating a host cluster, any hosts that are added cannot have throttles configured. Throttles can be applied to the entire host cluster.

The system also supports throttles to delay processing of I/O operations for volumes. If storage systems provide storage to a wide variety of applications, then production volumes with more critical I/O can be competing with volumes that have lower priority operations. For example, volumes that are used for backup or archive operations can have I/O intensive workloads, potentially taking bandwidth from production volumes. Volume throttle can be used to limit I/Os for these types volumes so that I/O operations for production volume are not affected.

You can also create throttles for systems that have copy offload features enabled, such as offloaded data transfer (ODX) on Microsoft Windows Server 2012 or for XCOPY/WRITESAME features on VMware hosts. Copy offload frees up hosts and speeds the copy process by offloading the operations of certain types of hosts to a storage system. For systems with these features enabled, administrators can define throttles to delay processing for copy offloads to free bandwidth for other more critical operations. When a throttle for copy offload is defined, the throttle applies across the entire system. Like other throttles on the system, you can set IOPS throttles, bandwidth throttles, or both; however, bandwidth throttles are more effective for copy offload operations.

Throttles can be defined for storage pools to control I/O operations on back-end storage systems. Storage pool throttles can be used to avoid overwhelming the back-end storage and be used with virtual volumes. You can set throttles for both parent and child pools. Throttles work in a hierarchy when they are applied to both the parent and child pool. Throttles that are defined in the parent pool applies to volumes in both parent and child pools. However, throttles that are defined on the child pool only apply to the volumes in that child pool. For mirrored volumes that are in different pools, only the throttling that applies to the primary copy is considered, regardless of which copy the I/O is directed to. In this case, any throttles defined on the secondary copy of the volume are ignored. Only throttles on the primary copy are used, whether the pool is parent or child pool. When throttles are defined in both parent and child pools, the more restrictive throttle applies to the volume in the child pool, but the I/O is counted against both pools. Consider these examples:
  • A parent pool is configured with a throttling limit of 5K IOPS and its single child pool had a limit at 3K IOPS. When I/O operations to a volume in the child pool reaches the throttling limit, the volume cannot receive any more I/O during that time. However, volumes in the parent pool can still use 2K of IOPS to process during that time.
  • A parent pool is configured with a throttling limit of 4K IOPS . The parent pool also has two child pool and each child pool has a throttling limit of 3K of IOPS.
  • A parent pool is configured with a throttling limit of 5K IOPS . The parent pool has also has two child pool without a throttle defined. All in all, the volumes in each pool cannot handle more than 4K IOPS but each of these pools can could serve its IOPS limit if the volumes in the other pools consume at a lower rate of IOPS In this example, the volumes in the parent and both child pools can reach the 5K IOPS together, regardless of which pool the volumes are located.

Throttles for volumes, hosts, host clusters, copy offload, and storage pools can be configured in the management GUI and by using the command-line interface (CLI).