In message <202102231027.11naryye041...@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 <unitrun...@gmail.com>
> AuthorDate: 2021-02-07 06:15:21 +0000
> Commit:     Baptiste Daroussin <b...@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.


-- 
Cheers,
Cy Schubert <cy.schub...@cschubert.com>
FreeBSD UNIX:  <c...@freebsd.org>   Web:  https://FreeBSD.org
NTP:           <c...@nwtime.org>    Web:  https://nwtime.org

        The need of the many outweighs the greed of the few.



_______________________________________________
dev-commits-src-main@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-main
To unsubscribe, send any mail to "dev-commits-src-main-unsubscr...@freebsd.org"

Reply via email to