Dock Stay
cgroups: リソースの上限を決める
はじめに

cgroups: リソースの上限を決める

namespace が「見える世界」を分けるのに対し、cgroups は CPU・メモリ・IO の使用量を制限する。`--cpus` や `--memory` が内部でやっていること。

cgroups が制限するもの

cgroups は「使える資源量」を決める仕組みです。

namespace と対になってコンテナの基盤を成します。

  • CPU: シェア比率・クォータ(100ms あたり何 ms まで使えるか)
  • メモリ: 最大使用量・OOM Killer の挙動
  • IO: ブロックデバイスの帯域・IOPS
  • プロセス数: fork 爆弾の封じ込め

docker run --cpus 1.5 --memory 512m のようなオプションは、内部的にこの cgroups の値を設定しています。

v1 と v2

cgroups には v1 と v2 があり、主要ディストロは v2 に移行済みです。

v2 では階層が統一され、systemd と連携しやすくなっています。

v1 はリソースごとに別ツリーを持ち柔軟でしたが、階層が分散して一貫した制御が難しい問題がありました。

v2 は単一ツリー上でコントローラを有効化するシンプルな設計です。

RHEL 9 系、Ubuntu 22.04 以降はデフォルトで v2 です。

bash
# cgroup v2 の確認
stat -fc %T /sys/fs/cgroup/
# 出力が "cgroup2fs" なら v2

関連トピック