Что такое планировщик ввода/вывода (I/O scheduler) в Linux?

«Что такое планировщик ввода/вывода (I/O scheduler) в Linux?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Планировщик ввода/вывода (I/O Scheduler) — это компонент ядра Linux, который управляет очередью запросов к блочным устройствам (дискам). Его задача — оптимизировать порядок выполнения этих запросов, чтобы минимизировать время позиционирования головок (для HDD) и повысить общую пропускную способность системы.

Основные типы планировщиков:

  • CFQ (Completely Fair Queuing): Старый планировщик по умолчанию для HDD. Создает отдельные очереди для каждого процесса, пытаясь справедливо распределить пропускную способность диска.
  • Deadline: Гарантирует, что запрос будет обработан в течение заданного времени (дедлайна). Сортирует запросы по LBA (логическому адресу блока) для минимизации seek time, но приоритезирует запросы, у которых истекает дедлайн. Хорош для баз данных.
  • NOOP (No Operation): Простая очередь FIFO (First In, First Out). Не выполняет сортировку. Идеален для SSD и виртуальных дисков в облаке, где нет механических задержек на позиционирование.
  • Kyber: Современный планировщик, появившийся в ядре 4.12. Адаптируется к характеристикам устройства, управляя глубиной очереди для контроля задержек (latency). Хорошо подходит как для быстрых NVMe, так и для медленных дисков.

Практическое использование:

  1. Проверить текущий планировщик для диска /dev/sda:
    cat /sys/block/sda/queue/scheduler
    # Вывод: [mq-deadline] kyber bfq none
    # Активный планировщик указан в квадратных скобках — mq-deadline.
  2. Временно изменить планировщик на kyber:
    echo kyber | sudo tee /sys/block/sda/queue/scheduler
  3. Выбор планировщика в инфраструктуре:
    • Для HDD и гибридных систем: deadline или bfq (Budget Fair Queueing).
    • Для SSD/NVMe в серверах и облаке: none (аналог NOOP для multiqueue) или kyber.
    • Для десктопов с SSD: bfq для лучшей интерактивности.

Правильный выбор планировщика — это часть тюнинга производительности дисковой подсистемы, особенно под высокую нагрузку (базы данных, веб-серверы).