Планировщик bfq linux mint 19

Планировщик ввода / вывода BFQ лучше

Помимо атомарных операций KMS для пользователей рабочей станции Linux недавно завезли еще одно полезное новшество — планировщик подсистемы ввода и вывода BFQ (Budget Fair Queue). Он является усовершенствованием дефолтного CFQ (Completely Fair Queue), дебютировал аж 9 лет назад, но только в версии 4.12 попал в основную ветку.

Прежде чем поговорить о принципах работы планировщика ознакомьтесь с демо-роликом разработчика Paolo Valente, это добавит вам мотивации продолжить. На снимке экрана показан замер старта проигрывателя с 10 фоновыми задачами читать файл с диска для двух планировщиков: CFQ и BFQ. Угадайте, который из них так и не стартовал при такой нагрузке?

Теперь вкратце об алгоритме. Так же как в CFQ синхронные запросы группируются в очередях по задачам, а асинхронные — по устройствам. Затем BFQ для новых задач преобразует простой планировщик Round Robin, основанный на временных отметках, так, что алгоритм берет за основание бюджеты, в которых мерой служат дисковые сектора. В зависимости от характера и поведения задачи бюджет может изменяться, а BFQ гарантирует, что поток дисковых данных будет адекватно распределяться между задачами.

BFQ в каждый данный момент работает лишь с одной задачей. Когда драйвер устройства готов обслуживать следующую задачу, алгоритм запрашивает из очереди первую в порядке заданном C-LOOK и передает ее на исполнение драйверу.

Бюджетная политика планировщика

Давайте рассмотрим более подробно отдельные аспекты алгоритма в псевдокоде. Функция add_request доавляет в очередь новый запрос R и если других запросов не поступило, то на этом все.

Логическая схема планировщика.

На диаграмме стрелы указывают на путь, от запроса до дискового устройства, а эллипсы — алгоритмы и операции.

Функция dispatch возвращает значение no request , если все приложения бездействуют, или активное приложение ожидает поступление следующего запроса. С другой стороны, приложение выводится из списка, если не успевает выполнить запрос в отведенный ей бюджет. Вызов функции b−wf2q+update_vfintime обновляет временные метки приложения так, чтобы учитывалось только полезное время, в течении которого обрабатывались запросы. Тот факт, что приложение не сумело обнулить очередь запросов, означает что пакет запросов превышал отведенный бюджет. Стало быть бюджет надо увеличить на заданную величину, которая не превышает некоторый пороговый уровень Bi,max.

Далее, приложение с новым бюджетом попадает в планировщик B-WF 2 Q+. Если теперь активных приложений не осталось из очереди планировщика B-WF 2 Q+ берется следующее и все по новой — для активного приложения очередной запрос R берется из вереницы подобных и ему присваивается бюджет.

Наконец очередь активного приложения исчерпана. Новый таймер устанавливается равным текущему времени + Twait, в случае отсутствия новых запросов в дело вступает функция timer_expiration . Приложению объявляется простаивающим и новый получает новый бюджет равный предыдущему.

Стоит еще упомянуть о внутренних алгоритмах: C-LOOK B-WF 2 Q+.

  • C-LOOK (Circular LOOK) является планировщиком диска, в котором головка диска двигается от одного конца к другому, обслуживая поступившие запросы. Затем после последнего запроса, меняет направление на противоположное, не достигнув финиша в отличие от алгоритма C-SCAN.
  • B-WF 2 Q+ адаптированный для блочных устройств вариант планировщика пакетов WF 2 Q+. Алгоритм Weighted Fair Queue позволяет задать каждому потоку свой приоритет, или вес, пропорционально которому выделяется часть канала.

Так в чем же дело?

Тут следует разместить картинку Боромира, который с раздражением пытается сказать, что нельзя просто взять и добавить планировщик в основную ветку Linux ядра. Помимо вылизанного до зеркально блеска кода тут нужно терпение и продвинутые социальные навыки коммуникации. Нет никаких осязаемых причин из-за которых следовало так долго мариновать BFQ и остается лишь аплодировать непреклонной настойчивости его автора. Официальной причиной отказа принять новый лучший планировщик было отсутствие поддержки нового multiqueue API, так как BFQ умел только в предшествующее API блочных устройств. Благо на помощь пришел Йенс Эксбое (Jens Axboe) — мейнтейнер multiqueue API, и вместе они сумели добиться нужного результата.

Читайте также:  C windows system32 winhttp dll

Старт приложения gnome-terminal на Hitachi HDD (меньшее — лучше).

На данный момент пользователи этих дистрибутивов могут спокойно смотреть фильмы во время копирования файла с флешки, распаковки большого архива и прочих требовательных к ресурсам I/O операциях. В них планировщик BFQ используется по умолчанию.

Производительность на Hitachi HDD (большее — лучше).

По выбору, планировщик BFQ доступен в:

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

Далее после перезагрузки проверить наличие требуемого планировщика.

Источник

Справочная информация

про свой опыт решения некоторых проблем и использования ряда возможностей ОС и приложений

