設定 - cgroup

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動

概要



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に対応していることを確認する。
  • バックアップを取得