Введение
Современные Linux-системы сталкиваются с выбором планировщика ввода-вывода (I/O scheduler) для NVMe-накопителей, что может ухудшить производительность из-за недостатка систематических данных. Цель работы — сравнить планировщики mq-deadline, BFQ, Kyber и none на SATA SSD, NVMe и HDD по метрикам пропускной способности и латентности. Результаты помогут оптимизировать выбор планировщика для различных типов накопителей и сценариев нагрузки, что будет полезно как для пользователей, так и для разработчиков ядра Linux.
Обзор планировщиков
Сравнительный анализ алгоритмов mq-deadline, BFQ, Kyber и none демонстрирует их различные подходы к планированию запросов. Mq-deadline использует двухочередную модель (чтение/запись), балансируя между пропускной способностью и временем ожидания при смешанной нагрузке. BFQ обеспечивает справедливое распределение пропускной способности, эмулируя диск с постоянной скоростью, однако требует сложной настройки и избыточен для простых сценариев [2]. Kyber адаптивно управляет задержками, изменяя глубину очереди для минимизации латентности, обеспечивая стабильность при умеренных нагрузках, но уступает при пиковых. None — минимальная обёртка, передающая запросы напрямую драйверу, что позволяет оценить накладные расходы ядра и эффективность NVMe-устройств без вмешательства планировщика [1].
Методика эксперимента
Экспериментальный стенд построен на серверной платформе с контроллером SATA/NVMe. Использованы три накопителя: HDD Seagate BarraCuda (1 Тбайт, SATA III), SATA SSD Samsung 870 EVO и NVMe Samsung 980 Pro (PCIe 4.0 x4), что позволило охватить различные задержки и пропускную способность.
Программное обеспечение — Ubuntu Server 21.04 с ядром Linux 5.15, доступны четыре планировщика: mq-deadline, BFQ, Kyber, none. Фоновая активность минимизирована, мониторинг через изолированный SSH-терминал.
Нагрузка генерировалась инструментом FIO с параметром direct=1 (без кэширования). Фиксировались пропускная способность (MB/s) и средняя задержка (мс). Сценарии: последовательные операции (блок 1 МБ) для оценки максимальной пропускной способности и случайный доступ (блок 4 КБ) для эмуляции многозадачной нагрузки.
Результаты по устройствам
Итоги тестирования HDD и SATA SSD представлены в таблицах 1 и 2.
Таблица 1.
Результаты тестирования планировщиков на HDD
|
Планировщик |
Пропускная способность (MB/s) |
Средняя задержка (мс) |
IOPS |
|
mq-deadline |
48.2 |
12.4 |
12 340 |
|
BFQ |
52.7 |
10.1 |
13 490 |
|
Kyber |
41.5 |
15.8 |
10 620 |
|
none |
36.3 |
19.2 |
9 290 |
Таблица 2.
Результаты тестирования планировщиков на SATA SSD
|
Планировщик |
Пропускная способность (MB/s) |
Средняя задержка (мс) |
IOPS |
|
mq-deadline |
412 |
0.31 |
105 500 |
|
BFQ |
378.4 |
0.48 |
96 900 |
|
Kyber |
395.2 |
0.35 |
101 200 |
|
none |
401.5 |
0.33 |
102 800 |
В NVMe-системах накладные расходы планировщиков становятся критичными. Планировщик none передаёт управление напрямую драйверу, в то время как mq-deadline и Kyber добавляют задержки из-за сортировки запросов, а BFQ страдает от избыточного учёта приоритетов. Рост латентности составляет 10–30% по сравнению с none, что делает сложные планировщики неприемлемыми для высокопроизводительных NVMe-систем.
Таблица 3.
Результаты тестирования планировщиков на NVMe SSD
|
Планировщик |
Пропускная способность (MB/s) |
Средняя задержка (мс) |
IOPS |
|
mq-deadline |
2 850 |
0.11 |
729 600 |
|
BFQ |
2 240 |
0.18 |
573 400 |
|
Kyber |
2 910 |
0.1 |
744 900 |
|
none |
3 280 |
0.07 |
839 700 |
Экспериментальные данные на NVMe (глубина очереди 32) подтверждают прирост IOPS у none до 15% против mq-deadline и Kyber и до 30% против BFQ, что согласуется с теоретическими ожиданиями и данными П. Валенте [3]. На высокопроизводительных устройствах любой дополнительный слой планирования становится узким местом, поэтому для NVMe при высоких нагрузках none предпочтителен.
Рекомендации по выбору планировщика для серверных и встраиваемых систем
На основе экспериментальных данных разработана матрица выбора планировщика в зависимости от типа накопителя и нагрузки. Для NVMe с преобладанием случайных операций рекомендован режим none, для SATA SSD — mq-deadline.
В серверных средах (базы данных, веб-серверы) для SATA SSD и NVMe оптимальны mq-deadline и Kyber. Mq-deadline предотвращает «голодание» запросов благодаря сортировке и строгим дедлайнам. Kyber адаптивно регулирует глубину очереди, минимизируя задержки без существенной потери пропускной способности.
Для встраиваемых систем с HDD или бюджетными SATA SSD предпочтителен BFQ. Его алгоритм справедливого распределения полосы пропускания гарантирует низкую задержку интерактивных задач при высокой конкуренции за диск, что критично для промышленных контроллеров и мультимедийных устройств.
Заключение
Экспериментально подтверждено, что выбор планировщика ввода-вывода зависит от типа накопителя. Для HDD оптимален BFQ (минимизация перемещений головок), для SATA SSD — mq-deadline (баланс пропускной способности и латентности), для NVMe — none (минимизация накладных расходов ядра). Сложные алгоритмы BFQ и Kyber избыточны для NVMe. Разработанная матрица рекомендаций поможет системным администраторам снизить риск деградации производительности. Работа достигла поставленных целей, предоставив эмпирические данные и практические инструменты.
Список литературы
- Linux Kernel Documentation. blk-mq: Multi-queue block layer. URL: https://www.kernel.org/doc/html/latest/block/blk-mq.html
- Corbet J. Improving the performance of the BFQ I/O scheduler. LWN.net, 2019. URL: https://lwn.net/Articles/784510/
- Valente P. Comparison of Linux I/O Schedulers. University of Modena, 2019. URL: https://algo.ing.unimo.it/people/paolo/disk_sched/


