K8s CPU Limits Deconstructed
summary
Shows that a Go service limited to 250m = 25% CPU (25 ms per 100 ms) on a 16‑core node gets throttled because Go detects 16 cores and spawns many Ps/Ms. Uses kind + Kubernetes, Postgres backend and a 1,000‑request load (10 connections); baseline run yields ~126 req/s. Setting GOMAXPROCS=1 (or using Uber’s maxprocs) restores throughput by matching Go’s threads to the quota. Notes Go 1.25 change: runtime ensures ≥2 procs, so rebench before/after.
AI-written summary · about
chapters (9)
- 0:00Introduction and origin
- 3:23Understanding CPU limits
- 6:24Time, latency and hardware
- 12:30Go scheduler semantics
- 22:24Concurrency vs parallelism
- 34:31K8s and Go runtime friction
- 40:04Load testing demonstrations
- 44:25Optimizing GOMAXPROCS
- 49:41Dependencies and closing
related talks
38mA Tale of Tail Latency: Understanding k18n CPU Requests and Limits for Sust. and Profit
06mGolang and Native K8s: Symbiotic Relationship in App Development
27mThe Kubernetes Hunger Games: Distro Performance in the Edge
35mPushing the Limits of Prometheus at Etsy
39mThrottling: New Developments in Application Performance with CPU Limits
47mOptimizing Kubernetes Resource Requests/Limits for Cost-Efficiency and Latency
02h 26mKubernetes Performance Tuning Workshop
31mRunning Low-Latency Workloads on Kubernetes
