在 Linux 中激活 cgroups 需要什么

在 Linux 中激活 cgroups 需要什么

我有一个 Debian squeeze 内核 (linux-image-2.6.32-5-openvz-amd64),根据 Doku 的说法,它应该支持 cgroups。当我查看内核配置时,它确实支持 (还是需要其他内核配置?)

# 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
#

所以要么是存在错误,要么是我遗漏了什么。有人能告诉我是什么吗?缺少内核参数吗?缺少内核配置吗?

答案1

您必须传递 -o 来告诉它要挂载什么。

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

并且假设 /sys/fs/cgroup 已经挂载。

mount -t tmpfs cgroup /sys/fs/cgroup

Ubuntu 有一个名为cgroup-精简版它可以在启动时完成所有这些操作。Debian 中似乎没有这个功能,所以我不确定等效功能是什么。

注意:我无法添加评论,因此我只能这样回答您的问题。例如:我想问您是否检查过内核日志(dmesg | grep cgroup)。

答案2

你应该这样安装[1]

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

cgroup_subsystem 可以[2]:{blkio、cpu、cpuacct、cpuset、设备、冷冻机、内存、net_cls、net_prio、ns}

您还可以借助 fstab(有关文件系统的静态信息)安装 cgroup。将此行添加到 /etc/fstab 以在系统启动时使用默认 cgroup 子系统安装它。

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

答案3

这取决于您的发行版和内核版本。您可以使用 Docker 中的以下脚本来测试cgroups和容器相关的功能:

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

相关内容