[RFC/POC]: Make cpuset.cpus.effective independent of cpuset.cpus

Petr Malat
2024-03-21T21:33:06Z

Hi!
I have tried to use the new remote cgroup feature and I find the
interface unfriendly - requiring cpuset.cpus.exclusive to be a subset
of cpuset.cpus requires the program, which wants to isolate a CPU for
some RT activity, to know what CPUs all ancestor cgroups want to use.

For example consider cgroup hierarchy c1/c2/c3 where my program is
running and wants to isolate CPU N, so
- It creates new c1/c2/c3/rt cgroup
- It adds N to cpuset.cpus.exclusive of rt, c3 and c2 cgroup
(cpuset.cpus.exclusive |= N)
- Now it should do the same with cpuset.cpus, but that's not possible
if ancestors cpuset.cpus is empty, which is common configuration and
there is no good way how to set it in that case.

My proposal is to
- Not require cpuset.cpus.exclusive to be a subset of cpuset.cpus
- Create remote cgroup if cpuset.cpus is empty and local cgroup if it's
set, to give the user explicit control on what cgroup is created.

I have prepared change to test my idea (the next mail). I haven't tested it
thoroughly yet, but I wanted to open the discussion on this topic to know
if such a change could be accepted and I should burn more time on it.

BR,
Petr