Cgroup
lastmod 2025-01-22created 2016-06-223 edits
cgroup (Control Groups) is a Linux kernel feature that lets you allocate, limit, and monitor system resources (CPU, memory, disk I/O, network, etc.) per process group. This makes it useful for container environments, virtualization, system resource distribution, and performance optimization.
Key features
- Resource Limiting
- Can limit usage of CPU, memory, disk I/O, etc.
- Hierarchical Organization
- Groups are created in parent-child relationships, so child groups can inherit the policies of parent groups.
- Resource Accounting
- Monitors the resources used by a specific process group and collects statistics.
- Resource Isolation
- Isolates different process groups so they use resources independently.
Main subsystems (Controller)
- cpu - Controls CPU usage (priority, scheduling)
- cpuacct - Tracks and reports CPU usage
- memory - Limits memory usage and controls swap
- blkio - Manages block device (I/O) resources
- net_cls/net_prio - Allocates network bandwidth and adjusts priority
- pids - Limits the number of processes
- devices - Manages access permissions for specific devices
cgroup versions
- cgroup v1 - Each controller is managed separately; flexible but complex.
- cgroup v2 - Single hierarchy, provides a consistent resource management approach.
Main commands
- cgcreate - Create a new cgroup
- cgset - Allocate and configure specific resources
- cgexec - Run a process in a specific cgroup
- cgdelete - Delete a cgroup
-
/sys/fs/cgroup/- File system for cgroup configuration and monitoring
Examples
Create a new cgroup and limit memory:
sudo cgcreate -g memory:/mygroup
echo 500M | sudo tee /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes
sudo cgexec -g memory:mygroup ./my_program
Limit CPU usage:
sudo cgcreate -g cpu:/cpulimited
echo 50000 | sudo tee /sys/fs/cgroup/cpu/cpulimited/cpu.cfs_quota_us
sudo cgexec -g cpu:cpulimited my_program
Use cases
- Docker and Kubernetes container resource management
- Resource isolation in multi-tenant environments
- Limiting CPU and memory usage of specific tasks
- Performance analysis and resource distribution optimization