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

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


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

avatar
1000

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

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