設定 - cgroup
ナビゲーションに移動
検索に移動
概要
cgroupの構造
cgroupは、階層ツリー構造で並べられる。
CPU、メモリ、ディスクI/O、ネットワーク帯域幅の使用量等のリソース制限を、単一のプロセスまたは階層ツリーのブランチ全体に対して設定できる。
SUSEでは、Systemdがスライスと呼ぶグループに全てのプロセスを整理するためにcgroupsを使用する。
また、cgroupプロパティを設定するためのインターフェースも提供している。
systemd-cgls
コマンドは、階層ツリーを表示するものである。
カーネルのcgroup APIにはv1とv2の2種類があり、さらに、異なるAPIを公開する複数のcgroup階層がある。
多数の可能な組み合わせから、実用的な選択肢は2つある。
(設定できるモードは1つだけである)
- hybrid
- コントローラのないv2階層、コントローラはv1階層
- unified
- コントローラのあるv2階層
SUSEのデフォルトはhybridである。
これは、それを必要とするアプリケーションに後方互換性を提供するものである。
以下に示す機能は、unified v2階層でのみ利用可能である。
- メモリコントローラ
- リクレイムプロテクション (memory.low)、memory.high、PSI (圧力ストール情報)
- IOコントローラ
- ライトバック制御、新しい制御ポリシーコントローラ
- 非特権ユーザへの委譲 (ルートレスコンテナ)
- Systemdのフリーザーサポート
- 単一階層の取り扱いの簡素化
unifiedとして制御グループ階層を有効にする場合は、
systemd.unified_cgroup_hierarchy=1をGRUB 2ブートローダのカーネルコマンドラインパラメータとして追加する。
cgroupの移行
SUSEにおいて、cgroup v1からv2に移行する手順を示す。
まず、カーネルパラメータの設定する。
sudo vi /etc/default/grub
# /etc/default/grubファイル GRUB_CMDLINE_LINUX="... systemd.unified_cgroup_hierarchy=1"
次に、GRUBを更新する。
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
PCを再起動する。
変更が反映されているかどうかを確認する。
mount | grep cgroup # または ls -l /sys/fs/cgroup
移行に関するデメリットを以下に示す。
- 互換性の問題
- 古いコンテナランタイムやアプリケーションが正常に動作しない可能性がある。
- 特に古いバージョンのDockerやKubernetesで問題が発生する可能性がある。
- 設定の変更が必要
- 既存のcgroup v1用の設定スクリプトやツールの修正が必要になる場合がある。
- システム監視ツールの設定変更が必要になることがある。
- 学習コスト
- cgroup v2の新しい概念や設定方法の習得が必要である。
- トラブルシューティングの方法が変わる。
移行前の推奨事項を以下に示す。
- テスト環境で事前検証を行う。
- 使用している全てのアプリケーションがcgroup v2に対応していることを確認する。
- バックアップを取得