How do Burst Credits Work in the Context of Element Quality of Service (QoS)?
Applies to
- NetApp Element software
- quality of service (QoS)
Answer
Overview
Element QoS allows a volume to burst above its configured maxIOPS for a period of time based on available resources of the node it resides on.
Burst Credits and Burst Time
The IOPS that a volume can consume while bursting and how long it can burst are based on the following factors:
- The time increment (burstTime) of 60 seconds (this is fixed and can't be modified) -- one or more of these comprise the discrete increments during which a volume bursts
- The difference between a volume's configured maxIOPS and burstIOPS
- Credits (burstIOPSCredit) that the volume accrues over time
The burstIOPS, maxIOPS, and burstTime values for a given volume can be obtained through the ListActiveVolumes API call. Example output:
"qos": {
"burstIOPS": 1500,
"burstTime": 60,
"curve": { <snip> },
"maxIOPS": 1000,
"minIOPS": 50
}
The current burstIOPSCredit value for a given volume can be obtained via the GetVolumeStats API call.
The maximum burstIOPSCredit is calculated by multiplying the difference between a volume's maxIOPS and burstIOPS by the burstTime of 60 seconds. For example:
(burstIOPS - maxIOPS) * burstTime = burstIOPSCredit (Maximum)
(1500 - 1000) * 60 is 500 * 60 = 30000
Using Burst Credits
When a volume bursts, it begins to use burstIOPSCredit to exceed the volume's maxIOPS, up to the limit of burstIOPS. At a maximum, the volume will consume burstIOPS - maxIOPS each second. For example:
Actual IOPS: 1500 (note this is equal to the volume's burstIOPS)
burstIOPSCredit: 30000
Actual IOPS - maxIOPS = 1500 - 1000 = 500 burstIOPSCredit used per second
burstIOPSCredit / burstIOPSCredit per second = 30000 / 500 = 60 seconds
Thus, in this example the volume is able to burst for a maximum of 60 seconds before its burstIOPSCredit is fully consumed.
A less extreme example is the volume bursting above its maxIOPS but remaining below its burstIOPS. In this case, a volume can burst for longer than 60 seconds. For example:
Actual IOPS: 1200 (above maxIOPS but below burstIOPS)
burstIOPSCredit: 30000
Actual IOPS - maxIOPS = 1200 - 1000 = 200 burstIOPSCredit used per second
burstIOPSCredit / burstIOPSCredit per second = 30000 / 200 = 150 seconds
In this example the volume would be able to burst for 150 seconds.
Accruing Burst Credits
Any volume running below its maxIOPS will also accrue burst credits equivalent to how far below the volume's maxIOPS it is running. For example:
Actual IOPS: 800
maxIOPS - Actual IOPS = 1000 - 800 = 200 burstIOPSCredit accrued per second
burstIOPSCredit (Maximum) / burstIOPSCredit accrued per second = 30000 / 200 = 150 seconds to reach the maximum burstIOPSCredit
In this case, the volume would take 150 seconds (2.5 minutes) to fully accrue its maximum burstIOPSCredit.
In the examples given here we have assumed the burstIOPSCredit is at its maximum. This is not always the case but all of the math works the same way. A volume's current burstIOPSCredit amount can be viewed via the GetVolumeStats API call.
Exception: If there is a volume on the node that cannot reach its minIOPS, then burstIOPS are reset for all volumes
Additional Information
additionalInformation_text