7 About Control Groups
Control groups, usually referred to as cgroups, are an Oracle Linux kernel feature that enables processes (PIDs)
to be organized into hierarchical groups for resource allocation. For example, if you have
identified 3 sets of processes that need to be allocated CPU time in a ratio of 150:100:50,
you can create 3 cgroups, each with a CPU weight corresponding to one of the
3 values in the ratio, and then assign the appropriate processes to each
cgroup.
By default, systemd creates a cgroup for the following:
-
Each
systemdservice set up on the host.For example, a server might have control group
NetworkManager.serviceto group processes owned by theNetworkManagerservice, and control groupfirewalld.serviceto group processes owned by thefirewalldservice, and so on. -
Each user (
UID) on the host.
The cgroup functionality is mounted as a virtual file system under /sys/fs/cgroup. Each cgroup has a corresponding folder within /sys/fs/cgroup file system. For example, the cgroups created by systemd for the services it manages can be seen by running the command ls -l /sys/fs/cgroup/system.slice | grep ".service" as shown in the following sample code block:
ls -l /sys/fs/cgroup/system.slice | grep ".service"
...root root 0 Mar 22 10:47 atd.service
...root root 0 Mar 22 10:47 auditd.service
...root root 0 Mar 22 10:47 chronyd.service
...root root 0 Mar 22 10:47 crond.service
...root root 0 Mar 22 10:47 dbus-broker.service
...root root 0 Mar 22 10:47 dtprobed.service
...root root 0 Mar 22 10:47 firewalld.service
...root root 0 Mar 22 10:47 httpd.service
...You can also create custom cgroups by creating folders under the
/sys/fs/cgroup virtual file system and assigning process IDs
(PIDs) to different cgroups according to the system needs.
However, the recommended practice is to use systemd to configure
cgroups instead of creating the cgroups manually under
/sys/fs/cgroup. See Using systemd to Manage cgroups v2 for the recommended method of managing cgroups through
systemd.
Note:
Use systemd to configure cgroups.
Although the recommended method for configuring using systemd to manage cgroups, this topic also covers the manual creation of cgroup folders in the /sys/fs/cgroup file system. However, this coverage is mainly to provide background knowledge of the kernel cgroup feature to which systemd provides access.
Oracle Linux provides two types of control groups:
- Control groups version 1 (
cgroups v1) -
These groups provide a per-resource controller hierarchy. Each resource, such as CPU, memory, I/O, and so on, has its own control group hierarchy. A disadvantage of this group is the difficulty of establishing proper coordination of resource use among groups that might belong to different process hierarchies.
- Control groups version 2 (
cgroups v2) -
These groups provide a single control group hierarchy against which all resource controllers are mounted. In this hierarchy, you can obtain better proper coordination of resource uses across different resource controllers. This version is an improvement over
cgroups v1whose over flexibility prevented proper coordination of resource use among the system consumers.
Both versions are present in Oracle Linux. However, by default, the
cgroups v2
functionality is enabled and mounted on Oracle Linux
9 systems.
For more information about control groups, see the cgroups(7) and
sysfs(5) manual pages.