Comment by malwrar

Comment by malwrar 3 days ago

8 replies

Why would you want different kernels for different device types?

Genuine question! I maintain my own Linux distro (upstream Linux + portage) for all my devices and haven’t found much reason to go beyond kernel per arch. I’m curious if there’s something I could be missing.

jorvi 3 days ago

Well, for the two examples I named:

vm.swappiness defaults to 60, which is default from when everyone was still running spinning rust with a swap partition. Servers these days usually have very specific storage+memory configurations, whereas the usual desktop or laptop has an SSD and 16GB+ of RAM with RAM compression expanding it.

Lazy RCU loading is good on a laptop because you only lose about 10% performance and only with specific workloads, but your idle and light load energy consumption improves. Most laptops spend like 95%+ in light or idle load scenarios. Conversely, on a desktop you don't care (much) about idle and light load energy consumption, you only care about keeping max load consumption low enough so that your fans stay quiet. And on a workstation you don't care about a system being whisper quiet so you can go nuts with the energy consumption.

  • prmoustache 3 days ago

    > vm.swappiness defaults to 60, which is default from when everyone was still running spinning rust with a swap partition. Servers these days usually have very specific storage+memory configurations, whereas the usual desktop or laptop has an SSD and 16GB+ of RAM with RAM compression expanding it.

    You don't need to compile a specific kernel for that, this is setup via sysctl.

  • jcalvinowens 3 days ago

    > Lazy RCU loading is good on a laptop

    Do you mean RCU_LAZY? Most distros will already enable that: it doesn't do anything without rcu_nocbs, so there's no negative impact on server workloads.

        [calvin@debian-trixie ~] grep RCU_LAZY /boot/config-6.12.57+deb13-amd64
        CONFIG_RCU_LAZY=y
        # CONFIG_RCU_LAZY_DEFAULT_OFF is not set
        [calvin@debian-trixie ~] grep RCU_NOCB_CPU /boot/config-6.12.57+deb13-amd64 
        CONFIG_RCU_NOCB_CPU=y
        # CONFIG_RCU_NOCB_CPU_DEFAULT_ALL is not set
    
    https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/lin...

    You just have to set rcu_nocbs on the kernel cmdline.

  • johnny22 3 days ago

    Swappiness and many others can be changed by some sort of system preset rather built that way. I know not ALL options can be done that way, but I'd want to see changes start there where feasible.

  • malwrar 3 days ago

    I totally missed that part of your comment, my bad. Thanks for elaborating on those, I feel inspired to experiment!

    So far my kernel journey has been about making my hardware work + enabling features, and that’s mostly how I’ve been discovering config options. Do you have any suggestions on where one aught to read further on this sort of kernel tuning?

    EDIT: doing some further research, couldn’t you just set those options via sysctl w/o needing to build a separate kernel?

    • jorvi 2 days ago

      Yes you can adjust them via sysctl or directly as kernel parameter arguments. That isn't my point. My point is that Linux has some horrible defaults :+)

      • malwrar a day ago

        Makes sense! Thanks for turning me on to them, I hadn’t come across those yet in my journey.

embedding-shape 2 days ago

I generally have three types of Linux devices I typically use. My desktop, servers locally/remotely, and "mobile" devices (more like tablets I guess).

For the first, I want the lowest latency for everything I do, together with the highest burstable speed whenever possible, for pretty much all the components.

For the servers, I basically have two types, one which does storage, they just need large disks that can be slow, and one which users actually connect to, that one needs focus on throughput, latency and performance isn't as important as "can serve all requests in a reasonable timeframe, even under load".

Finally, many of the portable devices run on batteries, so on those the focus is power-saving, even if it compromises on performance.

I'm sure others out there have more device types, like ultraweight watches, security devices, monitors, radios and much more. Each one of these have different tradeoffs, and tuning the kernel and OS for each use case makes it a lot better usually. Personally I use NixOS for everything except my desktop (CachyOS right now!), and it makes it really trivial to create profiles based on the same configuration, deployed to all devices, and today they're are tuned for exactly their purpose, as Linus intended :)