Thanks for sharing this.  It worked great for me on FreeBSD as well with 
minimal services, and does indeed make a difference.  It blew up on PCBSD which 
has many more services running out of box.  I also noticed /tmp/init has to be 
removed manually in some cases when boot hangs.  Very impressive otherwise.

Joe Maloney

> On Oct 16, 2015, at 1:37 PM, Cyril Vechera <[email protected]> wrote:
> 
> On 10/16/2015 07:06 PM, Mark Felder wrote:
>> On Fri, Oct 2, 2015, at 11:08, Cyril Vechera wrote:
>>> Hi there.
>>> 
>>> We've got a small launcher script (~250 loc) for parallel services
>>> start/stop etc. It is used on our embedded systems and our users
>>> containers. And I've done a proof of concept for implanting it to the
>>> FreeBSD's standard /etc/rc for execution starting scripts in parallel.
>>> It gave me a boot time reduction of rc part from 27 to 7 seconds, mostly
>>> on eliminating jams for network or other long-latency resources waiting.
>>> 
>>> The launcher is written in pure POSIX shell and uses FIFOs (named pipes)
>>> as a mutexes for synchronization. So it is embedded into /etc/rc and
>>> /etc/rc.d preserving rc.subr preloading. As a primary requirement, it
>>> guarantees topological order (strict partial order) defined by
>>> dependencies. It requires only POSIX shell, FreeBSD or Linux kernel,
>>> mkfifo and a writeable file system. Due to last requirement, it can be
>>> run on the late stage or should be supplied by some kinf of writtable
>>> fs, ie tmpfs. The FreeBSD-integrated version uses standard rcorder
>>> annotations (REQUIRE, BEFORE and PROVIDE) and there's no need to change
>>> rc.d scripts
>>> 
>>> It's not a full init replacement or a kind of services supervision tool.
>>> It only starts or invokes a group of scripts in parallel with resolving
>>> and assuring execution in dependencies order.
>>> 
>>> Please take a look at the script and patch set for FreeBSD:
>>> 
>>> https://github.com/cvss/jet9-multitask-init/blob/master/jet9-multitask-init
>>> https://github.com/cvss/jet9-multitask-init/tree/master/examples/freebsd
>>> 
>>> 
>> Your first link is a 404, but this looks really nice!
> 
> In the last commit (v1.3.0) I've renamed 'jet9-multitask-init' to 
> 'jet9-multitask-flow' to avoid confusion with naming, because it's not as it 
> seems, from name, an init replacement, but just a parallel task launcher. And 
> now the actual repository URL is https://github.com/cvss/jet9-multitask-flow 
> <https://github.com/cvss/jet9-multitask-flow>
> 
> In this commit I've complete the FreeBSD compatibility. Now a script or 
> dependency name can include minuses `-` and dots `.` (the first stone I 
> stumbled over was ftp-proxy).  And I've cleaned up the main script code 
> https://github.com/cvss/jet9-multitask-flow/jet9-multitask-flow 
> <https://github.com/cvss/jet9-multitask-flow/jet9-multitask-flow> and have 
> split it to more functions that can be redefined. So it's now easier to 
> rewrite dependency extraction for FreeBSD rc-scripts - current implementation 
> is too rough and takes three 'awk' runs for each rc-script. The last is not 
> only time loss, but as DMarck mentioned before, using awk restricts parallel 
> rc to be run only after FILESYSTEMS stage is done. Maybe it would be better 
> to add to the rcorder(8) some new option to dump the gathered dependencies in 
> tsort-compatible listing and insert them directly to flow execution plan.
> 
> I've also added rc.conf variable `rc_parallel` to turn on and off parallel 
> execution. There's a risk to discover an incomplete dependency annotations in 
> some rc-scripts that earlier were masked by serial execution. I've done some 
> checks by enabling as much rc.conf variables as possible to start more 
> rc-scripts, and didn't found any error. But it looks too good to be true and 
> I'm afraid that it's just to poor testing. I think if some ordering conflict 
> will be found, it could be worked-around with introducing a white-list for 
> script names that must be run only in sequentially.
> 
> So it remained first to check if it really works in different conditions.
> 
> 
> 
> 
> -- 
> Cyril Vechera
> 
> _______________________________________________
> [email protected] <mailto:[email protected]> mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-hackers 
> <https://lists.freebsd.org/mailman/listinfo/freebsd-hackers>
> To unsubscribe, send any mail to "[email protected] 
> <mailto:[email protected]>"

_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-rc
To unsubscribe, send any mail to "[email protected]"

Reply via email to