Установка нового ядра 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:

sed 's/installonly_limit=3/installonly_limit=10/g' /etc/yum.conf

Проверяем:

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-[45].|initramfs-[45].|vmlinuz-[45].|System.map-[45]."

Вывод:

-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/iosched/fifo_batch}=\"1\"" >> /etc/udev/rules.d/60-schedulers.rules
echo "ACTION==\"add|change\", KERNEL==\"sda\", ATTR{queue/iosched/read_expire}=\"100\"" >> /etc/udev/rules.d/60-schedulers.rules
echo "ACTION==\"add|change\", KERNEL==\"sda\", ATTR{queue/iosched/writes_starved}=\"4\"" >> /etc/udev/rules.d/60-schedulers.rules

Обратите внимание, что в первой строке мы меняем 2 атрибута — /sys/block/sda/queue/rotational и /sys/block/sda/queue/scheduler
Изменение параметров строками ниже (queue/iosched/fifo_batch и т.д.) приведено в качестве примера, не копируйте мои значения если Вы не знаете их назначение.
Описание всех опций и их назначение для Deadline можно прочитать в официальной документации.

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

udevadm control --reload-rules
udevadm trigger --type=devices --action=change

Для включения mq-deadline для всех постоянных SSD-дисков нужно поменять первую строку в /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 для всех постоянных SSD-дисков, то выполните:

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-rules
udevadm trigger --type=devices --action=change
cat /sys/block/sda/queue/scheduler

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


Подписаться
Уведомить о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x