Design Decisions - Do we want to support hierarchical cgroups?

Problem

Cgroups can be organized in some sort of tree. If so, they can “inherit” some specifications from their parents. The inheritance process is described here: https://docs.kernel.org/admin-guide/cgroup-v2.html#top-down-constraint. It is no inheritance like e.g. a C++ programmer would expect it. It seems that the way the resources are restricted or distributed is depending on the kind of resource. See here for more details: https://docs.kernel.org/admin-guide/cgroup-v2.html#resource-distribution-models

Influencing factors

The following constraints have to be taken into account for a suitable solution:

  • New tasks can be added during runtime, hence it is possible that also a new cgroup is added during runtime. As processes can only be assigned to cgroup-leafs, adding new cgroups and processes down in the hierarchy can lead to complex cgroup/process reassignment tasks.

Assumptions

The following assumptions have been made in the decision process:

  • cgroups are created on startup

  • cgroups can be created on runtime

  • cgroups never disappear without restart

Considered Alternatives

1) Don’t support hierarchical cgroups

Don’t support hierarchical cgroups.

pros

  • Reduces complexity in the parser and the implementation in crinit

  • Easy to add new cgroups on runtime

cons

  • Maybe not capable to support complex scenarios or only very cumbersome. So the user would be restricted in some scenarios.

2) Support hierarchical cgroups

Support hierarchical cgroups.

pros

  • Most flexible approach

cons

  • More room for errors. Processes may only be in the leave nodes of the cgroup tree, for example.

  • Complex to deal with new cgroups on runtime

Decision

Decision 1 “Don’t support hierarchical cgroups” is taken

Rationale

The original ADR requests a “flat style”. It states the following pros and cons:

pros

  • integrator just needs to define cg/ns features he/she wants. But only meaningful selected ones.

cons

  • feature bloat of crinit?

Open Points

None.