/mkmm

Moviuro's Kernel Module Manager intended to be used in an alpm-hook(5) to save and restore the running kernel's modules

Primary LanguageShellMIT LicenseMIT

What is it about?

mkmm -h

List the package files

pacman -Ql mkmm

The hooks

Hardlinks

These hooks will use hardlinks to backup and restore kernel modules. This should be fast on modern hardware (SSD).

Read more about links: ln(1), link(2). Hardlinks use very limited disk space (only inodes, no new data storage); however they are persistent and need to be cleaned up with mkmm bleach after a reboot, when the modules are no longer needed (thus, the systemd service).

# hyperfine --prepare='./mkmm clean && sleep 10' './mkmm save'
Benchmark #1: ./mkmm save
  Time (mean ± σ):     518.2 ms ±  82.6 ms    [User: 297.6 ms, System: 250.0 ms]
  Range (min … max):   402.1 ms … 691.3 ms    10 runs
# hyperfine --prepare='rm -rf /usr/lib/modules/5.11.13-1-ck-skylake && sleep 10' './mkmm restore'
Benchmark #1: ./mkmm restore
  Time (mean ± σ):     583.1 ms ± 112.8 ms    [User: 332.1 ms, System: 284.2 ms]
  Range (min … max):   406.6 ms … 756.0 ms    10 runs
# cd /etc/pacman.d/hooks
# ln -s /usr/share/mkmm/10-mkmm-pre.hook
# ln -s /usr/share/mkmm/10-mkmm-post.hook
# systemctl enable mkmm-bleach.service

tmpfs

tmpfs(5) are temporary filesystems that live in RAM. We can use them to store the modules but this will required permanent RAM usage until the machine reboots (anywhere from 140 to 300MB). "Restoring" the modules is much faster though (create a directory, mount a FS).

# hyperfine --prepare='./mkmm clean && sleep 10' './mkmm tsave'
Benchmark #1: ./mkmm tsave
  Time (mean ± σ):     566.6 ms ±  44.3 ms    [User: 344.0 ms, System: 286.4 ms]
  Range (min … max):   513.9 ms … 666.0 ms    10 runs
# hyperfine --prepare='./mkmm tsave && umount /usr/lib/modules/5.11.13-1-ck-skylake && rmdir /usr/lib/modules/5.11.13-1-ck-skylake && sleep 10' './mkmm trestore'
Benchmark #1: ./mkmm trestore
  Time (mean ± σ):      26.0 ms ±   6.4 ms    [User: 25.2 ms, System: 3.3 ms]
  Range (min … max):    12.9 ms …  29.4 ms    10 runs
# cd /etc/pacman.d/hooks
# ln -s /usr/share/mkmm/10-mkmm-tmpfs-pre.hook
# ln -s /usr/share/mkmm/10-mkmm-tmpfs-post.hook
# systemctl enable mkmm-bleach.service