2.7.2.2 Планировщик ввода/вывода
Скачать документ Планировщик ввода-вывода (I/O) — это компонент ядра, который определяет, в каком порядке операции блочного ввода-вывода передаются на устройства хранения (HDD/SSD/NVME). Основной целью планировщика ввода-вывода является оптимизация обработки запросов к диску для повышения производительности и пропускной способности ввода-вывода. Связано это с тем, что когда в системе запущено большое количество процессов, выполняющих запросы ввода-вывода к различным частям хранилища, то эти процессы могут создавать множественные операции ввода-вывода, в результате чего образуется очередь запросов.
В РЕД ОС используются следующие планировщики:
mq-deadline — реализация планировщика deadline с использованием blk-mq. Этот планировщик подходит для большинства случаев, но особенно для тех, в которых операции записи в основном асинхронны. Планировщик mq-deadline сортирует запросы ввода-вывода в очереди на чтение или запись, а затем планирует их выполнение в возрастающем порядке адресации логических блоков (LBA).
kyber — планировщик, основанный на методах активного управления очередями, используемых для сетевой маршрутизации. Реализация основана на "токенах", которые служат механизмом ограничения запросов. Используется две очереди запросов — на запись и на чтение. kyber отдает приоритет запросам на чтение перед запросами на запись. Реализация алгоритма относительно проста и считается эффективной для NVME, SSD или других устройств с низкой задержкой.
bfq (Budget Fair Queuing) — основан на алгоритме от CFQ, но содержит улучшения. В конфигурации по умолчанию он больше нацелен на обеспечение минимальной задержки, а не на достижение максимальной пропускной способности. Этот планировщик обладает относительно высокими расходами на операцию, поэтому он не идеален для устройств с медленными процессорами или устройствами ввода-вывода с высокой пропускной способностью.
none – планировщик ввода-вывода без операций с несколькими очередями. Не переупорядочивает запросы и имеет минимальные расходы. Идеально подходит для быстрых устройств произвольного ввода-вывода, таких как SSD или NVME.
Устаревшими планировщиками ввода-вывода считаются: noop, CFQ, Deedline.
В зависимости от задачи, которую выполняет используемая система, рассмотрены следующие рекомендации по выбору планировщиков.
Вариант использования | Планировщик дисков |
---|---|
Традиционный жесткий диск с интерфейсом SCSI | Рекомендуется mq-deadline или bfq |
Высокопроизводительный SSD или система с привязкой к ЦП с быстрым хранилищем | Рекомендуется none, особенно при запуске корпоративных приложений. В качестве альтернативы можно использовать kyber |
Настольные системы или интерактивные задачи | Рекомендуется bfq |
Виртуальные гостевые системы | Рекомендуется mq-deadline. С адаптером главной шины (HBA), поддерживающим работу с несколькими очередями, рекомендуется использовать noop/none |
РЕД ОС по умолчанию использует планировщик BFQ. Для проверки можно вывести содержимое файла /sys/block/sdX/queue/scheduler:
cat /sys/block/sdX/queue/scheduler mq-deadline kyber [bfq] none
Используемый планировщик выделен квадратными скобками.
Изменение планировщика ввода-вывода
Изменить используемый планировщик без необходимости перезагрузки можно командой:
echo none > /sys/block/sdX/queue/scheduler
где X — буква физического накопителя.
Данная настройка действует только до первой перезагрузки ОС.
Для постоянной настройки необходимо создать правило UDEV.
Создайте файл /etc/udev/rules.d/60-schedulerset.rules и запишите в него следующие строки:
для SSD-дисков:
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="none"
для NMVE-дисков:
ACTION=="add|change", KERNEL=="nvme[0-9]n[0-9]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="none"
Здесь:
- ATTR{queue/scheduler} – параметр определяет имя планировщика;
- ATTR{queue/rotational}=0 – признак планировщика для типов дисков — SSD и NVME;
- ATTR{queue/rotational}=1 – признак планировщика для типа дисков — HDD (магнитные диски).
Изменения вступят в силу после перезагрузки ОС. Чтобы проверить назначенное правило, выполните команду:
cat /sys/block/sdX/queue/scheduler
где X — буква физического накопителя.
Например:
cat /sys/block/sdb/queue/scheduler [none] mq-deadline kyber bfq
Дата последнего изменения: 06.09.2024
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.