【シーグループス】

cgroups(リソース制御) とは?

最終更新:
💡 プロセスの集まりごとに、資源の使い方を管理

Linuxでプロセスをグループにまとめ、CPUやメモリなどの資源利用を管理する仕組み。グループは階層を作れ、上位の制限も受ける。Dockerなどの資源制限にも使われるが、コンテナを作るだけで自動的に上限が決まるわけではない。

📌 このページのポイント
cgroups:グループごとに資源を管理上位グループWebサービス処理1処理2CPU・メモリなど利用を制御バックアップ処理3CPU・メモリなど利用を制御下位グループも、上位の制限を受けるよ
cgroup v2の階層の模式例。線は親子関係を示し、具体的な上限値や実際の設定名は示していません。
ひよこ ひよこ
cgroupsは、何をまとめるの?
ペンギン先生 ペンギン先生
Linuxで動くプロセスをグループにまとめ、資源の利用を管理するよ。Webサービスの仕事とバックアップの仕事を別グループにする、といった使い方だね。CPUやメモリなどを種類ごとのコントローラーで制御する。ファイルを分類するフォルダーとは違うよ。
ひよこ ひよこ
グループの中に、グループも作れる?
ペンギン先生 ペンギン先生
木のような階層を作れるよ。下位のグループは上位の制約も受けるので、子の設定だけで親の制限を超えられるわけではない。cgroup v2は統一された1つの階層を使う。v1とは設定方法が異なるため、利用している環境の資料を確認しよう。
ひよこ ひよこ
コンテナの上限も、これで決まる?
ペンギン先生 ペンギン先生
DockerはCPUの制限などに、ホスト側のcgroup設定を使うよ。ただしDockerの資料では、既定のコンテナには資源の制限がない。必要な上限を設定することが大切なんだ。制限は使える量を管理するもので、処理の速さを保証するものではないよ。
ひよこ ひよこ
CPUとメモリで、上限の動作は同じ?
ペンギン先生 ペンギン先生
違うよ。v2のcpu.maxは一定期間に使えるCPU時間の上限を扱う。memory.maxはメモリ利用の上限で、到達して使用量を減らせないとグループ内でOOMキラーが呼ばれる。単に両方とも待てば済む、とは考えず、負荷と失敗時の動作も確かめよう。
ひよこ ひよこ
namespaceと同じ、隔離の機能?
ペンギン先生 ペンギン先生
主な役割は違うよ。namespaceはプロセスから見える資源や識別子などを分け、cgroupsは資源の利用を管理する。コンテナではこれらを組み合わせることがある。cgroupsの制限だけで、アクセス権やすべてのセキュリティ対策が整うわけではないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「cgroups」って出てきたら「プロセスの集まりごとに資源利用を管理する仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「control groups」 = 制御グループ
💬 グループを作る仕組みと、CPUやメモリなどの種類を扱うコントローラーから成るよ。

参考資料

← 用語集にもどる