第44章 アプリケーションの制限の設定
コントロールグループ (cgroup
) のカーネル機能を使用して、プロセスのハードウェアリソースの制限や優先順位を設定したりまたは分離できます。これにより、アプリケーションのリソース使用状況をより詳細に制御して、効率的に使用できます。
44.1. コントロールグループについて
コントロールグループは、プロセスを階層的に順序付けされた cgroups
グループに編成できる Linux カーネル機能です。階層 (コントロールグループツリー) は、cgroups
仮想ファイルシステムに構造を提供して定義されます。デフォルトでは /sys/fs/cgroup
ディレクトリーにマウントされます。systemd
システムとサービスマネージャーは、cgroups
を利用して、それが管理するすべてのユニットとサービスを組織化します。または、/sys/fs/cgroup/
ディレクトリーでサブディレクトリーを作成および削除することにより、cgroups
階層を手動で管理できます。
リソースコントローラー (カーネルコンポーネント) は、これらのプロセスのシステムリソース (CPU 時間、メモリー、ネットワーク帯域幅、各種組み合わせなど) を制限、優先順位付け、または割り当てることで cgroup
内のプロセスの動作を変更します。
cgroups
に追加された値はプロセスアグリゲーションで、アプリケーションとユーザー間のハードウェアリソースの分割を可能にします。その結果、ユーザー環境の全体的な効率、安定性、およびセキュリティーが向上します。
- コントロールグループ 1
コントロールグループバージョン 1 (
cgroups-v1
) はリソースごとのコントローラー階層を提供します。これは、CPU、メモリー、I/O などの各リソースに、独自のコントロールグループ階層があることを意味します。あるコントローラーが、各リソースの管理において別のものと連携できるように、別のコントロールグループ階層を組み合わせることができます。ただし、2 つのコントローラーは異なるプロセス階層に属する可能性があり、適切な調整はできません。cgroups-v1
コントローラーは、長期間に渡って開発されているため、制御ファイルの動作と命名は均一ではありません。- コントロールグループ 2
階層の柔軟性から生じるコントローラー連携の問題は、control groups version 2 の発展につながっていました。
Control groups version 2 (
cgroups-v2
) では、すべてのリソースコントロールがマウントされることに対して単一のコントロールグループ階層を指定します。コントロールファイルの動作と命名は、さまざまなコントローラーにおいて一貫性があります。
注記cgroups-v2
は、RHEL 8.2 以降のバージョンで完全にサポートされています。詳細は Control Group v2 is now fully supported in RHEL 8 を参照してください。
このサブセクションは、Devconf.cz 2019 プレゼンテーションにを基にしています。[4]
関連情報
- Linux カーネルリソースコントローラーとは
-
cgroups(7)
の man ページ - コントロールグループ内の systemd のロール