[ECS Managed Instances] [request]: Configure EBS IOPS and throughput for Managed Instances data volumes
- Dominant language
- Shell
- Stars
- 5.4k
- Forks
- 334
- PR merge metrics
- No merged PRs in 30d
Description
### Community Note
* Please vote on this issue by adding a 👍 [reaction](https://blog.github.com/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/) to the original issue to help the community and maintainers prioritize this request
* Please do not leave "+1" or "me too" comments, they generate extra noise for issue followers and do not help prioritize the request
* If you are interested in working on this issue or have submitted a pull request, please leave a comment
**Tell us about your request**
Add IOPS and throughput configuration to `storageConfiguration` on an ECS Managed Instances capacity provider, matching what the EBS API and ECS task-attached EBS volumes already support for gp3.
**Which service(s) is this request for?**
ECS (Amazon ECS Managed Instances)
**Tell us about the problem you're trying to solve. What are you trying to do, and why is it hard?**
Managed Instances creates its EBS data volume with gp3 defaults: 3000 IOPS and 125 MB/s. `storageConfiguration` exposes only `storageSizeGiB`, so neither can be raised. Increasing volume size does not raise provisioned throughput on gp3, so the one knob that does exist is not a workaround.
We run a disk-cache-heavy service on Managed Instances and measured this become the binding performance constraint:
* The volume was in the gp3 bandwidth token bucket for 33-47% of one-minute intervals, with client throttling active.
* Per-IO wait while throttled was consistently ~1.87 ms. Read latency measured 21.8 ms at the client against 0.27 ms server-side, so roughly 99% of observed latency was bandwidth-bucket wait rather than disk or network time.
* One-minute average throughput never exceeded ~42 MB/s, about a third of the 125 MB/s limit. The bucket was exhausted by sub-second bursts, so the volume looked idle at minute granularity while throttling more or less continuously.
* Cache-fill writes consumed roughly 70% of the bandwidth budget, so the cache's own writes were throttling the reads the cache exists to serve.
125 MB/s is a low ceiling for any workload using local disk as a cache tier, and today it cannot be raised.
**Are you currently working around this issue?**
Yes, by disabling the disk cache entirely. That removed the throttling but also removed the feature, which is a poor trade. Alternatives we evaluated and rejected:
* Increase `storageSizeGiB` -- does not raise gp3 throughput.
* Use instance store NVMe instead -- constrains instance type selection and is not selectable through the capacity provider in the way we need.
* Move to self-managed EC2 capacity -- gives full EBS control but gives up managed patching and the operational benefits that led us to Managed Instances in the first place.
**Additional context**
Task-attached EBS volumes configured at deployment (`configuredAtLaunch`) already accept `iops` and `throughput`, so the parameters and their validation already exist elsewhere in ECS. This request is specifically for the capacity provider's host data volume.
Related: EBS encryption configuration for Managed Instances (filed separately).
**Attachments**
None.
Contributor guide
Research direction
Start with the capacity provider's `storageConfiguration` and compare it with task-attached EBS volumes using `configuredAtLaunch`, which already accept `iops` and `throughput`. Done means ECS Managed Instances data volumes can configure both gp3 IOPS and throughput, with behavior and validation matching the EBS API support described in the issue.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- aws
- Domain
- cloud, infrastructure
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100