1
0
Fork 0
mirror of https://github.com/containers/youki synced 2024-05-18 13:36:14 +02:00
youki/docs/src/developer/libcgroups.md

31 lines
2.8 KiB
Markdown
Raw Normal View History

2021-12-23 15:31:40 +01:00
# libcgroups
2021-12-24 14:17:37 +01:00
This crate provides an interface for working with cgroups in Linux. cgroups or control groups is a Linux kernel feature which can be used to fine-control resources and permissions given to a particular process or a group of processes. You can read more about them on the [cgroups man page](https://man7.org/linux/man-pages/man7/cgroups.7.html).
2021-12-23 15:31:40 +01:00
2021-12-24 14:17:37 +01:00
The initial version of cgroups is called the version 1 was implemented in kernel 2.6.24, and later in kernel version 4.5, a new version of cgroups was released, aimed to solve issues with v1, the version v2.
2021-12-23 15:31:40 +01:00
2021-12-24 14:17:37 +01:00
This crates exposes several functions and modules that can be used to work with cgroups :
- common traits and functions which are used by both v1 and v2 such as
- Trait CgroupManager, this abstracts over the underlying implementation of interacting with specific version of cgroups, and gives functions to add certain process to a certain cgroup, apply resource restrictions, get statistics of a cgroups, freeze a cgroup, remove a cgroup or get list of all processes belonging to a cgroup. v1 and v2 modules both contain a version specific cgroup manager which implements this trait, and thus either can be given to functions or structs which expects a cgroup manager, depending on which cgroups the host system uses.
- Apart from the trait, this also contains functions which help with reading cgroups files, and write data to a cgroup file, which are used throughout this crate.
2021-12-24 14:17:37 +01:00
- A function to detect which cgroup setup (v1, v2 or hybrid) is on the host system, as well as a function to get the corresponding cgroups manager.
- Functions and structs to get and store the statistics of a cgroups such as
- CPU stats including usage and throttling
- Memory stats including usage of normal and swap memory, usage of kernel memory, page cache in bytes etc
- Pid stat including current active pids nd maximum allowed pids
- Block IO stats such as number of bytest transferred to/from a device in the cgroup, io operations performed by a device in the cgroup, amount of time cgroup had access to a device etc
- Huge TLB stats such as usage and maximum usage etc.
- Function to get pid stats
- Function to get supported hugepage size
- Function to parse flat keyed data and nested keyed data that can be in a cgroups file
- Parse a device number
- Cgroups V1 module which deal with implementing a cgroup manager for systems which have cgroups v1 or hybrid cgroups
- Cgroups V2 module which deal with implementing a cgroup manager for systems which have cgroups v2
2021-12-23 15:31:40 +01:00
As youki currently depends on systemd as an init system, this crate also exposes module systemd, which provides interface for working with systemd related operations. [systemd resource control](https://www.freedesktop.org/software/systemd/man/systemd.resource-control.html) is a good place to read more about systemd and its involvement in resource control.