Misunderstanding documentation on enabling cgroup controllers

Valentin Vidić vvidic at valentin-vidic.from.hr
Sun Aug 21 14:14:03 EDT 2022


On Fri, Aug 19, 2022 at 09:24:53AM +0100, Nicky Chorley wrote:
> The documentation for enabling and disabling cgroup controllers at
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/admin-guide/cgroup-v2.rst#n403
> says that no controllers are enabled by default and to enable them,
> one needs to write into cgroup.subtree_control.
> 
> I thought this meant that if I didn't enable a controller, I couldn't
> control those resources. However, I wrote a program to limit the
> number of processes in a cgroup and it works as expected - if I try to
> create more processes, I'm unable to. I didn't write "+pids" into
> cgroup.subtree_control - that file remains empty.
> 
> Am I misunderstanding the documentation, then?

AFAICT, it seems to be working as documented. It means that whatever
you put have in cgroup.subtree_control becomes cgroup.controllers in
a subdirectory. For example:

# cat /sys/fs/cgroup/cgroup.controllers 
cpuset cpu io memory hugetlb pids rdma
# cat /sys/fs/cgroup/cgroup.subtree_control 
cpuset cpu io memory pids

# mkdir /sys/fs/cgroup/dir1
# cat /sys/fs/cgroup/dir1/cgroup.controllers 
cpuset cpu io memory pids
# cat /sys/fs/cgroup/dir1/cgroup.subtree_control 
# ls /sys/fs/cgroup/dir1
cgroup.controllers      cpuset.cpus            memory.max
cgroup.events           cpuset.cpus.effective  memory.min
cgroup.freeze           cpuset.cpus.partition  memory.numa_stat
cgroup.max.depth        cpuset.mems            memory.oom.group
cgroup.max.descendants  cpuset.mems.effective  memory.pressure
cgroup.procs            dir2                   memory.stat
cgroup.stat             io.max                 memory.swap.current
cgroup.subtree_control  io.pressure            memory.swap.events
cgroup.threads          io.stat                memory.swap.high
cgroup.type             io.weight              memory.swap.max
cpu.max                 memory.current         pids.current
cpu.pressure            memory.events          pids.events
cpu.stat                memory.events.local    pids.max
cpu.weight              memory.high
cpu.weight.nice         memory.low

# mkdir /sys/fs/cgroup/dir1/dir2
# cat /sys/fs/cgroup/dir1/dir2/cgroup.controllers
# cat /sys/fs/cgroup/dir1/dir2/cgroup.subtree_control 
# ls /sys/fs/cgroup/dir1/dir2
cgroup.controllers  cgroup.max.descendants  cgroup.threads  io.pressure
cgroup.events       cgroup.procs            cgroup.type memory.pressure
cgroup.freeze       cgroup.stat             cpu.pressure
cgroup.max.depth    cgroup.subtree_control  cpu.stat

-- 
Valentin



More information about the Kernelnewbies mailing list