Another speed-up... NUMA Balancing

First, record what your current boot looks like:
sudo systemd-analyze critical-chain # Boot Chain Analysis

sudo echo 1 > /proc/sys/kernel/numa_balancing

In /etc/default/grub, enter:

Reboot, then:
sudo systemd-analyze critical-chain # Boot Chain Analysis

It shaved 3 seconds off my boot time to run level 5 (the desktop), and the desktop comes up quicker with less of a dark-screen lag between the console boot logging and the desktop. I'm now down to 19.621 seconds.

This is Non-Uniform Memory Access balancing... moving code to the node where it's got fastest access to a CPU. Each core of my CPU is a node and the memory is a node, it shuffles things about to get the shortest distance between core and code.

grep NUMA=y /boot/config-'uname -r'

The forum auto-formatting messes that up... don't use the single quote ('), use the slanted single quote (`).


lscpu | grep -i numa
NUMA node(s): 1
NUMA node0 CPU(s): 0-11

Where this really shines is if you've got several servers (such as IBM 3950s) connected together to act as a single server, or a multi-processor server. But even with a single processor (which can enumerate each core as a NUMA node), it helps.

Now that I've got two identical 32 GB memory sticks, the machine does memory interleaving, which provides another speed-up (especially with NUMA enabled). Before, I had one 8 GB card, and one 4 GB card (from the factory), so memory interleaving couldn't take place. @18.244s
└─ @18.243s
  └─networkd-dispatcher.service @12.599s +5.642s
    └─ @12.397s
      └─ @12.397s
        └─zsysd.socket @12.397s
          └─ @12.270s
            └─apparmor.service @11.601s +668ms
              └─ @11.600s
                └─run-user-1000-gvfs.mount @21.900s
                  └─run-user-1000.mount @19.167s
                    └─ @9.589s
                      └─dev-disk-by\x2duuid-21ebe95a\x2dcdd6\x2d40d1\x2db5a2\x2dff44a768b47d.swap @9.580s +6ms
                        └─dev-disk-by\x2duuid-21ebe95a\x2dcdd6\x2d40d1\x2db5a2\x2dff44a768b47d.device @9.578s

And I haven't even gotten my USB ports running at USB 3.1 speeds yet, so the mirrored drives aren't contributing much to boot data throughput. Nor have I gotten the AMD Ryzen 5 5625 U CPU to do TurboBoost yet, so that'll be another speed-up.

Slowly whittling it down... @15.843s
└─udisks2.service @11.516s +4.325s
  └─ @11.317s
    └─ @11.316s
      └─zsysd.socket @11.316s
        └─ @11.222s
          └─apparmor.service @10.638s +583ms
            └─ @10.637s
              └─run-user-1000-gvfs.mount @18.971s
                └─run-user-1000.mount @15.851s
                  └─ @8.987s
                    └─dev-disk-by\x2duuid-21ebe95a\x2dcdd6\x2d40d1\x2db5a2\x2dff44a768b47d.swap @8.979s +6ms
                      └─dev-disk-by\x2duuid-21ebe95a\x2dcdd6\x2d40d1\x2db5a2\x2dff44a768b47d.device @8.978s

[EDIT 2]
Another slight improvement, I disabled ModemManager.service, which one only needs if one is tethering via Bluetooth to their cell phone, using dial-up, etc.

The WiFi hotspot from my cell phone to my computer still works, as does the USB connection. @14.516s
└─udisks2.service @11.091s +3.424s
  └─ @10.922s
    └─ @10.922s
      └─zsysd.socket @10.921s
        └─ @10.830s
          └─apparmor.service @10.236s +592ms
            └─ @10.235s
              └─run-user-1000.mount @16.199s
                └─ @8.883s
                  └─dev-disk-by\x2duuid-21ebe95a\x2dcdd6\x2d40d1\x2db5a2\x2dff44a768b47d.swap @8.856s +24ms
                    └─dev-disk-by\x2duuid-21ebe95a\x2dcdd6\x2d40d1\x2db5a2\x2dff44a768b47d.device @8.854s
1 Like

Have you yet tested

sudo systemctl disable systemd-networkd.service

If it helps, you can make it permanent.

Already disabled.

I'm looking at ways of speeding up udisks2.service:
tput rev;read -p "Package? " in;tput sgr0;sudo dpkg -L $in | xargs which # Show which commands belong to a package

Package? udisks2


... but  udisksctl  is pretty sparse, not a lot to configure there.

I've got 7 physical drives with a total of 17 partitions, so it takes a bit to get them all enumerated.

I'm going to try enumerating all the drives by UUID in fstab, that way udisks2 doesn't have to scan for and enumerate them.

Nope, that actually added 3 seconds to the boot time... best to just let udisks do what it does, I guess.

I set it back to automatically importing most of the drives (except for the EFI boot drive and the 3 swap drives).

Oddly, it's now showing more stuff:
sudo systemd-analyze critical-chain @14.621s
└─udisks2.service @11.308s +3.312s
  └─ @11.141s
    └─ @11.140s
      └─zsysd.socket @11.140s
        └─ @11.066s
          └─apparmor.service @10.515s +550ms
            └─ @10.514s
              └─zfs-mount.service @10.495s +17ms
                └─boot.mount @10.427s +42ms
                  └─ @10.426s
                    └─zfs-import-cache.service @8.955s +1.470s
                      └─zfs-load-module.service @8.942s +2ms
                        └─systemd-udev-settle.service @3.032s +5.704s
                          └─systemd-udev-trigger.service @2.528s +382ms
                            └─systemd-udevd-kernel.socket @2.413s
                              └─system.slice @1.617s
                                └─-.slice @1.617s

Eh, more stuff for me to tweak, I guess.

1 Like