Cloud Rightsizing Without Breaking Production: gp2 to gp3, EC2 CPU Baselines and GPU Instances (G5, G6, P4, P5)
Everything in your account is sized for a peak that never comes, because at provision time nobody knows the load, doubling is free-feeling, and after an incident someone doubles again "just in case" and nobody ever walks it back. That's how fleets end up averaging 15% utilization. But rightsizing has a social failure mode that matters more than the technical one: the first resize that causes an…
The story discusses the importance of rightsizing cloud resources to avoid overprovisioning and reduce waste. The key points are:
1. Move 1: Migrate EBS volumes from gp2 to gp3, which reduces the per-GB price by about 20% and is an in-place, online modification with no downtime. However, performance baselines must be considered, as gp3 provides a flat 3,000 IOPS and 125 MB/s regardless of size, while gp2 scales with size. Before migrating larger volumes or those with known IOPS requirements, check actual consumption and provision IOPS/throughput accordingly. This move builds trust by showing visible savings with zero incidents.
2. Move 2: When downsizing EC2 instances, use percentile baselines (p95/p99) rather than averages, which can hide peak loads. Size instances to absorb observed peaks with headroom (around 70-80% when p99 is reached). Change one dimension (CPU, memory, or network) at a time, canary one instance before the fleet, schedule during low traffic, and monitor p99 latency for a day after the resize. Focus on low-risk services first, such as stateless, autoscaled, and well-load-balanced applications.
3. Move 3: GPUs present a different economics, with one GPU instance equaling a fleet. GPU rightsizing is different from CPU rightsizing, as CPU metrics don't indicate utilization or memory usage. GPU utilization and memory (DCGM or nvidia-smi exported to CloudWatch) are necessary. Common issues include inference services on high-performance hardware using training-class GPUs when lower-performance GPUs would suffice at a fraction of the cost.
Compatibility between GPU families (G5, G6, P4, P5) must be checked before moving fleets, as each family has different GPU architectures. Training jobs should use larger instances temporarily, while serving tasks should aim for the smallest instances meeting latency requirements. Mixing serving and training on one fleet can lead to misconfigurations.
Ultimately, the program should be ordered by blast radius, with evidence attached to every change, measured by incidents caused (target: zero), and prioritized by the importance of measuring these changes as loudly as the dollars saved.
Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.