Tuesday, 10 September 2019
Boot speed improvements for Ubuntu 19.10 Eoan Ermine
Generally speaking, the smallest (best) compression takes longer to decompress due to the extra complexity in the compression algorithm. Thus we have a trade-off between load time vs decompression time.
For slow rotational media (such as a 5400 RPM HDD) with a slow CPU the loading time can be the dominant factor. For faster devices (such as a SSD) with a slow CPU, decompression time may be the dominate factor. For devices with fast 7200-10000 RPM HDDs with fast CPUs, the time to seek to the data starts to dominate the load time, so load times for different compressed kernel sizes is only slightly different in load time.
The Ubuntu kernel team ran several experiments benchmarking several x86 configurations using the x86 TSC (Time Stamp Counter) to measure kernel load and decompression time for 6 different compression types: BZIP2, GZIP, LZ4, LZMA, LZMO and XZ. BZIP2, LZMA and XZ are slow to decompress so they got ruled out very quickly from further tests.
In compression size, GZIP produces the smallest compressed kernel size, followed by LZO (~16% larger) and LZ4 (~25% larger). With decompression time, LZ4 is over 7 times faster than GZIP, and LZO being ~1.25 times faster then GZIP on x86.
In absolute wall-clock times, the following kernel load and decompress results were observed:
Lenovo x220 laptop, 5400 RPM HDD:
LZ4 best, 0.24s faster than the GZIP total time of 1.57s
Lenovo x220 laptop, SSD:
LZ4 best, 0.29s faster than the GZIP total time of 0.87s
Xeon 8 thread desktop with 7200 RPM HDD:
LZ4 best, 0.05s faster than the GZIP total time of 0.32s
VM on a Xeon 8 thread desktop host with SSD RAID ZFD backing store:
LZ4 best, 0.05s faster than the GZIP total time of 0.24s
Even with slow spinning media and a slow CPU, the longer load time of the LZ4 kernel is overcome by the far faster decompression time. As media gets faster, the load time difference between GZIP, LZ4 and LZO diminishes and the decompression time becomes the dominant speed factor with LZ4 the clear winner.
For Ubuntu 19.10 Eoan Ermine, LZ4 will be the default decompression for x86, ppc64el and s390 kernels and for the initramfs too.
References:
Analysis: https://kernel.ubuntu.com/~cking/boot-speed-eoan-5.3/kernel-compression-method.txt
Data: https://kernel.ubuntu.com/~cking/boot-speed-eoan-5.3/boot-speed-compression-5.3-rc4.ods
Thursday, 29 October 2009
Vista, Windows 7, Ubuntu 9.04 and 9.10 boot speed comparison
Sunday, 14 June 2009
Does pre-linking speed up boot times?
Pre-linking binaries is a method of modifying ELF libraries so that the relocation link time overhead is performed not at load time and hence theoretically speeding up program start time (see the Wikipedia entry for more details).
To test this, I installed Karmic 9.10 Alpha 2 on a Dell Inspiron 6400 laptop using ext4 as my default file system and added some instrumentation to measure the time from when the first rc scripts are started to the time the desktop completes loading when auto-logging in.
First, I measured the startup time 5 times without prelinking; this came to an average of 16.397 seconds with a standard deviation of 0.21 seconds.
Next I installed prelink and pre-linked all the system libraries (which takes ~5 minutes) using the following recipe:
- apt-get install prelinkuse apt-get or synaptic to install prelink.
- Open /etc/default/prelink with your favorite editor, using sudo
- Modify PRELINKING=unknown from unknown to yes
- Start the first prelink by running: sudo /etc/cron.daily/prelink
So I am seeing tiny ~0.33% speed up of 0.054 seconds which is within the margin of measuring error. All in all this took me ~1.5 hours to set up and measure, which means that if I boot my laptop once a day it will take me 274 years before I start saving time :-)
All in all it's not really worth enabling prelinking. At least I now know!
(Note: pre-linking may be considered a security issue, as Ubuntu makes use of randomizing the start of code to make it more difficult for rogue programs to exploit.)
I suspect that if the processor was significantly slower and there was less I/O delay (perhaps using SSD rather than HDD) I may actually see more of a significant speed up since prelinking saves some CPU cycles. I speculate that prelinking may be therefore worth considering on lower speed or less powerful platforms such as ARM or Intel Atom based machines.
The next test will be to see if large applications that use tens of libraries start up faster...