aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--etc/rc.conf.Linux17
-rw-r--r--sh/runscript.sh.in21
2 files changed, 31 insertions, 7 deletions
diff --git a/etc/rc.conf.Linux b/etc/rc.conf.Linux
index 909e6a94..6285bde7 100644
--- a/etc/rc.conf.Linux
+++ b/etc/rc.conf.Linux
@@ -20,10 +20,21 @@
# consolefont, numlock, etc ...)
rc_tty_number=12
+##############################################################################
+# CGROUPS RESOURCE MANAGEMENT
+
# If you have cgroups turned on in your kernel, this switch controls
# whether or not a group for each controler is mounted under
# /sys/fs/cgroup.
-# Support for process management by cgroups is planned in the future,
-# so if you turn this off, be aware that you may not be able to use that
-# feature.
+# None of the other options in this section work if this is set to "NO".
#rc_controller_cgroups="YES"
+
+# These options can be set globally in this file; however, if you do
+# this, the same setting will apply to all of your services.
+# If you want different settings for each service, place the settings in
+# /etc/conf.d/foo for service foo.
+
+# This is the number of CPU shares a service is allowed to use. The
+# default value, set by the kernel, is 1024.
+# Also, this setting is not preserved if you suspend your computer.
+#rc_cgroup_cpu_shares=1024
diff --git a/sh/runscript.sh.in b/sh/runscript.sh.in
index d53d70d6..21ff39a3 100644
--- a/sh/runscript.sh.in
+++ b/sh/runscript.sh.in
@@ -193,11 +193,24 @@ unset _conf_d
# Load any system overrides
sourcex -e "@SYSCONFDIR@/rc.conf"
-if [ "$RC_UNAME" = "Linux" -a "$1" = "start" ]; then
- if [ -d /sys/fs/cgroup/openrc ]; then
- mkdir -p /sys/fs/cgroup/openrc/${RC_SVCNAME}
- echo $$ > /sys/fs/cgroup/openrc/${RC_SVCNAME}/tasks
+if [ "$RC_UNAME" = "Linux" -a "$RC_SYS" != "PREFIX" -a "$1" = "start" ]; then
+ openrc_cgroup=/sys/fs/cgroup/openrc
+ if [ -d ${openrc_cgroup} ]; then
+ cgroup=${openrc_cgroup}/${RC_SVCNAME}
+ mkdir -p ${cgroup}
+ [ -f "${cgroup}"/tasks ] && echo 0 > "${cgroup}"/tasks
fi
+
+ shares="${rc_cgroup_cpu_shares:-$RC_CGROUP_CPU_SHARES}"
+ if [ -n "${shares}" -a -d /sys/fs/cgroup/cpu ]; then
+ cgroup=/sys/fs/cgroup/cpu/openrc_${RC_SVCNAME}
+ if [ ! -d ${cgroup} ]; then
+ mkdir -p ${cgroup}
+ fi
+ [ -f "${cgroup}"/cpu.shares ] && echo ${shares} > "${cgroup}"/cpu.shares
+ [ -f "${cgroup}"/tasks ] && echo 0 >> "${cgroup}"/tasks
+ fi
+
#todo: add processes to cgroups based on settings in conf.d
fi