site  contact  subhomenews

Kernel 4.14.7 with deadline io scheduler builtin

December 21, 2017 — BarryK

The last release of Easy and Quirky use the cfq i/o scheduler. I think that this is what most distros use. However, this web page advises that the deadline i/o scheduler is preferable for flash memory (which includes USB-sticks, SD-cards and SSDs):

http://tombuntu.com/index.php/2008/09/04/four-tweaks-for-using-linux-with-solid-state-drives/

Easy is built with /etc/rc.d/BOOTCONSTRAINED which has this entry:

BOOT_SCHEDULER='deadline'

At bootup, /etc/rc.d/rc.sysinit reads this variable, and executes this, where $PDEV is the drive (ex: sda) that Easy is installed in:

    echo $BOOT_SCHEDULER > /sys/block/${PDEV}/queue/scheduler
    echo 1 > /sys/block/${PDEV}/queue/iosched/fifo_batch
Good, except that it doesn't work, as the deadline scheduler is a kernel module, that hasn't been loaded. The module is deadline-iosched.ko, and this could be explicitly loaded, however, I decided to recompile the kernel with this driver builtin.

Grabbed latest kernel source, 4.14.7, and here it is, with patches and build scripts:

http://distro.ibiblio.org/easyos/source/kernel/4.14.7/

The PET (31.4MB):

http://distro.ibiblio.org/easyos/amd64/packages/pet/pet_packages-pyro/linux_kernel-4.14.7-pyro64.pet

Source SFS (153.4MB):

http://distro.ibiblio.org/easyos/amd64/packages/sfs/pyro/kernel_src-4.14.7-patched.sfs

The configuration was at "Enable the block layer -> IO schedulers"

I am running with the deadline scheduler right now, booted from a USB-stick which is sdc. This confirms (the square brackets show the current selection):
# cat /sys/block/sdc/queue/scheduler
noop [deadline] cfq
There are some other issues with that /etc/rc.d/BOOTCONSTRAINED that I need to look at.

Tags: easy