Cgroups
Overview
Control Groups (cgroups) limit, isolate, and account for resource usage of processes. Containers rely on cgroups to enforce CPU, memory, I/O, and PID limits.
cgroup v1 vs v2
v1 uses multiple hierarchies (one per controller).
v2 uses a unified hierarchy with consistent semantics.
Modern distros default to v2; systemd exposes it under /sys/fs/cgroup.
Common Controllers
CPU: shares, quotas, and scheduling controls. Memory: hard/soft limits, OOM behavior. IO: block I/O throttling and weight. PIDs: cap number of processes.
How It Works
Each process belongs to a cgroup in the hierarchy. Limits are enforced by the kernel; accounting stats are exposed via cgroup files. Container runtimes create per-container cgroups and attach processes.
Example (v2)
$ sudo mkdir -p /sys/fs/cgroup/demo
$ echo 200000 > /sys/fs/cgroup/demo/cpu.max
$ echo 512M > /sys/fs/cgroup/demo/memory.max
$ echo $$ > /sys/fs/cgroup/demo/cgroup.procs
Notes for Containers
Over-committing CPU is normal; memory limits are hard. PID limits prevent fork bombs inside a container. Use cgroups with Linux/Containerization/Namespaces to build isolated containers.