8 Managing Resources Using Control Groups

Control groups, referred to as cgroups, are an Oracle Linux kernel feature that organizes processes (PIDs) into hierarchical groups for resource allocation. For example, if you have identified three sets of processes that need to be allocated CPU time in a ratio of 150:100:50, you can create three cgroups, each with a CPU weight corresponding to one of the three values in the ratio, and then assign the appropriate processes to each cgroup.

By default, systemd creates a cgroup for the following:

  • Each systemd service set up on the host.

    For example, a server might have control group NetworkManager.service to group processes owned by the NetworkManager service, and control group firewalld.service to group processes owned by the firewalld service, 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 directory 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 directories under the /sys/fs/cgroup virtual file system and assigning process IDs (PIDs) to different cgroups according to system requirements. However, the recommended practice is to use systemd to configure cgroups instead of creating the cgroups manually under /sys/fs/cgroup. See Oracle Linux 10: System Management with systemd for the recommended method of managing cgroups through systemd.

Note:

Use systemd to configure cgroups.

This topic describes the manual creation of cgroup directories in the /sys/fs/cgroup file system to provide background knowledge of the kernel cgroup feature to which systemd provides access. We recommend configuring cgroups by using systemd.

Oracle Linux 10 provides 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 v1 whose over flexibility prevented proper coordination of resource use among the system consumers.

Note that cgroups v1 is deprecated and isn't available on Oracle Linux 10. The cgroups v2 functionality is enabled and mounted by default.

For more information about control groups, see the cgroups(7) and sysfs(5) manual pages.