Планировщик ввода/вывода (I/O scheduler)

Чтобы посмотреть все доступные планировщики в системе и узнать, какой из них активен выполняем:

~ # cat /sys/block/sda/queue/scheduler
noop anticipatory deadline [cfq]

Здесь sda — имя блочного устройства, в данном случе sda. В квадратных скобках указан текущий планировщик.

На гостевых виртуальных машинах вывод команды может быть none. Там роль планировщика выполняет ядро гипервизора и все операции ввода/вывода идут напрямую гипервизору, минуя планировщик гостевой ОС. В этом случае зарегистрированные в системе планировщики можно посмотреть в dmesg:

~ # dmesg | grep -i sched
[    0.213915] io scheduler noop registered
[    0.213929] io scheduler bfq registered (default)
[    0.213930] BFQ I/O-scheduler version: v7r6
[    0.658499] BFS CPU scheduler v0.456 by Con Kolivas.

(default) — планировщик по умолчанию.

Если ядро было собрано с параметром …, то планировщик по умолчанию можно посмотреть в конфигурации ядра. Для извлечения информации обычно используется утилита zcat, поскольку данные сжаты по алгоритму gzip:

~ # zcat /proc/config.gz | grep -i bfq
CONFIG_IOSCHED_BFQ=y
CONFIG_CGROUP_BFQIO=y
CONFIG_DEFAULT_BFQ=y
CONFIG_DEFAULT_IOSCHED="bfq"

В данном случае выводятся параметры ядра для планировщика bfq.

Меняем планировщик ввода/вывода «на лету»:

~ # echo deadline > /sys/block/sda/queue/scheduler

где sda — имя блочного устройства, deadline — планировщик.

Чтобы при загрузке использовался выбранный нами планировщик, необходимо перекомпилировать ядро с требуемыми параметрами или указать его в конфигурации GRUB:

~ # nano /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="elevator=noop"

где noop — выбранный нами планировщик.

После внесения изменений нужно обновить конфигурацию grub (для Gentoo):

~ # grub-mkconfig -o /boot/grub/grub.cfg