Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 15 Jun 2011 00:28:48 +0200
From:      Jilles Tjoelker <jilles@stack.nl>
To:        freebsd-rc@freebsd.org
Subject:   [PATCH] Reducing forks in the boot sequence
Message-ID:  <20110614222848.GA25563@stack.nl>

next in thread | raw e-mail | index | archive | help
The below patch reduces vm.stats.vm.v_forks at REQUIRE: LOGIN time
of a simple 9-current VM by 105 (which is a bit more than 10%).

A side effect is that values starting with a hyphen and all whitespace
are preserved.

All versions of FreeBSD sh fork for a command substitution containing a
'.' or 'eval' command because these utilities may cause anything to be
invoked; the same thing applies to a command substitution that calls a
function. If people want to keep doing this (rather than returning
values via variables), I could look into an extension of the
optimization for command substitution (and possibly regular subshells)
that tries to avoid forking until the script does something that makes
it unavoidable (such as setting new traps, changing the current
directory, changing shell options).

The function _find_processes is pretty slow also for internal reasons.

Index: etc/rc.subr
===================================================================
--- etc/rc.subr	(revision 222648)
+++ etc/rc.subr	(working copy)
@@ -1062,7 +1062,7 @@
 
 	# Set defaults if defined.
 	for _var in $rcvar $rcvars; do
-		_defval=`eval echo "\\\$${_var}_defval"`
+		eval _defval=\$${_var}_defval
 		if [ -n "$_defval" ]; then
 			eval : \${$_var:=\$${_var}_defval}
 		fi
@@ -1070,9 +1070,9 @@
 
 	# check obsolete rc.conf variables
 	for _var in $rcvars_obsolete; do
-		_v=`eval echo \\$$_var`
-		_msg=`eval echo \\$${_var}_obsolete_msg`
-		_new=`eval echo \\$${_var}_newvar`
+		eval _v=\$$_var
+		eval _msg=\$${_var}_obsolete_msg
+		eval _new=\$${_var}_newvar
 		case $_v in
 		"")
 			;;
@@ -1743,7 +1743,7 @@
 _echoonce()
 {
 	local _var _msg _mode
-	_var=`eval echo \\$$1`
+	eval _var=\$$1
 	_msg=$2
 	_mode=$3
 
-- 
Jilles Tjoelker



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20110614222848.GA25563>