Установка нового ядра UEK на Oracle Linux 7.6 и активация I/O Scheduler mq-deadline или kyber

В последних версиях ядра Linux была проделана большая работа по решению проблемы работы дисковой подсистемы с новыми, быстрым блочным устройствам. С выходом Linux ядра версии 4.12 у пользователей появилась возможность использовать несколько новых планировщиков (I/O scheduler) для блочных устройств. Эти планировщики основаны на новом способе передачи запросов — multiqueue block layer (blk-mq).

В этой статье я не буду рассматривать особенности работы новых планировщиков, я лишь расскажу как их включить на Oracle Linux 7.6 с ядром UEK (Unbreakable Enterprise Kernel).

Исходные данные: ОС Oracle Linux 7.6 с ядром 3.10;
Задача: Установить ядра UEK и активация i/o планировщика mq-deadline или kyber

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

Так же на habr.ru недавно вышла статья «Последние изменения в IO-стеке Linux с точки зрения DBA», в ней тоже много полезной информации по IO-стеку в Linux и в частности про blk-mq.

Т.к. у нас установлено ядро 3.10, то новые планировщики нам недоступны. Нам необходимо более свежее Linux ядро, а именно 4.12 или новее. В расширенной сборке ядра Linux от Oracle — UEK (Unbreakable Enterprise Kernel) используется ядро версии 4.14, что вполне нас устроит.

1. Обновление Linux ядра до версии UEK

Проверим включен ли нужный нам репозитарий:

# yum repolist
Loaded plugins: etckeeper, ulninfo
repo id                                        repo name                                                                                           status
epel/x86_64                                    Extra Packages for Enterprise Linux 7 - x86_64                                                      13,235
ol7_UEKR5/x86_64                               Latest Unbreakable Enterprise Kernel Release 5 for Oracle Linux 7Server (x86_64)                       163
ol7_latest/x86_64                              Oracle Linux 7Server Latest (x86_64)                                                                13,094

Нужный нам репозитарий ol7_UEKR5 включен.

Смотрим ограничение на одновременную установку нескольких ядер:

# cat /etc/yum.conf |grep 'installonly_limit'
installonly_limit=3

3 ядра нам может быть маловато, меняем на 10:

# vi /etc/yum.conf
installonly_limit=10

Проверяем:

# cat /etc/yum.conf |grep 'installonly_limit'
installonly_limit=10

Смотрим наличие ядра UEK:

# yum list kernel-uek

Установка ядра UEK:

# yum install kernel-uek

Проверим наличие нового ядра

# ls -lh /boot | grep -E "config-4.|initramfs-4.|vmlinuz-4.|System.map-4."
-rw-r--r--  1 root root 180K Jun 15 07:20 config-4.14.35-1902.2.0.el7uek.x86_64
-rw-------  1 root root  21M Jun 18 15:11 initramfs-4.14.35-1902.2.0.el7uek.x86_64.img
-rw-------  1 root root  13M Jun 18 15:13 initramfs-4.14.35-1902.2.0.el7uek.x86_64kdump.img
-rw-r--r--  1 root root 3.6M Jun 15 07:20 System.map-4.14.35-1902.2.0.el7uek.x86_64
-rwxr-xr-x  1 root root 7.2M Jun 15 07:20 vmlinuz-4.14.35-1902.2.0.el7uek.x86_64

Проверим наличие в ядре включенной опции CONFIG_BLK_WBT_MQ:

# cat /boot/config-4.14.35-1902.2.0.el7uek.x86_64 | grep CONFIG_BLK_WBT_MQ
CONFIG_BLK_WBT_MQ=y

Теперь поменяем I/O Scheduler, для этого в файле /etc/default/grub в параметр GRUB_CMDLINE_LINUX добавим:

scsi_mod.use_blk_mq=1 dm_mod.use_blk_mq=1

Например у меня строка GRUB_CMDLINE_LINUX стала такой:

GRUB_CMDLINE_LINUX="ipv6.disable=1 crashkernel=auto rd.lvm.lv=ol_myserver/root rd.lvm.lv=ol_myserver/swap rhgb quiet transparent_hugepage=never scsi_mod.use_blk_mq=1 dm_mod.use_blk_mq=1"

У Вас она будет другой, не копируйте мою! Но примерный вид опций Вы поняли какой.

Запишем изменения в загрузчик:

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

Теперь перезагрузим сервер.

# reboot

При загрузке в GRUB у нас появится новое ядро, сервер должен загрузиться.

Проверим версию ядра:

# uname -a
Linux myserver 4.14.35-1902.2.0.el7uek.x86_64 #2 SMP Fri Jun 14 21:15:44 PDT 2019 x86_64 x86_64 x86_64 GNU/Linux

Проверим наличие новых I/O Scheduler для диска /dev/sda:

# cat /sys/block/sda/queue/scheduler
[mq-deadline] kyber none

Отлично! По-умолчанию активирован планировщик mq-deadline.

Теперь скорректируем некоторые параметры работы mq-deadline для SSD диска /dev/sda
ВНИМАНИЕ! Перед созданием файла /etc/udev/rules.d/60-schedulers.rules с опциями планировщика Вам нужно убедиться, что в каталоге /etc/udev/rules.d нет уже созданного ранее файла для других планировщиков, иначе в зависимости от последовательности применения файлов у Вас может быть не тот результат который Вы ожидаете. Так же Вам нужно убедиться, что Вы не задавали ранее тип планировщика через файл /etc/default/grub, где в строке GRUB_CMDLINE_LINUX можно указать опцию elevator=XXXXX

echo "ACTION==\"add|change\", KERNEL==\"sda\", ATTR{queue/rotational}==\"0\", ATTR{queue/scheduler}=\"mq-deadline\"" > /etc/udev/rules.d/60-schedulers.rules
echo "ACTION==\"add|change\", KERNEL==\"sda\", ATTR{queue/rotational}==\"0\", ATTR{queue/iosched/fifo_batch}=\"1\"" >> /etc/udev/rules.d/60-schedulers.rules
echo "ACTION==\"add|change\", KERNEL==\"sda\", ATTR{queue/rotational}==\"0\", ATTR{queue/iosched/read_expire}=\"100\"" >> /etc/udev/rules.d/60-schedulers.rules
echo "ACTION==\"add|change\", KERNEL==\"sda\", ATTR{queue/rotational}==\"0\", ATTR{queue/iosched/writes_starved}=\"4\"" >> /etc/udev/rules.d/60-schedulers.rules

Описание всех опций и их назначение для Deadline можно прочитать в официальной документации.

Применим параметры:

udevadm control --reload 
udevadm trigger 

Для включения mq-deadline для всех постоянных дисков нужно поменять первую строку в /etc/udev/rules.d/60-schedulers.rules на

ACTION=="add|change", KERNEL=="sd[a-z]|mmcblk[0-9]*|nvme[0-9]*", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="mq-deadline"

Если Вы хотите выбрать планировщик kyber для всех постоянных дисков, то выполните:

echo "ACTION==\"add|change\", KERNEL==\"sd[a-z]|mmcblk[0-9]*|nvme[0-9]*\", ATTR{queue/rotational}==\"0\", ATTR{queue/scheduler}=\"kyber\"" > /etc/udev/rules.d/60-schedulers.rules

Описание всех опций и их назначение для Kyber можно прочитать в официальной документации.

После внесения изменений не забываем выполнить пару команд udevadm и проверить активацию выбранного планировщика для диска(ов):

udevadm control --reload 
udevadm trigger 
cat /sys/block/sda/queue/scheduler

На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.


Хотите оставить комментарий?