On Thu, Mar 22, 2012 at 09:14:56PM +0200, Marti Raudsepp wrote: > Hi list, Hi Marti, > I was recently pondering how systemd could use kexec "properly", in a > reasonably general way, to make reboots faster. I exchanged an email > with Poettering on the systemd list and he suggested me to ask here. > > My current proposal: > 1. Include a template 'kexec-load.service' with kexec-tools, which > distros/users could customize to load the right kernel and initrd via > /sbin/kexec > > 2. If the user does 'systemctl enable kexec-load.service', then this > service would trigger before every reboot. Loading the kernel any > earlier would waste memory (5+14 MB on Ubuntu Server). Also a common > reason for rebooting is to boot into a newly-installed kernel. Loading > it any earlier would boot you into an older kernel. > > 3. During a reboot, after systemd has finished shutting down, it > detects via /sys/kernel/kexec_loaded whether the kexec kernel is > loaded. If 1, it performs a 'kexec -e'. If not, it does a normal > reboot. > > ---- > > Lennart commented on #2 that kexec might have problems finding > contiguous memory to load the kernel into, this late in the lifecycle. > Do you think this is a deal-breaker for such a feature? If it's rare > enough, then it might not be a problem -- we can always fall back to a > normal reboot. In general kexec doesn't store the kernel in contiguous memory at load-time. Rather, when kexec -e is called the kernel is copped from (most likely) discontiguous pages) into its destination location. > I'm also assuming that "kexec --load" will fail atomically -- that it > won't try to boot a half-loaded kernel, or boot a kernel whose initrd > failed to load. Yes, that is correct. However, I speculate that there is a greater chance of the boot of a kexeced kernel failing than the same kernel booting by more conventional means on the same hardware. Primarily because there are most likely shutdown/boot paths, especially in drivers, that have not been well exercised. So while it may work well on some hardware, perhaps even most hardware, I suspect there are cases where it will fail. I guess that is where systemctl enable/disable kexec-load.service comes into play. > Also, #3 doesn't yet work that way in systemd (currently it detects > before shutdown) and Poettering hasn't agreed yet. > > Does this proposal seem sane to kexec folks? Did I miss anything? If it is desirable to use kexec as a reboot mechanism then from a kexec point of view I think your proposal makes sense.