cgroup (control group) subsystem is the way to distribute and limit
system resources fairly. Each service in a modern linux system runs
under its own cgroup. You can use systemd-cgls
and
systemd-top
on systemd distributions, below
,
atop
and /sys/fs/cgroup/
to monitor cgroups.
cgroups have separate memory controls and memory event counters related
to these controls. The most useful of the cgroup memory controls are
memory.high
and memory.low
. cgroups have
separate PSI counters. These are available through
{memory,io,cpu}.pressure
files. cgroup v2 has IO
controllers io.cost
and io.latency
, that help
with controlling disk operations and guarding from IO PSI spikes. Of
these two, the former is less invasive. You can use
systemd-run
to create cgroups on the fly for ad-hoc tasks
that can be unpredictably heavy on IO. PSI is one of the better methods
of determining resource limits for a cgroup. Tools like
senpai
can automatically set cgroup limits after observing
a service's pressure metrics under load.