The next version of Debian will support boot scripts in parallel by default
Another small step in the improvement of the Debian boot system was taken last weekend, when sysvinit version 2.88dsf-5 was uploaded. It concluded an almost 8 year effort to get the Debian boot system to run boot scripts in parallel. Parallel booting is enabled by default in unstable at the moment, and will enter testing in some days, unless a serious problem is found.
Running init.d scripts in parallel was proposed at Debconf in 2002, and I started working on it early in 2005 after finding the insserv package from SuSe capable of reordering the boot sequence based on dependency information header information contained in each init.d script. The header format is specified in the Linux Software Base (LSB). Getting this to work required us to add a header to all init.d scripts in Debian, affecting around 850 packages in the archive. This was a release goal for Lenny, and enabling dependency based boot sequencing using these headers has been possible for some years now. Dependency based boot sequencing was enabled by default in unstable and testing in last July, and the quality of the init.d script dependencies have improved as a result of this.
The next natural step is to use the dependency information to run the scripts in parallel, and this is now enabled when the machine uses dependency based boot sequencing.
There is still more work left to do. Here are some issues I want to see implemented:
* The early boot system needs to trigger based on kernel events, to make sure the devices needed (as in USB or SCSI hard drives to be mounted at boot) are available when fsck needs them. The most promising candidate for this is upstart, but the newcomer systemd looks interesting too.
* Several of the scripts currently started from /etc/rcS.d/ should be moved to /etc/rc[1-5].d/ to improve the single user mode in Debian, but also to increase the amount of concurrency during boot.
* Shutdown speed can be improved by removing scripts which only kill their daemon from /etc/rc.d/ and leaving it to the sendsigs script to kill all of them at the same time instead.
Petter Reinholdtsen, on behalf of
The sysvinit maintainers