/cgroup/memory/tasks と /cgroup/cpuset/tasks を分類したところ、多くの重複したタスクが見つかりました。タスクは 1 つの cgroup 階層にしか表示されないのではないですか? 私は cgroup メカニズムにあまり詳しくありません。メモリと cpuset は、タスクの動作のさまざまな側面を制御するだけですか?
より具体的には、異なるサブシステムの動作が、両方のタスクが関係する別のサブシステムと競合するとどうなるでしょうか?
2 つの原則が混在しています。どのプロセスも常に何らかの cgroup のメンバーですが、これは cgroup 階層 (互いに独立している) に関して機能します。したがって、すべてのプロセスは、定義した各 cgroup 階層内の cgroup のメンバーになります (通常は にマウントされます/cgroup/HIERARCHY_NAME
)。
例えば。2 つの階層を持つようにマシンを構成する場合:
/cgroup/memory
関連付けてマウントmemory
/cgroup/cpuset
関連付けてマウントcpuset
新しいcgroupを作成してその中にプロセスを入れるまで、実行中のすべてのプロセスのpidを含む/cgroup/cpuset/tasks
両方のファイルから始めます。/cgroup/memory/tasks
したがって、ここで同じ pid が表示されるのも不思議ではありません。
さらに、cgroup 階層は独立しているため、cgroup コントローラーを複数の階層に接続することはできません。これにより、明らかな競合がなくなります。