Subject: Re: Proposed rc.d changes....
To: Greywolf <greywolf@starwolf.com>
From: Luke Mewburn <lukem@wasabisystems.com>
List: tech-userlevel
Date: 02/26/2001 10:51:34
On Sat, Feb 24, 2001 at 11:25:34AM -0800, Greywolf wrote:
> 'kay, I've tested this out; even on the SS5/170 I have, the difference is
> noticeable between the a) and b) below; the difference between b) and c) is
> measurable but not by as much, but it's still there.
>
> I like it.
So, loading rc.conf once and other little optimisations help a lot? Good!
The rc_fast_and_loose stuff might only help on platforms where fork()
is really bad.
Can you give me some indicative numbers of the boot times of options
a), b) and c)?
>
> On Fri, 23 Feb 2001, Luke Mewburn wrote:
>
> # From: Luke Mewburn <lukem@wasabisystems.com>
> # To: tech-userlevel@netbsd.org
> # Cc: Greywolf <greywolf@starwolf.com>
> # Subject: Re: Proposed rc.d changes....
> #
> # On Tue, Feb 20, 2001 at 07:12:48PM +1100, Luke Mewburn wrote:
> # > On Tue, Feb 20, 2001 at 02:36:04PM +1100, Luke Mewburn wrote:
> # > > I've been meaning to ask for testing from users with much slower
> # > > machines than my laptop (a PIII-700), because I didn't notice any
> # > > difference with my laptop with the patch.
> # > >
> # > > Any takers? (Or should I just post it here and have people post their
> # > > before & after results? :)
> # >
> # > here's a work in progress. use at your own risk, etc ...
> # >
> # > i'd be interested in the difference between:
> # >
> # > (a) the system as it stands now.
> # >
> # > (b) the following patch without rc_fast_and_loose set
> # > (it only loads rc.conf once, and has other speedups)
> # >
> # > (c) the following patch WITH rc_fast_and_loose set.
> # >
> # > the patch adds a call to `date' at the start of /etc/rc, so that could
> # > be added to your /etc/rc before test (a) so you have an idea on when
> # > it starts (date is already run at the end).
> #
> # So, I posted the patches a couple of days ago, and I haven't received
> # any feedback yet.
> #
> # Does it take *that* long to reboot the slow boxen?
> #
> #
> # Luke.
> #
> # >
> # > enjoy,
> # > luke.
> # >
> # > Index: rc
> # > ===================================================================
> # > RCS file: /cvsroot/basesrc/etc/rc,v
> # > retrieving revision 1.154
> # > diff -p -r1.154 rc
> # > *** rc 2000/12/15 00:00:09 1.154
> # > --- rc 2001/02/20 08:06:28
> # > *************** export PATH=/sbin:/bin:/usr/sbin:/usr/bi
> # > *** 14,20 ****
> # > --- 14,29 ----
> # >
> # > . /etc/rc.subr
> # > . /etc/rc.conf
> # > + _rc_conf_loaded=YES
> # >
> # > + # Uncomment the following to execute each /etc/rc.d script in
> # > + # the current shell rather than in a subshell. This may be
> # > + # faster on slow machines.
> # > + # CAUTION: USE THIS AT YOUR OWN RISK; A BAD SCRIPT MAY
> # > + # INADVERTENTLY PREVENT BOOT TO MULTIUSER.
> # > + #
> # > + #rc_fast_and_loose=YES
> # > +
> # > if ! checkyesno rc_configured; then
> # > echo "/etc/rc.conf is not configured. Multiuser boot aborted."
> # > exit 1
> # > *************** trap : 2
> # > *** 34,42 ****
> # > trap "echo 'Boot interrupted.'; exit 1" 3
> # >
> # > files=`rcorder -s nostart /etc/rc.d/*`
> # >
> # > ! for i in $files; do
> # > ! run_rc_script $i start
> # > done
> # >
> # > date
> # > --- 43,53 ----
> # > trap "echo 'Boot interrupted.'; exit 1" 3
> # >
> # > files=`rcorder -s nostart /etc/rc.d/*`
> # > +
> # > + date
> # >
> # > ! for _rc_elem in $files; do
> # > ! run_rc_script $_rc_elem start
> # > done
> # >
> # > date
> # > Index: rc.subr
> # > ===================================================================
> # > RCS file: /cvsroot/basesrc/etc/rc.subr,v
> # > retrieving revision 1.29
> # > diff -p -r1.29 rc.subr
> # > *** rc.subr 2000/11/17 03:47:43 1.29
> # > --- rc.subr 2001/02/20 08:06:29
> # > *************** check_pidfile()
> # > *** 117,132 ****
> # > fi
> # > _procnamebn=${_procname##*/}
> # > ps -p $_pid -o 'pid,command' | while read _npid _arg0 _argv; do
> # > ! if [ "$_npid" = "PID" ]; then
> # > ! continue
> # > ! fi
> # > ! if [ "$_arg0" = "$_procname" \
> # > ! -o "$_arg0" = "$_procnamebn" \
> # > ! -o "$_arg0" = "${_procnamebn}:" \
> # > ! -o "$_arg0" = "(${_procnamebn})" ]; then
> # > echo $_npid
> # > return
> # > ! fi
> # > done
> # > }
> # >
> # > --- 117,132 ----
> # > fi
> # > _procnamebn=${_procname##*/}
> # > ps -p $_pid -o 'pid,command' | while read _npid _arg0 _argv; do
> # > ! case "$_npid" in
> # > ! PID)
> # > ! continue ;;
> # > ! esac
> # > ! case "$_arg0" in
> # > ! $_procname|$_procnamebn|${_procnamebn}:|"(${_procnamebn})")
> # > echo $_npid
> # > return
> # > ! ;;
> # > ! esac
> # > done
> # > }
> # >
> # > *************** check_process()
> # > *** 144,159 ****
> # > _procnamebn=${_procname##*/}
> # > _pref=
> # > ps -ax -o 'pid,command' | while read _npid _arg0 _argv; do
> # > ! if [ "$_npid" = "PID" ]; then
> # > ! continue
> # > ! fi
> # > ! if [ "$_arg0" = "$_procname" \
> # > ! -o "$_arg0" = "$_procnamebn" \
> # > ! -o "$_arg0" = "${_procnamebn}:" \
> # > ! -o "$_arg0" = "(${_procnamebn})" ]; then
> # > echo -n "$_pref$_npid"
> # > _pref=" "
> # > ! fi
> # > done
> # > }
> # >
> # > --- 144,159 ----
> # > _procnamebn=${_procname##*/}
> # > _pref=
> # > ps -ax -o 'pid,command' | while read _npid _arg0 _argv; do
> # > ! case "$_npid" in
> # > ! PID)
> # > ! continue ;;
> # > ! esac
> # > ! case "$_arg0" in
> # > ! $_procname|$_procnamebn|${_procnamebn}:|"(${_procnamebn})")
> # > echo -n "$_pref$_npid"
> # > _pref=" "
> # > ! ;;
> # > ! esac
> # > done
> # > }
> # >
> # > *************** run_rc_command()
> # > *** 256,262 ****
> # > {
> # > _arg=$1
> # > if [ -z "$name" ]; then
> # > ! err 3 '$name is not set.'
> # > fi
> # >
> # > case "$_arg" in
> # > --- 256,262 ----
> # > {
> # > _arg=$1
> # > if [ -z "$name" ]; then
> # > ! err 3 'run_rc_command: $name is not set.'
> # > fi
> # >
> # > case "$_arg" in
> # > *************** run_rc_command()
> # > *** 297,314 ****
> # > else
> # > eval _flags=\$${name}_flags
> # > fi
> # > ! eval _chdir=\$${name}_chdir
> # > ! eval _chroot=\$${name}_chroot
> # > ! eval _nice=\$${name}_nice
> # > ! eval _user=\$${name}_user
> # > ! eval _group=\$${name}_group
> # > ! eval _groups=\$${name}_groups
> # >
> # > # if ${rcvar} is set, and $1 is not
> # > # "rcvar" or "status", then run
> # > # checkyesno ${rcvar}
> # > # and return if that failed
> # > #
> # > if [ -n "${rcvar}" -a "$_arg" != "rcvar" -a "$_arg" != "status" ]; then
> # > if ! checkyesno ${rcvar}; then
> # > return 0
> # > --- 297,312 ----
> # > else
> # > eval _flags=\$${name}_flags
> # > fi
> # > ! eval _chdir=\$${name}_chdir _chroot=\$${name}_chroot \
> # > ! _nice=\$${name}_nice _user=\$${name}_user \
> # > ! _group=\$${name}_group _groups=\$${name}_groups
> # >
> # > # if ${rcvar} is set, and $1 is not
> # > # "rcvar" or "status", then run
> # > # checkyesno ${rcvar}
> # > # and return if that failed
> # > #
> # > + # XXXX use case?
> # > if [ -n "${rcvar}" -a "$_arg" != "rcvar" -a "$_arg" != "status" ]; then
> # > if ! checkyesno ${rcvar}; then
> # > return 0
> # > *************** run_rc_command()
> # > *** 325,332 ****
> # > # if there's a custom ${XXX_cmd},
> # > # run that instead of the default
> # > #
> # > ! eval _cmd=\$${_arg}_cmd
> # > ! eval _precmd=\$${_arg}_precmd
> # > if [ -n "$_cmd" ]; then
> # > # if the precmd failed and force
> # > # isn't set, exit
> # > --- 323,329 ----
> # > # if there's a custom ${XXX_cmd},
> # > # run that instead of the default
> # > #
> # > ! eval _cmd=\$${_arg}_cmd _precmd=\$${_arg}_precmd
> # > if [ -n "$_cmd" ]; then
> # > # if the precmd failed and force
> # > # isn't set, exit
> # > *************** run_rc_script()
> # > *** 515,528 ****
> # > err 3 'USAGE: run_rc_script file arg'
> # > fi
> # >
> # > ! case "$_file" in
> # > ! *.sh) # run in current shell
> # > set $_arg ; . $_file
> # > ! ;;
> # > ! *) # run in subshell
> # > ! ( set $_arg ; . $_file )
> # > ! ;;
> # > ! esac
> # > }
> # >
> # > #
> # > --- 512,532 ----
> # > err 3 'USAGE: run_rc_script file arg'
> # > fi
> # >
> # > ! if [ -n "$rc_fast_and_loose" ]; then
> # > ! unset name command command_args extra_commands pidfile rcvar
> # > ! unset required_dirs required_files required_vars
> # > ! eval unset ${_arg}_cmd ${_arg}_precmd
> # > set $_arg ; . $_file
> # > ! else
> # > ! case "$_file" in
> # > ! *.sh) # run in current shell
> # > ! set $_arg ; . $_file
> # > ! ;;
> # > ! *) # run in subshell
> # > ! ( set $_arg ; . $_file )
> # > ! ;;
> # > ! esac
> # > ! fi
> # > }
> # >
> # > #
> # > *************** load_rc_config()
> # > *** 536,542 ****
> # > err 3 'USAGE: load_rc_config command'
> # > fi
> # >
> # > ! . /etc/rc.conf
> # > if [ -f /etc/rc.conf.d/"$_command" ]; then
> # > . /etc/rc.conf.d/"$_command"
> # > fi
> # > --- 540,549 ----
> # > err 3 'USAGE: load_rc_config command'
> # > fi
> # >
> # > ! if [ -z "$_rc_conf_loaded" ]; then
> # > ! . /etc/rc.conf
> # > ! _rc_conf_loaded=YES
> # > ! fi
> # > if [ -f /etc/rc.conf.d/"$_command" ]; then
> # > . /etc/rc.conf.d/"$_command"
> # > fi
> #
> # --
> # Luke Mewburn <lukem@wasabisystems.com> http://www.wasabisystems.com
> # Luke Mewburn <lukem@netbsd.org> http://www.netbsd.org
> # Wasabi Systems - providing NetBSD sales, support and service.
> #
>
>
> --*greywolf;
> --
> *BSD: For IQs higher than 120.
--
Luke Mewburn <lukem@wasabisystems.com> http://www.wasabisystems.com
Luke Mewburn <lukem@netbsd.org> http://www.netbsd.org
Wasabi Systems - providing NetBSD sales, support and service.