Kyber io scheduler for nvme

cachyos has announced that they will start using kyber as the default io scheduler for nvme.

That made me dig into this topic a little deeper. I always used io scheduler “none” for nvme or ssd. But it looks like that kyber has some benefits for fast nvme. I found this interesting article:

In the conclusion they say:

"In this paper, we investigate if the Linux I/O schedulers fit modern
NVMe SSDs. Our results show that BFQ and MQ-Deadline have
significantly high CPU overhead and scalability issues caused by
locking. Thus, we suggest that BFQ and MQ-Deadline should not
be used with these SSDs. Kyber has lower CPU overhead than BFQ
and MQ-Deadline with near-linear scalability and thus is the best fit
of these SSDs. However, the parameters of Kyber need to be tuned
carefully or Kyber harms the performance."

I am not yet clear which kyber parameters they are talking about, but I have decided to give it a try.

I am just throwing this out here for anybody who is interested.

I can’t imagine I will notice the difference, but I swapped over to kyber, and so far haven’t noticed the difference :rofl:

As is tradition. Cachy changing the I/O scheduler once in a while. Two years ago it was already Kyber, then they changed it to None, now it’s Kyber again.

It’s a little bit of a joke right now. Cachy does good things, don’t get me wrong, but honestly, on some aspects of their performance seeking journey they miss the goal and act … silly.

I am not so sure if they are missing the goal here. From what I have read so far kyber is a very good - probably the best - low latency io scheduler for nvme devices.

The liquorix kernel is doing the same by the way:

"Optimized Disk I/O: Uses Kyber for multiqueue devices and BFQ for single queue devices, providing best responsiveness under high IO."

And pop!_os is doing the same:

any advice about how to configure this scheduler, the linked paper talks about tuning? or I should copy the one from cachyos?

You could just copy the Cachy rules if the same behavior is desired. That’s just how you dial in those changes, see also e.g. https://wiki.archlinux.org/title/Improving_performance#Changing_I/O_scheduler