Date: Wed, 24 Feb 2021 05:48:11 -0800 From: Cy Schubert <Cy.Schubert@cschubert.com> To: Baptiste Daroussin <bapt@FreeBSD.org> Cc: Cy Schubert <Cy.Schubert@cschubert.com>, src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: Re: git: 77e1ccbee3ed - main - rc: implement parallel boot Message-ID: <202102241348.11ODmB3X003509@slippy.cwsent.com> In-Reply-To: <20210224092047.qjazicrzfvnf4vb2@aniel.nours.eu> References: <202102231027.11NARYYE041280@gitrepo.freebsd.org> <202102240105.11O15bKn096987@slippy.cwsent.com> <20210224092047.qjazicrzfvnf4vb2@aniel.nours.eu>
next in thread | previous in thread | raw e-mail | index | archive | help
In message <20210224092047.qjazicrzfvnf4vb2@aniel.nours.eu>, 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 <202102231027.11NARYYE041280@gitrepo.freebsd.org>, 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 <unitrunker@gmail.com> > > > AuthorDate: 2021-02-07 06:15:21 +0000 > > > Commit: Baptiste Daroussin <bapt@FreeBSD.org> > > > 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. -- Cheers, Cy Schubert <Cy.Schubert@cschubert.com> FreeBSD UNIX: <cy@FreeBSD.org> Web: https://FreeBSD.org NTP: <cy@nwtime.org> Web: https://nwtime.org The need of the many outweighs the greed of the few.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202102241348.11ODmB3X003509>