CGroups: create the openrc cgroup hierarchy
Openrc will create a cgroup hierarchy called openrc which will have all services it starts and all subsystems attached to it. If you need other groups/hierarchies, please use libcgroup.
This commit is contained in:
parent
453d13296d
commit
d8bbeb184f
@ -1,10 +1,3 @@
|
|||||||
# Set the control group for this service.
|
|
||||||
# If you do not set this, the default setting is the value of
|
|
||||||
# RC_SVCNAME.
|
|
||||||
# This setting is ignored if you do not have CONFIG_CGROUPS active in
|
|
||||||
# your kernel.
|
|
||||||
# rc_cgroup="foo"
|
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# LINUX SPECIFIC OPTIONS
|
# LINUX SPECIFIC OPTIONS
|
||||||
|
|
||||||
|
@ -62,13 +62,24 @@ mount_misc()
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Setup Kernel Support for cgroup
|
# Setup Kernel Support for cgroup
|
||||||
if [ -d /sys/fs/cgroup ] && ! mountinfo -q /sys/fs/cgroup; then
|
if [ -d /sys/fs/cgroup ]; then
|
||||||
if grep -qs cgroup /proc/filesystems; then
|
if grep -qs cgroup /proc/filesystems && \
|
||||||
|
! mountinfo -q /sys/fs/cgroup; then
|
||||||
ebegin "Mounting cgroup filesystem"
|
ebegin "Mounting cgroup filesystem"
|
||||||
mount -n -t tmpfs -o nodev,noexec,nosuid \
|
mount -n -t tmpfs -o nodev,noexec,nosuid \
|
||||||
cgroup /sys/fs/cgroup
|
cgroup /sys/fs/cgroup
|
||||||
eend $?
|
eend $?
|
||||||
fi
|
fi
|
||||||
|
if ! mountinfo -q /sys/fs/cgroup/openrc; then
|
||||||
|
ebegin "creating openrc control group"
|
||||||
|
mkdir /sys/fs/cgroup/openrc
|
||||||
|
mount -n -t cgroup -o nodev,noexec,nosuid \
|
||||||
|
openrc /sys/fs/cgroup/openrc
|
||||||
|
echo 1 > /sys/fs/cgroup/openrc/notify_on_release
|
||||||
|
echo @LIBEXECDIR@/sh/cgroup-release-agent.sh \
|
||||||
|
> /sys/fs/cgroup/openrc/release_agent
|
||||||
|
eend
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,8 +12,8 @@ include ${MK}/os.mk
|
|||||||
SRCS-FreeBSD=
|
SRCS-FreeBSD=
|
||||||
BIN-FreeBSD=
|
BIN-FreeBSD=
|
||||||
|
|
||||||
SRCS-Linux= init-early.sh.in udhcpc-hook.sh.in
|
SRCS-Linux= cgroup-release-agent.sh.in init-early.sh.in udhcpc-hook.sh.in
|
||||||
BIN-Linux= init-early.sh udhcpc-hook.sh
|
BIN-Linux= cgroup-release-agent.sh init-early.sh udhcpc-hook.sh
|
||||||
|
|
||||||
SRCS-NetBSD= ifwatchd-carrier.sh.in ifwatchd-nocarrier.sh.in
|
SRCS-NetBSD= ifwatchd-carrier.sh.in ifwatchd-nocarrier.sh.in
|
||||||
BIN-NetBSD= ifwatchd-carrier.sh ifwatchd-nocarrier.sh
|
BIN-NetBSD= ifwatchd-carrier.sh ifwatchd-nocarrier.sh
|
||||||
|
10
sh/cgroup-release-agent.sh.in
Normal file
10
sh/cgroup-release-agent.sh.in
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#!@SHELL@
|
||||||
|
#
|
||||||
|
# This is run by the kernel after the last task is removed from a
|
||||||
|
# control group in the openrc hierarchy.
|
||||||
|
|
||||||
|
cgroup=/sys/fs/cgroup/openrc
|
||||||
|
PATH=/bin:/usr/bin:/sbin:/usr/sbin
|
||||||
|
if [ -d ${cgroup}/$1 ]; then
|
||||||
|
rmdir ${cgroup}/$1
|
||||||
|
fi
|
@ -148,6 +148,19 @@ start()
|
|||||||
service_inactive && _inactive=true
|
service_inactive && _inactive=true
|
||||||
mark_service_inactive
|
mark_service_inactive
|
||||||
fi
|
fi
|
||||||
|
if [ "$RC_UNAME" = Linux ]; then
|
||||||
|
local cgroup=/sys/fs/cgroup/openrc
|
||||||
|
local svc_cgroup=${cgroup}/${RC_SVCNAME}
|
||||||
|
if mountinfo -q ${cgroup}; then
|
||||||
|
mkdir ${svc_cgroup}
|
||||||
|
for f in cpuset.cpus cpuset.mems; do
|
||||||
|
if [ -f ${cgroup}/${f} ]; then
|
||||||
|
cp ${cgroup}/${f} ${svc_cgroup}
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo $$ > ${svc_cgroup}/tasks
|
||||||
|
fi
|
||||||
|
fi
|
||||||
eval start-stop-daemon --start \
|
eval start-stop-daemon --start \
|
||||||
--exec $command \
|
--exec $command \
|
||||||
${procname:+--name} $procname \
|
${procname:+--name} $procname \
|
||||||
@ -189,16 +202,6 @@ fi
|
|||||||
# Load any system overrides
|
# Load any system overrides
|
||||||
sourcex -e "@SYSCONFDIR@/rc.conf"
|
sourcex -e "@SYSCONFDIR@/rc.conf"
|
||||||
|
|
||||||
# Attach to CGroup - dir existing is enough for us
|
|
||||||
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
|
# Apply any ulimit defined
|
||||||
[ -n "${rc_ulimit:-$RC_ULIMIT}" ] && ulimit ${rc_ulimit:-$RC_ULIMIT}
|
[ -n "${rc_ulimit:-$RC_ULIMIT}" ] && ulimit ${rc_ulimit:-$RC_ULIMIT}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user