CGroups is a feature that limits and isolates resources of a collection of processes.
It supports the following operations for the group of processes:
- limit the RAM usage;
- set priorities for CPU usage and capacity of the I/O subsystem;
- collect resource usage statistics;
- isolate namespaces;
- use management tools.
libvirt uses cgroups v1. With libvirt VMmanager uses two modules cgroups: cpu and blkio that allow managing priorities of CPU usage and I/O subsystem capacity.
For more information please refer to the article Virtualization management using libvirt.
The priorities are set in the fields CPU weight and I/O weight usage when you create a virtual machine. In cgroups of the cluster nodes, the corresponding directories with the specified parameters are created.
A virtual machine is allocated the CPU time according to its priorities from the total amount of priorities of virtual machines. I/O subsystem capacity is allocated in the same way.
E.g., if three virtual machines are requesting CPU resources simultaneously:
- VM1 with CPU weight 1000;
- VM2 with CPU weight 2000;
- VM3 with CPU weight 4000.
CPU time will be distributed between virtual machines in the following way:
- VM1: 1000/(1000+2000+4000)*100% = 14,3 %;
- VM2: 2000/(1000+2000+4000)*100% = 28,6 %;
- VM3: 4000/(1000+2000+4000)*100% = 57,1 %.
CPU weight is stored in the the file /sys/fs/cgroup/cpu/machine.slice/machine-qemu\x2dvm1.scope/cpu.shares.
blkio weight is stored in the file /sys/fs/cgroup/blkio/machine.slice/machine-qemu\x2dvm1.scope/blkio.weight.