Cloud vCPUs get rationed: burst credits, steal time and container CPU quotas. This series covers how to spot it and how to pick the right CPU class: compute-intensive Go, Rust and C++ work on dedicated cores, IO-heavy services on medium general-purpose CPUs.
Want to break it yourself? The hands-on Pod CPU Throttling lab in System Failure Labs runs this on Kubernetes with the Grafana dashboard below.
PART 1CPU Throttling: The Hidden Tax on Your Cloud Bill
You pick an instance with "4 vCPUs". You assume four cores of compute, all the time. Often you get far less, and nothing in your code tells you.
PART 2Compute-Bound Go, Rust and C++: Buy Real Cores
If your service spends most of its time computing rather than waiting, the CPU class is the single biggest performance lever you have. More than most code optimisations.
PART 3IO-Heavy Services: Why Medium CPUs Win
Most backend services don't compute much. They wait: for the database, for a downstream API, for disk, for the client. For these, paying for dedicated cores is often burning money.
PART 4How to Detect CPU Throttling in 5 Commands
Choose instance types from evidence. These five checks tell you whether you're compute-bound, IO-bound, or being throttled.
PART 5Choosing a CPU Class: Decision Matrix + Cost Math
Four parts of theory and measurement. Here's how to decide.
Grafana dashboard
All queries from this series in one import-ready dashboard: CFS throttle ratio, frozen seconds, usage vs limit/request, top throttled containers, PSI, steal and Go scheduler latency. Needs cAdvisor, kube-state-metrics and node-exporter (kube-prometheus-stack has all three). Import via Dashboards → New → Import.
Download dashboard JSON