From 0510c473d4cd9097401e3a7bc236b0121977b81d Mon Sep 17 00:00:00 2001 From: William Hubbs Date: Fri, 18 Nov 2011 15:54:18 -0600 Subject: [PATCH] CGroups: /sys/fs/cgroups should be a tmpfs The kernel documentation states that a cgroup file system should not be mounted here, but a tmpfs. This also means that we should not create a group for each process, but we should allow the user to specify which group a process should be assigned to. The rc_cgroup variable will be used for this purpose. For more information, see /usr/src/linux/Documentation/cgroups/cgroups.txt. --- init.d/sysfs.in | 2 +- sh/runscript.sh.in | 29 +++++++---------------------- 2 files changed, 8 insertions(+), 23 deletions(-) diff --git a/init.d/sysfs.in b/init.d/sysfs.in index 257f3148..a536d5fd 100644 --- a/init.d/sysfs.in +++ b/init.d/sysfs.in @@ -65,7 +65,7 @@ mount_misc() if [ -d /sys/fs/cgroup ] && ! mountinfo -q /sys/fs/cgroup; then if grep -qs cgroup /proc/filesystems; then ebegin "Mounting cgroup filesystem" - mount -n -t cgroup -o nodev,noexec,nosuid \ + mount -n -t tmpfs -o nodev,noexec,nosuid \ cgroup /sys/fs/cgroup eend $? fi diff --git a/sh/runscript.sh.in b/sh/runscript.sh.in index c7d712be..706a1f7d 100644 --- a/sh/runscript.sh.in +++ b/sh/runscript.sh.in @@ -190,18 +190,13 @@ fi sourcex -e "@SYSCONFDIR@/rc.conf" # Attach to CGroup - dir existing is enough for us -if [ -d /sys/fs/cgroup/ ]; then - # use RC_SVCNAME unless overridden in conf.d - SVC_CGROUP=${rc_cgroup:-$RC_SVCNAME} - mkdir -p /sys/fs/cgroup/${SVC_CGROUP} - for f in cpuset.cpus cpuset.mems; do - if [ -f /sys/fs/cgroup/${f} ]; then - cp /sys/fs/cgroup/${f} /sys/fs/cgroup/${SVC_CGROUP} - fi - done - # now attach self to cgroup - any children of this process will inherit this - echo $$ > /sys/fs/cgroup/${SVC_CGROUP}/tasks - # TODO: set res limits from conf.d +if [ -d /sys/fs/cgroup -a -n "${rc_cgroup}" ]; then + if [ -d /sys/fs/cgroup/${rc_cgroup} ]; then + # attach self to cgroup - any children of this process will inherit this + echo $$ > /sys/fs/cgroup/${rc_cgroup}/tasks + else + eerror "Control group /sys/fs/cgroup/${rc_cgroup} does not exist." + fi fi # Apply any ulimit defined @@ -307,14 +302,4 @@ while [ -n "$1" ]; do exit 1 done -# CGroup cleanup -if [ -d /sys/fs/cgroup/ ]; then - # use RC_SVCNAME unless overridden in conf.d - SVC_CGROUP=${rc_cgroup:-$RC_SVCNAME} - # reattach to root cgroup - echo $$ > /sys/fs/cgroup/tasks - # remove cgroup if empty, will fail if any task attached - rmdir /sys/fs/cgroup/${SVC_CGROUP} 2>/dev/null -fi - exit 0