вторник, 15 мая 2018 г.

Улучшить отзывчивость интерфейса при тяжелых дисковых операциях в Linux Mint и Ubuntu

Публикация описывает личный опыт применения изложенных на форуме рекомендаций участника с ником slant под заголовком «Mint 18 c ядром 4.13+ – переходим на bfq (улучшаем отзывчивость интерфейса при тяжелых дисковых операциях)». Теоретическое обоснование заимствовано из указанного выше источника. Некоторые речевые обороты изменены.

Представьте, что у вас две программы хотят одновременно читать или писать на диск. Какой из них дать преимущество? А что будет в это время делать вторая? За эти вопросы в системе отвечает так называемый планировщик дисковых операций (ввода-вывода) – подробности.

В Linux Mint по умолчанию используется планировщик cfq, доступны также deadline и none. В принципе, cfq справляется, но бывают случаи, когда система всё же «встаёт колом» – например при копировании с накопителей «флэш», или по гигабитной сети, особенно если диски hdd и не слишком «шустрые».

С целью решения этой проблемы создан планировщик bfq, который способствует гарантированному доступу к диска каждого из процессов, осуществляя управление ресурсами в очереди запросов ввода-вывода.

То есть при интенсивных дисковых операциях «тормоза» в графическом окружении должны уйти в прошлое, что может способствовать повышению скорости запуска программ и снижению нагрузки на жёсткий диск. Основное преимущество использования этого планировщика проявляется в сценарии «параллельный доступ к множеству мелких файлов на hdd». Для SSD, по словам авторов алгоритма, его применение также будет эффективно.

В настройках в Linux Mint и Ubuntu всё связанное с этим планировщиком полностью выключено. А вот пользователи Manjaro наслаждаются его возможностями «из коробки». Как пишет автор, «будем исправлять несправедливость».

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

Внимание. Для осуществления настройки необходимо наличие ядра 4.13 или новее. Для определения действующей версии ядра запустите uname -r

В процессе осуществления настройки потребуется 2 перезагрузки системы.

Примечание. По тексту для редактирования конфигурационных файлов указана команда sudo xed , так как экспериментальная проверка произведена на Linux Mint. В Ubuntu тестового редактора xed не существует и вместо него используется gedit . Поэтому пользователям Ubuntu вместо sudo xed следует вводить sudo gedit . По устоявшейся ещё с ранней Ubuntu привычке в своей системе всегда ввожу sudo gedit, а для сопоставления команде gedit команды xed был использован материал этой публикации.

1. Включить в ядре поддержку bfq , запустив sudo xed /etc/default/grub и добавив в строку GRUB_CMDLINE_LINUX_DEFAULT параметр scsi_mod.use_blk_mq=1

Например,
GRUB_CMDLINE_LINUX_DEFAULT=»quiet splash scsi_mod.use_blk_mq=1″

2. sudo update-grub && shutdown -r now

3. sudo modprobe bfq && sudo xed /etc/udev/rules.d/60-scheduler.rules

Так как изначально файл 60-scheduler.rules в системе отсутствует, то он будет создан и передан на редактирование в текстовый редактор. В окне редактора вписать:

4. sudo udevadm control —reload && sudo udevadm trigger

Читайте также:  Windows 10 перестал работать калькулятор

5. sudo xed /etc/initramfs-tools/modules

Вписать строку bfq и сохранить.

Содержание файла должно быть:

# List of modules that you want to include in your initramfs.
# They will be loaded at boot time in the order below.
#
# Syntax: module_name [args . ]
#
# You must run update-initramfs(8) to effect this change.
#
# Examples:
#
# raid1
# sd_mod
bfq

6. sudo update-initramfs -u && shutdown -r now

7. После перезагрузки выполнить команду cat /sys/block/sda/queue/scheduler

Должно быть выдано: [bfq] none

1) sudo rm /etc/udev/rules.d/60-scheduler.rules

2) Убрать из /etc/default/grub параметр scsi_mod.use_blk_mq=1, т.е. вернуть к виду, например, GRUB_CMDLINE_LINUX_DEFAULT=»quiet splash»

После этого обновить загрузчик sudo update-grub

Источник

Активация I/O Scheduler mq-deadline (multi-queue deadline) или bfq в Ubuntu 18.04

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

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

Статья дополнена 01.12.2020 командами для добавления планировщика kyber

Исходные данные: ОС Ubuntu 18.04 с ядром 4.15;
Задача: Активировать для SSD дисков I/O планировщик mq-deadline, bfq или kyber

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

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

Проверим какие ядра у нас есть:

Проверим текущее ядро:

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

Отлично, теперь можно продолжить.

Теперь активируем в ядре multi-queue, для этого в файле /etc/default/grub в параметр GRUB_CMDLINE_LINUX_DEFAULT добавим:

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

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

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

Добавим в образ initrd загрузку модулей планировщика mq-deadline и bfq:

Обновим образ initrd для всех ядер:

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

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

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

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

