Назад | Перейти на главную страницу

Что требуется для активации cgroups в Linux

У меня есть сжатое ядро ​​Debian (linux-image-2.6.32-5-openvz-amd64), которое, согласно Doku, должно поддерживать контрольные группы. Когда я смотрю на конфигурацию ядра, она есть (или требуется какая-то другая конфигурация ядра?)

# zgrep -i cgroup /boot/config-2.6.32-5-openvz-amd64
# CONFIG_CGROUP_SCHED is not set
CONFIG_CGROUPS=y
# CONFIG_CGROUP_DEBUG is not set
CONFIG_CGROUP_DEVICE=y
CONFIG_BLK_CGROUP=y
# CONFIG_DEBUG_BLK_CGROUP is not set
CONFIG_NET_CLS_CGROUP=y

Также, согласно http://wiki.debian.org/LXC, может потребоваться параметр ядра cgroup_enable = memory. Я с него запустил ядро:

# cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-2.6.32-5-openvz-amd64 root=UUID=6332fe39-7eaa-4519-b6c1-e05808284586 ro cgroup_enable=memory quiet console=ttyS0,57600n8

Однако система по-прежнему не поддерживает cgroup! Файловая система cgroup не может быть смонтирована, так как тип файловой системы даже не известен системе:

# mount -t cgroup none /cgroup
mount: unknown filesystem type 'cgroup'

и:

# grep -i cgroup /proc/filesystems
#

Так что либо ошибка, либо я что-то упускаю. Кто-нибудь может мне сказать что? Отсутствует ли параметр ядра? Конфигурация ядра?

Вы должны передать -o, чтобы указать, что монтировать.

mount -t cgroup -o memory cgroup_memory /sys/fs/cgroup/memory

И это при условии, что / sys / fs / cgroup вообще смонтирован.

mount -t tmpfs cgroup /sys/fs/cgroup

В Ubuntu есть пакет с именем cgroup-lite который может делать все это при загрузке. Похоже, что его нет в Debian, поэтому я не уверен, что может быть эквивалентом.

Примечание: я не могу добавлять комментарии, поэтому просто должен ответить на ваш вопрос таким образом. Например: я хотел спросить, проверяли ли вы журналы ядра (dmesg | grep cgroup).

Это зависит от вашего дистрибутива и версии ядра. Вы можете использовать следующий скрипт из Docker для тестирования cgroups и функции, связанные с контейнером:

wget https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh -O cgroups_check && chmod +x cgroups_check
./cgroups_check

Ты должен так садиться[1]:

$ mount -t cgroup -o <cgroup_subsystem> name /cgroup/name

cgroup_subsystem может быть[2]: {blkio, cpu, cpuacct, cpuset, devices, freezer, memory, net_cls, net_prio, ns}

Вы также можете монтировать контрольные группы с помощью fstab (статическая информация о файловых системах). Добавьте эту строку в / etc / fstab, чтобы смонтировать ее при загрузке системы с подсистемами cgroup по умолчанию.

$ cgroup  /sys/fs/cgroup  cgroup  defaults  0   0