Design Decisions - One cgroup per unconfigured task or a common cgroup for all unconfigured tasks

Problem

If cgroup support is enabled in crinit and a task does not have a cgroup configured, in which cgroup should this process be placed?

Considered Alternatives

1) Create a common cgroup for all unconfigured tasks

This common cgroup will get all tasks that do not have a cgroup configured in their task file.

pros

  • The system can reserve specific resources for unconfigured tasks and there is no guesswork what would be a sensible default for a task specific cgroup

cons

  • That common cgroup must be configurable in the series file

  • Completely unrelated tasks start competing directly with each other in a more direct way than with no cgroups at all

2) Create a different cgroup for each unconfigured task

For each task that does not have its cgroup configured a new cgroup will be created before the process is started. The name could be generated from the e.g. the task name.

pros

  • There is no direct competition to other unrelated tasks

cons

  • It can be quite hard to guess sensible defaults for the resource available for that cgroup if it shall not be unrestricted.

3) Place the unconfigured tasks directly under the “real” root cgroup

The “real” root cgroup (that’s the parent of the crinit created root cgroup) can have sub-cgroups and processes at the same time. Therefore it would be possible to have unconfigured tasks in that cgroup. That would be the default behaviour.

pros

  • The least effort on crinit side

cons

  • The unconfigured tasks would be quite high-ranked to compete for resources. That might get problematic in case of using crinit in a safety related context.

Decision

Alternative 3 is taken.

Rationale

Open Points

None.