Ответ
Планировщик ввода-вывода (I/O Scheduler) — это компонент ядра Linux, который определяет порядок выполнения операций чтения/записи (I/O requests), отправляемых на блочное устройство (HDD, SSD). Его главная цель — оптимизировать общую производительность диска и сократить задержки (latency).
Почему это важно для DevOps? Неправильный выбор планировщика может убить производительность базы данных, виртуальной машины или дискового массива.
Основные алгоритмы и когда их использовать:
| Планировщик | Принцип работы | Оптимальное использование |
|---|---|---|
mq-deadline |
Гарантирует время выполнения для запросов (deadline). Сортирует запросы по LBA (адресу на диске) для минимизации скидинга головки HDD. | HDD-диски, гибридные системы. Хороший компромисс между пропускной способностью и задержкой. Часто выбор по умолчанию. |
bfq (Budget Fair Queuing) |
Справедливо распределяет пропускную способность диска между процессами. Полезен для интерактивных десктопов или когда нужно гарантировать время отклика для конкретного приложения. | Десктопы, системы, где важна отзывчивость (например, медиа-сервер). |
none (или noop для старых ядер) |
Простая FIFO-очередь. Не выполняет сортировку или переупорядочивание. | SSD и NVMe-накопители. У SSD нет механической головки, поэтому сложные алгоритмы сортировки не нужны и только добавляют накладные расходы. |
kyber |
Адаптивный планировщик, фокусируется на сокращении задержек (latency). Разделяет запросы на синхронные (чтение) и асинхронные (запись) и управляет их очередями отдельно. | Низколатентные SSD, системы реального времени. |
Управление планировщиком:
# 1. Посмотреть доступные и активный планировщик для диска (например, sda)
cat /sys/block/sda/queue/scheduler
# Вывод: [mq-deadline] kyber bfq none
# В квадратных скобках — текущий.
# 2. Изменить планировщик (например, на 'none' для SSD)
echo 'none' | sudo tee /sys/block/sda/queue/scheduler
# 3. Сделать изменение постоянным (через udev правило или параметр ядра)
# Например, добавить в /etc/default/grub: GRUB_CMDLINE_LINUX="scsi_mod.use_blk_mq=1 elevator=none"
Рекомендация: Для серверов с SSD в продакшене часто оптимален none или mq-deadline. Выбор должен подтверждаться бенчмарками под конкретную нагрузку (fio).