Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

1.2. デフォルトの Cgroup Hierarchies

デフォルトでは、systemd はスライス、スコープ 、およびサービスユニットの階層を自動的に作成し、cgroup ツリーに統一された構造を提供します。systemctl 「コントロールグループの作成」また、systemd Red Hat Enterprise Linux 7 で利用可能なコントローラー /sys/fs/cgroup/ ディレクトリーに自動的にマウントします。
警告
libcgroup パッケージの非推奨の cgconfig ツールは、systemd でまだサポートされていないコントローラーの階層をマウントして処理するために利用できます(特に net-prio コントローラー)。libcgropup ツールを使用して、systemd がマウントするデフォルトの階層を変更する場合、予期しない動作が発生するためです。libcgroup ライブラリーは、Red Hat Enterprise Linux の今後のバージョンで削除されます。cgconfig の使用方法については、3章libcgroup ツールの使用

systemd のユニットタイプ

システムで実行しているすべてのプロセスは、systemd init プロセスの子プロセスです。systemd は、リソース制御の目的に使用される 3 つのユニットタイプを提供します (systemd のユニットタイプの完全なリストについては、『Red Hat Enterprise Linux 7 システム管理者のガイド』の 「systemdによるサービス管理」の章を参照)。
  • サービス - ユニット設定ファイルに基づいて systemd が起動したプロセスまたはプロセスのグループ。サービスは、指定したプロセスをカプセル化して、1 つのセットとして起動および停止できるようにします。サービスの名前は以下の方法で指定されます。
    name.service
    name は、サービス名を表します。
  • スコープ - 外部で作成されたプロセスのグループ。スコープは、fork() 関数を介して任意のプロセスで開始および停止されたプロセスをカプセル化し、ランタイム時に systemd により登録されます。たとえば、ユーザーセッション、コンテナー、および仮想マシンはスコープとして処理されます。スコープの名前は以下のように指定されます。
    name.scope
    ここで、name はスコープ名を表します。
  • スライス - 階層的に編成されたユニットのグループ。スライスにはプロセスが含まれておらず、スコープおよびサービスを配置する階層を編成します。実際のプロセスはスコープまたはサービスに含まれます。階層ツリーでは、スライスユニットの全名前は、階層内の場所へのパスに対応します。ダッシュ("-")文字は、パスコンポーネントの区切り文字として機能します。たとえば、スライスの名前は以下のようになります。
    parent-name.slice
    これは、親-name.slice が親スライスのサブ スライスであることを意味します。このスライスには、parent -name -name 2. slice などの独自のサブ スライスを指定できます
    以下のように 1 つの root スライスが表示されます。
    -.slice
サービス、スコープ、スライスユニットは cgroup ツリーのオブジェクトに直接マッピングされます。これらのユニットがアクティブ化されると、ユニット名から構築される cgroup パスに直接マッピングされます。 たとえば、test-waldo.slice に配置された ex.service ress は cgroup test.slice/test-waldo.slice/ex.service/ にマッピングされます。
サービス、スコープ、スライスは、システム管理者、またはプログラムにより動的に作成されます。デフォルトでは、オペレーティングシステムは、システムの実行に必要な多くの組み込みサービスを定義します。また、デフォルトで 4 つのスライスが作成されます。
  • -.slice - root スライス。
  • system.slice: すべてのシステムサービスのデフォルト場所です。
  • user.slice - ユーザーセッションのデフォルトの場所です。
  • machine.slice: すべての仮想マシンおよび Linux コンテナーのデフォルト場所です。
ユーザーセッションはすべて、自動的にスコープユニットと、仮想マシンおよびコンテナーのプロセスに配置されることに注意してください。さらに、すべてのユーザーが暗黙的なサブスライスと共に割り当てられます。上記のデフォルト設定に加えて、システム管理者は新しいスライスを定義し、サービスやスコープをそれらに割り当てることができます。
以下のツリーは、cgroup ツリーの簡素化された例です。この出力は、で説明されている systemd-cgls 「コントロールグループに関する情報の取得」
├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 20  
├─user.slice
│ └─user-1000.slice
│   └─session-1.scope
│     ├─11459 gdm-session-worker [pam/gdm-password]
│     ├─11471 gnome-session --session gnome-classic
│     ├─11479 dbus-launch --sh-syntax --exit-with-session
│     ├─11480 /bin/dbus-daemon --fork --print-pid 4 --print-address 6 --session
│     ...
│     
└─system.slice
  ├─systemd-journald.service
  │ └─422 /usr/lib/systemd/systemd-journald
  ├─bluetooth.service
  │ └─11691 /usr/sbin/bluetoothd -n
  ├─systemd-localed.service
  │ └─5328 /usr/lib/systemd/systemd-localed
  ├─colord.service
  │ └─5001 /usr/libexec/colord
  ├─sshd.service
  │ └─1191 /usr/sbin/sshd -D
  │ 
  ...
ご覧のとおり、サービスおよびスコープにはプロセスが含まれており、独自のプロセスを含まないスライスに置かれています。唯一の例外は、-.slice とマークされた特別な systemd スライスにある PID 1 です。また、-.slice はツリー全体のルートディレクトリーで暗黙的に識別されるため、表示されません。
「ユニットファイルの変更」、PID 1 への API 呼び出しによりランタイム時に動的に作成できます(API 「オンラインドキュメント」 を参照)。スコープのユニットは、動的に作成できます。API 呼び出しで動的に作成されたユニットは一時的なもので、ランタイム時にのみ存在します。一時的なユニットは終了、無効化されたり、システムが再起動されるとすぐに自動的に解放されます。