CPU throttling · Part 3/5

IO-Heavy Services: Why Medium CPUs Win

2026-10-04 · Servloci Engineering

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.

What IO-heavy looks like

Quick test: under load, CPU sits at 10–40% while request latency is dominated by DB/network time. IO-bound.

Why medium (general-purpose, even burstable) works

  1. Idle CPU earns credits. A service at 15% average stays under a burstable baseline most of the day and bursts during spikes.
  2. Go and Rust async are cheap at waiting. A goroutine or Tokio task blocked on IO costs a few KB of memory, not a CPU core. One modest CPU can hold tens of thousands of connections.
  3. Memory and network matter more. For IO-heavy work, choose by RAM (connection pools, caches) and network bandwidth/PPS first. General-purpose families give a better RAM-per-dollar ratio than compute-optimised ones.
  4. Scale out beats scale up. Several small instances behind a load balancer give redundancy and survive credit drain on any one box.

Pick: general-purpose families (AWS m-family / t-family for small services, GCP e2/n2, OCI flex, DO Basic/General Purpose).

When this advice breaks

"IO-heavy" is not always "CPU-light". Watch for:

Practical setup

CPU throttling series

  1. CPU Throttling: The Hidden Tax on Your Cloud Bill
  2. Compute-Bound Go, Rust and C++: Buy Real Cores
  3. IO-Heavy Services: Why Medium CPUs Win
  4. How to Detect CPU Throttling in 5 Commands
  5. Choosing a CPU Class: Decision Matrix + Cost Math
← Part 2Part 4 →