группы управления Linux (Linux control groups)
Описание (Description)
Control groups, usually referred to as cgroups, are a Linux
kernel feature which allow processes to be organized into
hierarchical groups whose usage of various types of resources can
then be limited and monitored. The kernel's cgroup interface is
provided through a pseudo-filesystem called cgroupfs. Grouping
is implemented in the core cgroup kernel code, while resource
tracking and limits are implemented in a set of per-resource-type
subsystems (memory, CPU, and so on).
Terminology
A cgroup is a collection of processes that are bound to a set of
limits or parameters defined via the cgroup filesystem.
A subsystem is a kernel component that modifies the behavior of
the processes in a cgroup. Various subsystems have been
implemented, making it possible to do things such as limiting the
amount of CPU time and memory available to a cgroup, accounting
for the CPU time used by a cgroup, and freezing and resuming
execution of the processes in a cgroup. Subsystems are sometimes
also known as resource controllers (or simply, controllers).
The cgroups for a controller are arranged in a hierarchy. This
hierarchy is defined by creating, removing, and renaming
subdirectories within the cgroup filesystem. At each level of
the hierarchy, attributes (e.g., limits) can be defined. The
limits, control, and accounting provided by cgroups generally
have effect throughout the subhierarchy underneath the cgroup
where the attributes are defined. Thus, for example, the limits
placed on a cgroup at a higher level in the hierarchy cannot be
exceeded by descendant cgroups.
Cgroups version 1 and version 2
The initial release of the cgroups implementation was in Linux
2.6.24. Over time, various cgroup controllers have been added to
allow the management of various types of resources. However, the
development of these controllers was largely uncoordinated, with
the result that many inconsistencies arose between controllers
and management of the cgroup hierarchies became rather complex.
A longer description of these problems can be found in the kernel
source file Documentation/admin-guide/cgroup-v2.rst (or
Documentation/cgroup-v2.txt in Linux 4.17 and earlier).
Because of the problems with the initial cgroups implementation
(cgroups version 1), starting in Linux 3.10, work began on a new,
orthogonal implementation to remedy these problems. Initially
marked experimental, and hidden behind the
-o __DEVEL__sane_behavior mount option, the new version (cgroups
version 2) was eventually made official with the release of Linux
4.5. Differences between the two versions are described in the
text below. The file cgroup.sane_behavior, present in cgroups
v1, is a relic of this mount option. The file always reports "0"
and is only retained for backward compatibility.
Although cgroups v2 is intended as a replacement for cgroups v1,
the older system continues to exist (and for compatibility
reasons is unlikely to be removed). Currently, cgroups v2
implements only a subset of the controllers available in cgroups
v1. The two systems are implemented so that both v1 controllers
and v2 controllers can be mounted on the same system. Thus, for
example, it is possible to use those controllers that are
supported under version 2, while also using version 1 controllers
where version 2 does not yet support those controllers. The only
restriction here is that a controller can't be simultaneously
employed in both a cgroups v1 hierarchy and in the cgroups v2
hierarchy.