Skip to content

Burst Capacity and Baseline IOPS

Baseline performance is what an EBS volume sustains indefinitely. Burst capacity is a credit balance that lets some volume types exceed that baseline for a while. Whether a volume has one depends entirely on its type.

gp2 earns I/O credits whenever it drives less than its baseline, at 3 credits per GiB per second, and spends them to burst above it.

  • Baseline is 3 IOPS per GiB, with a floor of 100 IOPS and a ceiling of 16,000.
  • Volumes smaller than 1 TiB (that is, provisioned below 3,000 IOPS) can burst to 3,000 IOPS.
  • The credit accrual limit is 5.4 million credits, enough to hold 3,000 IOPS for at least 30 minutes. Every volume also starts with a full balance, which is what makes a small boot volume feel fast on first launch.
  • Burst duration is the credit balance divided by the excess over baseline: a 100 GiB volume with a 300 IOPS baseline holds 3,000 IOPS for roughly 2,000 seconds, then drops back to 300.
  • Above 1,000 GiB the baseline exceeds the burst rate, so bursting stops being relevant.

st1 and sc1 work the same way but in throughput credits rather than IOPS. st1 has a 40 MiB/s per TiB baseline and bursts to 250 MiB/s per TiB; sc1 has a 12 MiB/s per TiB baseline and bursts to 80 MiB/s per TiB. Both are capped by a per-volume ceiling of 500 MiB/s and 250 MiB/s respectively.

gp3 has no credit system. It delivers 3,000 IOPS and 125 MiB/s at any size, indefinitely, and anything provisioned above that is also delivered indefinitely. io1 and io2 likewise deliver exactly what is provisioned, with no accrual and no cliff.

This is the practical reason to move off gp2. A gp2 volume that runs out of credits does not degrade gracefully — it falls to its baseline, which on a small volume can be 100 IOPS, and stays there until demand drops long enough to earn credits back. A gp3 volume provisioned for the same peak simply keeps performing.

The BurstBalance CloudWatch metric reports the percentage of credits remaining on a gp2, st1 or sc1 volume. An alarm on it catches the class of incident where latency climbs for no visible reason and no code has changed. A volume that repeatedly empties its balance needs either a larger gp2 volume (baseline scales with size) or, better, a move to gp3 with the required IOPS provisioned directly.