24 févr. 2021 14:48:29 Cy Schubert <[email protected]>: > In message <[email protected]>, Baptiste > Daroussin > writes: >> >> >> --7stizekjxx47ph24 >> Content-Type: text/plain; charset=us-ascii >> Content-Disposition: inline >> Content-Transfer-Encoding: quoted-printable >> >> On Tue, Feb 23, 2021 at 05:05:37PM -0800, Cy Schubert wrote: >>> In message <[email protected]>, Baptiste=20 >>> Daroussi >>> n writes: >>>> The branch main has been updated by bapt: >>>> >>>> URL: https://cgit.FreeBSD.org/src/commit/?id=3D77e1ccbee3ed6c837929e4e2= >> 32fd07f9 >>>> 5bfc8294 >>>> >>>> commit 77e1ccbee3ed6c837929e4e232fd07f95bfc8294 >>>> Author: Rick Parrish <[email protected]> >>>> AuthorDate: 2021-02-07 06:15:21 +0000 >>>> Commit: Baptiste Daroussin <[email protected]> >>>> CommitDate: 2021-02-23 10:16:53 +0000 >>>> >>>> rc: implement parallel boot >>>> =20 >>>> take advantage of the rcorder -p argument to implement parallel >>>> booting in rc. >>>> =20 >>>> According to the author non scientific tests: >>>> on a Core 2 Duo with spinning disk: >>>> =20 >>>> | 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 | >>>> =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=3D"-s firstboot" >>>> fi >>>> =20 >>>> +# rc_parallel_start default is "NO" >>>> +rc_parallel_start=3D${rc_parallel_start:-NO} >>>> +_rc_parallel=3D'' >>>> +# enable rcorder -p if /etc/rc.conf rc_parallel_start is "YES" >>>> +checkyesno rc_parallel_start && _rc_parallel=3D'-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=3D`rcorder ${skip} ${skip_firstboot} /etc/rc.d/* 2>/dev/null` >>>> +files=3D`rcorder ${skip} ${skip_firstboot} ${_rc_parallel} /etc/rc.d/*= >> 2>/dev/ >>>> null` >>>> =20 >>>> _rc_elem_done=3D' ' >>>> -for _rc_elem in ${files}; do >>>> - run_rc_script ${_rc_elem} ${_boot} >>>> - _rc_elem_done=3D"${_rc_elem_done}${_rc_elem} " >>>> - >>>> - case "$_rc_elem" in >>>> - */${early_late_divider}) break ;; >>>> - esac >>>> +IFS=3D$'\n' >>>> +for _rc_group in ${files}; do >>>> + IFS=3D$' ' >>>> + for _rc_elem in ${_rc_group}; do >>>> + run_rc_script ${_rc_elem} ${_boot} & >>>> + _rc_elem_done=3D"${_rc_elem_done}${_rc_elem} " >>>> + >>>> + case "$_rc_elem" in >>>> + */${early_late_divider}) break ;; >>>> + esac >>>> + done >>>> + wait >>>> + IFS=3D$'\n' >>>> done >>>> =20 >>>> unset files local_rc >>>> @@ -122,14 +134,21 @@ if [ -e ${firstboot_sentinel} ]; then >>>> skip_firstboot=3D"" >>>> fi >>>> =20 >>>> -files=3D`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=3D`rcorder ${skip} ${skip_firstboot} /etc/rc.d/* ${local_rc} ${_= >> rc_paral >>>> lel} 2>/dev/null` >>>> +IFS=3D$'\n' >>>> +for _rc_group in ${files}; do >>>> + IFS=3D$' ' >>>> + 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=3D$'\n' >>>> done >>>> +unset IFS >>>> =20 >>>> # Remove the firstboot sentinel, and reboot if it was requested. >>>> # Be a bit paranoid about removing it to handle the common failure >>>> >>> =20 >>> Since this commit my postfix, dovecot and nut fail to start at boot, and= >> =20 >>> must be started by hand. >>> =20 >>> =20 >> I cannot reproduce, what failure do you have?=20 > > It was a missing unset IFS and it's been fixed. > >
Thank you for the fix and sorry about that! Bapt _______________________________________________ [email protected] mailing list https://lists.freebsd.org/mailman/listinfo/dev-commits-src-main To unsubscribe, send any mail to "[email protected]"
