ソフトウェア
上級
cgroups v2 (Control Groups v2)(シーグループスブイツー)
Linux 4.5 (2016) で stable 化したコントロールグループ第2世代。プロセス資源 (CPU/メモリ/I/O/PID) を階層制御、Docker / Kubernetes / systemd の基盤。
0 回閲覧
0 いいね
2026/5/15 更新
関連タグ
Linux
Kernel
cgroups
Container
概要
cgroups v2 (Control Groups version 2) はLinux 4.5 (2016年3月) で stable 化したプロセス資源制御機構の第2世代。Tejun Heo (Facebook) 主導開発、cgroup v1 (2007 Paul Menage 等開発・複数階層で混乱) を単一階層に統合した整理版。プロセスツリーを cgroup に grouping し、CPU / Memory / I/O / Pid Number / Network 等のリソースを階層制御する仕組みで、Docker / Kubernetes / systemd / LXC の基盤技術。
cgroups v1 vs v2
| 項目 | cgroups v1 (2007) | cgroups v2 (2016) |
|---|---|---|
| 階層 | 複数 (controller 別) | 単一 (統一階層) |
| 構造 | 個別マウント | /sys/fs/cgroup/ |
| controller 数 | 12 | 7 (統合) |
| PID controller | pids | あり |
| Memory | memory | + io / cpu 連動 |
| I/O | blkio | io (block + iolatency 統合) |
| プロセス位置 | 各controller 別 | 1 cgroup のみ |
| Threaded mode | なし | あり |
主要 controllers (v2)
| Controller | 機能 |
|---|---|
| cpu | CPU 時間配分 (weight / max) |
| memory | メモリ制限 (low / high / max / swap) |
| io | ブロックI/O 制限 (weight / latency) |
| pids | プロセス数制限 |
| cpuset | CPU / NUMA 配置 |
| freezer | プロセス一時停止 |
| rdma | RDMA リソース |
| hugetlb | Huge Page 制限 |
| misc | scarce hw resource (Intel RDT等) |
/sys/fs/cgroup/ 構造例
/sys/fs/cgroup/
├── cgroup.controllers
├── cgroup.procs
├── cpu.max
├── memory.max
├── memory.high
├── io.max
├── pids.max
├── system.slice/
│ ├── nginx.service/
│ │ ├── cpu.max
│ │ └── memory.max
│ └── ...
├── user.slice/
│ └── user-1000.slice/
│ └── ...
└── kubepods.slice/
├── pod-abc123.slice/
│ ├── cpu.max
│ └── memory.max
└── ...
Docker / Kubernetes 統合
| プラットフォーム | cgroup 採用 |
|---|---|
| Docker (cgroupfs driver) | v1 / v2 |
| Docker (systemd driver) | systemd 経由 |
| Kubernetes (containerd) | v2 推奨 (2024) |
| Kubernetes (CRI-O) | v2 |
| Podman | v2 |
| Systemd .service | v2 |
メモリ制御の進化
- memory.max: ハード上限 (超過でOOM-Kill)
- memory.high: ソフト上限 (超過でリクレイム圧)
- memory.low: 最小保証
- memory.swap.max: スワップ制限
- memory.zswap.max: zswap 圧縮制限
- memory.pressure: PSI (Pressure Stall Information)
v1 → v2 移行
| Distro | v2 デフォルト |
|---|---|
| Fedora | 31 (2019) 〜 |
| Ubuntu | 22.04 LTS (2022) 〜 |
| Debian | 11 Bullseye (2021) 〜 |
| RHEL | 9 (2022) 〜 |
| Arch Linux | 2021〜 |
| SUSE | 15 SP3 (2021) 〜 |
関連用語との違い
- vs namespaces: 隔離 (namespace) / 資源制御 (cgroup)
- vs systemd-slice: systemd は cgroup 上の抽象化レイヤ
- vs Linux Containers: cgroup は基盤・LXC / Docker は上位
FAQ
Q1: 一般ユーザに影響? A: 直接設定機会少ないが、systemd / Docker / Kubernetes 経由で間接利用。GNOME / KDE の Performance Mode 等もcgroup 経由制御。
Q2: v1 / v2 切替?
A: GRUB kernel parameter systemd.unified_cgroup_hierarchy=0 でv1 強制可。一部レガシーアプリの互換性のため。
Q3: PSI とは? A: Pressure Stall Information・cgroup / システム全体で「メモリ / CPU / IO 圧」を統計化。Linux 4.20+。OOM 予兆検知に有効。