CGroups — механизм ограничения и изолирования вычислительных ресурсов для групп процессов.

Позволяет для групп процессов:

  • ограничивать использование памяти;
  • устанавливать приоритеты использования процессорного ресурса и пропускной способности подсистемы ввода-вывода;
  • вести статистику использования ресурсов;
  • изолировать пространства имён;
  • обеспечивать управление.

libvirt использует cgroups v1. VMmanager при помощи libvirt задействует два модуля cgroups: cpu и blkio, которые предназначены соответственно для управления приоритетами потребления процессорных ресурсов и пропускной способности подсистемы ввода-вывода.

Подробнее о libvirt см. в статье Управление виртуализацией с помощью libvirt.

Приоритеты задаются при создании виртуальных машин в полях вес CPU и вес использования I/O. В cgroups узла кластера создаются соответствующие директории и сохраняются указанные параметры.


Виртуальная машина получает процессорное время в соответствии со своими приоритетами от общего объёма приоритетов виртуальных машин, обращающихся к процессору. Аналогично происходит распределение пропускной способности подсистемы ввода-вывода.

Например, в случае если одновременно обращаются к ресурсам процессора три виртуальных машины:

  • VM1 с весом CPU 1000;
  • VM2 с весом CPU 2000;
  • VM3 с весом CPU 4000.

Тогда процессорное время между виртуальными машинами будет распределено следующим образом:

  • 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 хранится в файле /sys/fs/cgroup/cpu/machine.slice/machine-qemu\x2dvm1.scope/cpu.shares.

Вес blkio хранится в файле /sys/fs/cgroup/blkio/machine.slice/machine-qemu\x2dvm1.scope/blkio.weight.