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:
		| @@ -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 | ||||
|  | ||||
|   | ||||
| @@ -62,13 +62,24 @@ mount_misc() | ||||
| 	fi | ||||
|  | ||||
| 	# Setup Kernel Support for cgroup | ||||
| 	if [ -d /sys/fs/cgroup ] && ! mountinfo -q /sys/fs/cgroup; then | ||||
| 		if grep -qs cgroup /proc/filesystems; then | ||||
| 	if [ -d /sys/fs/cgroup ]; then | ||||
| 		if grep -qs cgroup /proc/filesystems && \ | ||||
| 			! mountinfo -q /sys/fs/cgroup; then | ||||
| 			ebegin "Mounting cgroup filesystem" | ||||
| 			mount -n -t tmpfs -o  nodev,noexec,nosuid \ | ||||
| 				cgroup /sys/fs/cgroup | ||||
| 			eend $? | ||||
| 		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 | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -12,8 +12,8 @@ include ${MK}/os.mk | ||||
| SRCS-FreeBSD= | ||||
| BIN-FreeBSD= | ||||
|  | ||||
| SRCS-Linux=	init-early.sh.in udhcpc-hook.sh.in | ||||
| BIN-Linux=	init-early.sh udhcpc-hook.sh | ||||
| SRCS-Linux=	cgroup-release-agent.sh.in init-early.sh.in udhcpc-hook.sh.in | ||||
| BIN-Linux=	cgroup-release-agent.sh init-early.sh udhcpc-hook.sh | ||||
|  | ||||
| SRCS-NetBSD=	ifwatchd-carrier.sh.in ifwatchd-nocarrier.sh.in | ||||
| 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 | ||||
| 		mark_service_inactive | ||||
| 	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 \ | ||||
| 		--exec $command \ | ||||
| 		${procname:+--name} $procname \ | ||||
| @@ -189,16 +202,6 @@ fi | ||||
| # Load any system overrides | ||||
| 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 | ||||
| [ -n "${rc_ulimit:-$RC_ULIMIT}" ] && ulimit ${rc_ulimit:-$RC_ULIMIT} | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user