git: 77e1ccbee3ed - main - rc: implement parallel boot
Baptiste Daroussin
bapt at FreeBSD.org
Wed Feb 24 09:20:50 UTC 2021
On Tue, Feb 23, 2021 at 05:05:37PM -0800, Cy Schubert wrote:
> In message <202102231027.11NARYYE041280 at gitrepo.freebsd.org>, Baptiste
> Daroussi
> n writes:
> > The branch main has been updated by bapt:
> >
> > URL: https://cgit.FreeBSD.org/src/commit/?id=77e1ccbee3ed6c837929e4e232fd07f9
> > 5bfc8294
> >
> > commit 77e1ccbee3ed6c837929e4e232fd07f95bfc8294
> > Author: Rick Parrish <unitrunker at gmail.com>
> > AuthorDate: 2021-02-07 06:15:21 +0000
> > Commit: Baptiste Daroussin <bapt at FreeBSD.org>
> > CommitDate: 2021-02-23 10:16:53 +0000
> >
> > rc: implement parallel boot
> >
> > take advantage of the rcorder -p argument to implement parallel
> > booting in rc.
> >
> > According to the author non scientific tests:
> > on a Core 2 Duo with spinning disk:
> >
> > | Services enabled | before | after | saving |
> > | 0 | 8s | 8s | 0 |
> > | 1 | 13s | 13s | 0 |
> > | 2 | 17s | 13s | 5 |
> > | 3 | 23s | 13s | 10 |
> > | 4 | 28s | 13s | 15 |
> > | 5 | 33s | 13s | 20 |
> >
> > PR: 249192
> > MFC after: 3 weeks
> > ---
> > libexec/rc/rc | 49 ++++++++++++++++++++++++++++++++++---------------
> > 1 file changed, 34 insertions(+), 15 deletions(-)
> >
> > diff --git a/libexec/rc/rc b/libexec/rc/rc
> > index 35db4a850516..722d7fe35884 100644
> > --- a/libexec/rc/rc
> > +++ b/libexec/rc/rc
> > @@ -91,19 +91,31 @@ if ! [ -e ${firstboot_sentinel} ]; then
> > skip_firstboot="-s firstboot"
> > fi
> >
> > +# rc_parallel_start default is "NO"
> > +rc_parallel_start=${rc_parallel_start:-NO}
> > +_rc_parallel=''
> > +# enable rcorder -p if /etc/rc.conf rc_parallel_start is "YES"
> > +checkyesno rc_parallel_start && _rc_parallel='-p'
> > +
> > # Do a first pass to get everything up to $early_late_divider so that
> > # we can do a second pass that includes $local_startup directories
> > #
> > -files=`rcorder ${skip} ${skip_firstboot} /etc/rc.d/* 2>/dev/null`
> > +files=`rcorder ${skip} ${skip_firstboot} ${_rc_parallel} /etc/rc.d/* 2>/dev/
> > null`
> >
> > _rc_elem_done=' '
> > -for _rc_elem in ${files}; do
> > - run_rc_script ${_rc_elem} ${_boot}
> > - _rc_elem_done="${_rc_elem_done}${_rc_elem} "
> > -
> > - case "$_rc_elem" in
> > - */${early_late_divider}) break ;;
> > - esac
> > +IFS=$'\n'
> > +for _rc_group in ${files}; do
> > + IFS=$' '
> > + for _rc_elem in ${_rc_group}; do
> > + run_rc_script ${_rc_elem} ${_boot} &
> > + _rc_elem_done="${_rc_elem_done}${_rc_elem} "
> > +
> > + case "$_rc_elem" in
> > + */${early_late_divider}) break ;;
> > + esac
> > + done
> > + wait
> > + IFS=$'\n'
> > done
> >
> > unset files local_rc
> > @@ -122,14 +134,21 @@ if [ -e ${firstboot_sentinel} ]; then
> > skip_firstboot=""
> > fi
> >
> > -files=`rcorder ${skip} ${skip_firstboot} /etc/rc.d/* ${local_rc} 2>/dev/null
> > `
> > -for _rc_elem in ${files}; do
> > - case "$_rc_elem_done" in
> > - *" $_rc_elem "*) continue ;;
> > - esac
> > -
> > - run_rc_script ${_rc_elem} ${_boot}
> > +files=`rcorder ${skip} ${skip_firstboot} /etc/rc.d/* ${local_rc} ${_rc_paral
> > lel} 2>/dev/null`
> > +IFS=$'\n'
> > +for _rc_group in ${files}; do
> > + IFS=$' '
> > + for _rc_elem in ${_rc_group}; do
> > + case "$_rc_elem_done" in
> > + *" $_rc_elem "*) continue ;;
> > + esac
> > +
> > + run_rc_script ${_rc_elem} ${_boot} &
> > + done
> > + wait
> > + IFS=$'\n'
> > done
> > +unset IFS
> >
> > # Remove the firstboot sentinel, and reboot if it was requested.
> > # Be a bit paranoid about removing it to handle the common failure
> >
>
> Since this commit my postfix, dovecot and nut fail to start at boot, and
> must be started by hand.
>
>
I cannot reproduce, what failure do you have?
Best regards,
Bapt
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/dev-commits-src-all/attachments/20210224/989d5c4e/attachment.sig>
More information about the dev-commits-src-all
mailing list