Cgroups
There are three major cgroup configuration directives:
- Global top-level group:
init
,system
,user
, or a custom group - Selecting a top-level group for a set of run/task/services
- Per run/task/service limits
Note
Linux cgroups and details surrounding values are not explained in the Finit documentation. The Linux admin-guide cover this well: https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html
Top-level Group Configuration¶
# Top-level cgroups and their default settings. All groups mandatory
# but more can be added, max 8 groups in total currently. The cgroup
# 'root' is also available, reserved for RT processes. Settings are
# as-is, only one shorthand 'mem.' exists, other than that it's the
# cgroup v2 controller default names.
cgroup init cpu.weight:100
cgroup user cpu.weight:100
cgroup system cpu.weight:9800
Adding an extra cgroup maint/
will require you to adjust the weight of
the above three. We leave init/
and user/
as-is reducing weight of
system/
to 9700.
cgroup system cpu.weight:9700
# Example extra cgroup 'maint'
cgroup maint cpu.weight:100
By default, the system/
cgroup is selected for almost everything. The
init/
cgroup is reserved for PID 1 itself and its closest relatives.
The user/
cgroup is for local TTY logins spawned by getty.
Selecting Cgroups¶
To select a different top-level cgroup, e.g. maint/
, one can either
define it for a group of run/task/service directives in a .conf
or per
each stanza:
cgroup.maint
service [...] <...> /path/to/foo args -- description
service [...] <...> /path/to/bar args -- description
or
service [...] <...> cgroup.maint /path/to/foo args -- description
The latter form also allows per-stanza limits on the form:
service [...] <...> cgroup.maint:cpu.max:10000,mem.max:655360 /path/to/foo args -- description
Notice the comma separation and the mem.
exception to the rule: every
cgroup setting maps directly to cgroup v2 syntax. I.e., cpu.max
maps
to the file /sys/fs/cgroup/maint/foo/cpu.max
. There is no filtering,
except for expanding the shorthand mem.
to memory.
, if the file is
not available, either the cgroup controller is not available in your
Linux kernel, or the name is misspelled.
A daemon using SCHED_RR
currently need to run outside the default cgroups.
service [...] <...> cgroup.root /path/to/daemon arg -- Real-Time process