Создадим правило для udev (файл 60-schedulers.rules), которое будет устанавливать текущим планировщиком mq-deadline для SSD диска /dev/sda:

Обратите внимание, что мы меняем 2 атрибута — это /sys/block/sda/queue/rotational и /sys/block/sda/queue/scheduler

Можно скорректировать некоторые параметры работы mq-deadline и не только:

Изменение 4-х параметров выше (queue/rq_affinity, queue/iosched/fifo_batch и т.д.) приведено в качестве примера, не копируйте мои значения если Вы не знаете их назначение.
Описание всех опций и их назначение для deadline, bfq или kyber можно прочитать в официальной документации kernel.org.
Так же полезно почитать заметку о IOSchedulers в официальной Wiki Ubuntu.

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

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

Если хотим активировать для диска sda планировщик bfq, то выполните (Внимание! файл 60-schedulers.rules будет переписан):

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

Читайте также:  Linux bash open file

Для отладки правил udev можно использовать udevadm с параметром test, например:

В выводе Вы можете увидеть много различных правил, а так же Ваше правило 60-schedulers.rules. Так же в выводе будет информация о том, что правило будет применено к определенным устройствам и изменит определенные атрибуты, сокращенный пример вывода:

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

Источник

Планировщик bfq linux mint 19

12 май 2018, 14:04

Давно хотел озаботится да все руки не доходили. А между тем для Сильвии ядро 4.13 стало фактически основным. А дисковый bfq же добавили еще в 4.12. Думаю пришло время.

1. Что это такое, и чем его едят.
Все довольно просто. Вот представьте, что у вас две программы хотят одновременно читать или писать на диск. Какой из них дать преимущество? А что будет в это время делать вторая? За эти вопросы в системе отвечает т.н. планировщик дисковых операций (ввода-вывода). Подробности как всегда в гугле, или для ленивых, для понимания вопроса начать можно отсюда: http://src-code.net/planirovshhiki-vvoda-vyvoda/

Нас же будет интересовать в основном практика. В минте по умолчанию используется планировщик cfq и доступны еще deadline и none. cfq в принципе справляется, но бывают случаи, когда система все-же стает колом — например при копировании с флешек, или по гигабитной сети, особенно если диски hdd и не слишком шустрые. Для решения этой проблемы умные люди написали планировщик bfq — планировщик который делает упор на то, что каждый процесс будет иметь гарантированный доступ к диску, и не будет своим ожиданием блокировать систему. Т.е. тормоза в GUI при интенсивных дисковых операциях должны уйти в прошлое, а иногда это довольно сильно способствует скорости запуска программ. Да и нагрузка на диск становится поменьше. Основное преимущество этот планировщик выдает в сценарии «параллельный доступ ко множеству мелких файлов на hdd». Но и для ssd он будет эффективен, по словам авторов алгоритма.

2. Как сделать?
К сожалению, в минте и убунте все связанное с этим планировщиком по умолчанию полностью выключено. Хорошо хоть не вырезано. А вот владельцы Манжаро наслаждаются его возможностями «из коробки» — там он включен по умолчанию. Будем исправлять несправедливость.

. Убеждаемся что стоит ядро ветки 4.13 или новее. .

Включаем поддержку в ядре:
Идем в /etc/default/grub и добавляем к GRUB_CMDLINE_LINUX_DEFAULT такой параметр: scsi_mod.use_blk_mq=1
Обновляем конфиг:
sudo update-grub
перегружаемся.

Смотрим на результат: cat /sys/block/sda/queue/scheduler
Практически с гарантией результатом будет единственный вариант: none. Без паники — это следствие того что bfq у нас идет модулем а не вкомпилировано в ядро. Грузим модуль:
modprobe bfq

Смотрим еще раз: cat /sys/block/sda/queue/scheduler
Результат должен быть уже таким:
bfq [none]
Планировщик доступен но неактивен. Теперь надо сделать так, чтобы оно стало активным а потом и грузилось автоматически.

Сначала пишем правило для удава:
Создаем файл /etc/udev/rules.d/60-scheduler.rules и пишем туда:
ACTION==»add|change», KERNEL==»sd*[!0-9]|sr*», ATTR=»bfq»
Сохраняем, и активируем:
sudo udevadm control —reload
sudo udevadm trigger
Строчка задействует bfq для всех дисков. Т.к. включение поддержки у нас отрубает все остальные планировщики — это оправдано. none — это даже для ssd не очень.

Смотрим еще раз: cat /sys/block/sda/queue/scheduler
Теперь результат должен быть уже таким:
[bfq] none
Планировщик уже работает.

Но после перезагрузки, пока что, все вернется к none. Нужно заставить систему грузить модуль автоматически.
Редактируем файлик /etc/initramfs-tools/modules и добавляем к списку модулей bfq
Сохраняем, и даем команду
sudo update-initramfs -u

Настройка закончена, можно перегружаться спокойно.

Если вдруг не понравится — чтобы вернуть «все взад» нужно убрать правило udev и параметр из /etc/default/grub. И, соответственно, обновить конфиг оного.

Источник

Оцените статью