1.2. 子系统、层级、控制组群和任务的关系
任何单一子系统(比如 cpu)最多可附加到一个层级中。
cpu 子系统永远无法附加到两个不同的层级。
单一层级可附加一个或者多个子系统。
cpu 和 memroy 子系统(或者任意数目的子系统)都可附加到单一层级中,只要每个子系统不再附加到另一个层级即可。
每次在系统中创建新层级时,该系统中的所有任务都是那个层级的默认 cgroup(我们称之为 root cgroup)的初始成员。对于您创建的任何单一层级,该系统中的每个任务都可以是那个层级中唯一一个 cgroup 的成员。单一任务可以是在多个 cgroup 中,只要每个 cgroup 都在不同的层级中即可。只要某个任务成为同一层级中第二个 cgroup 的成员,就会将其从那个层级的第一个 cgroup 中删除。一个任务永远不会同时位于同一层级的不同 cgroup 中。
cpu 和 memory 子系统都附加到名为 cpu_and_mem 的层级中,且 net_cls 子系统是附加到名为 net 的层级中,那么运行的 httpd 进程可以是 cpu_and_mem 中任意 cgroup 的成员,同时也是 net 中任意 cgroup 的成员。
httpd 进程所在 cpu_and_mem 中的 cgroup 可将其 CPU 时间限制为分配给其它进程时间的一半,并将其内存用量限制为最多 1024 MB。另外,net 中的 cgroup 还可将其传输速率限制为 30 MB/秒。
该系统中的任意进程(任务)都将自己分支创建子进程(任务)。该子任务自动成为其父进程所在 cgroup 的成员。然后可根据需要将该子任务移动到不同的 cgroup 中,但开始时它总是继承其父任务的 cgroup(进程术语中称其为“环境”)。
cpu_and_mem 层级中名为 half_cpu_1gb_max 的 cgroup 成员的任务,以及 net 层级中 cgroup trans_rate_30 的成员。当 httpd 进程将其自身分成几个分支时,其子进程会自动成为 half_cpu_1gb_max cgroup 和 trans_rate_30 cgroup 的成员。它会完全继承其父任务所属的同一 cgroup。