我 cat /cgroup/memory/tasks 和 /cgroup/cpuset/tasks,发现很多重复的任务。不是一个任务只能出现在一个cgroup层次结构中吗?我对 cgroup 机制不是很熟悉,内存和 cpuset 只是控制任务行为的不同方面吗?
更具体地说,如果不同子系统的行为与任务都涉及的另一个子系统发生冲突,会发生什么?
您将两个原则混合在一起:任何进程始终是某个 cgroup 的成员,但这适用于 cgroup 层次结构(它们彼此独立)。因此,每个进程都将是您定义的每个 cgroup 层次结构中某个 cgroup 的成员(通常安装在 中/cgroup/HIERARCHY_NAME
)。
例如。当您将机器配置为具有 2 个层次结构时:
/cgroup/memory
与memory
cgroup 控制器关联的位置/cgroup/cpuset
与cpuset
cgroup 控制器关联的位置您将从两个文件开始,/cgroup/cpuset/tasks
并/cgroup/memory/tasks
包含所有正在运行的进程的 pid,直到您创建新的 cgroup 并将一些进程放入其中。所以难怪你在这里看到相同的 pid。
此外,由于 cgroup 层次结构是独立的,因此您无法将 cgroup 控制器连接到多个层次结构 - 这消除了明显的冲突。