So that others can try sched-ext
with scx_rusty
for themselves, I have built deb packages of kernel 6.6.1 with patches from CachyOS, sched-ext
and BORE.
I built them in the Ubuntu 20.04 environment, so they should work in it, and probably will work in Ubuntu 22.04. Since I don’t use Debian-based Linux distributions, and haven’t dealt with build scripts in them before, I had to look into it. I found the kernel package build scripts in Ubuntu to be confusing and inflexible, not even allowing me to simply change the compiler from GCC to Clang. Using LLVM/Clang>=16 is essential for building additional schedulers (including scx_rusty
). After some “dancing with tambourines” and editing the build scripts, I was able to build the deb packages. If you want to build them yourself (e.g. due to an understandable distrust of my builds), I can provide a set of steps (dances with tambourines). Use these packages at your own risk. Also note that if you use any external kernel modules (e.g. Nvidia drivers), you will need to use their DKMS versions. I am not responsible for this. The link will be valid for a week, but I can provide a new link after that if needed.
This kernel is mostly using the Ubuntu configuration, but with a few differences (besides the previously mentioned patchesets).
The kernel is built with Clang 17;
SCHED_BORE
(BORE) is used;
SCHED_CLASS_EXT
(sched-ext
) is used;
The kernel is built with Full LTO;
BBRv3 and FQ (Fair Queue) are used by default;
PER_VMA_LOCK
is used;
Kernel timer frequency of 100 (instead of 250) is used;
Performance governor is used by default;
Periodic kernel ticks (HZ_PERIODIC
) are enabled;
Disabled kernel preemption (server);
The kernel is built with -O3
;
Here is a general set of steps to install this kernel on Ubuntu 20.04.
Install LLVM 17:
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh 17
Download the archive with the deb packages:
wget --content-disposition https://oshi.at/SnUL
It should save to a file called linux-kernel-cachyos-6.6.1-sched-ext.tar
.
Unzip the archive:
tar -xf linux-kernel-cachyos-6.6.1-sched-ext.tar
Navigate to the directory with the deb packages:
cd deb
And install them:
sudo apt install ./*.deb
You may not need all the packages there, but if you don’t know for sure, install everything.
Install the DKMS versions of the external modules if you haven’t done so before.
After installing the packages, you should have the GRUB configuration automatically updated (if you are using it), but you can do it manually just in case:
sudo update-grub
The output of this command should mention the 6.6.6.1+cachyos-060601
kernel. If it does, you can reboot the machine and select that kernel from the GRUB menu.
You can always select a different kernel from the same menu if you have problems with this one.
After booting into the system, make sure you boot using that particular kernel:
uname -r
If this is the case, you can try using scx_rusty
:
sudo /usr/lib/linux-tools-6.6.1+cachyos-060601/scx_rusty
If lines with scheduler statistics start appearing and the system doesn’t crash, you can use it. The scx_rusty
scheduler can cause system crashes on hybrid processors (e.g., i9 12900K).
You can run scx_rusty
manually (using screen
for example), or through systemd services.
Open the service file:
EDITOR=nano sudo -e /etc/systemd/system/scx_rusty.service
And paste the following contents into it:
[Unit]
Description=Rusty task scheduler
[Service]
User=root
ExecStart=/usr/lib/linux-tools-6.6.1+cachyos-060601/scx_rusty
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Start the service:
sudo systemctl start scx_rusty
And check its status:
sudo systemctl status scx_rusty
If everything works, you can enable it:
sudo systemctl enable scx_rusty
EDIT: Only works on Ubuntu 20.04 and Debian-based distributions with similar package base. Does not work on Ubuntu 22.04 due to unsatisfied dependencies.