Ответ
Планировщик ввода/вывода (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, так и для медленных дисков.
Практическое использование:
- Проверить текущий планировщик для диска
/dev/sda:cat /sys/block/sda/queue/scheduler # Вывод: [mq-deadline] kyber bfq none # Активный планировщик указан в квадратных скобках — mq-deadline. - Временно изменить планировщик на
kyber:echo kyber | sudo tee /sys/block/sda/queue/scheduler - Выбор планировщика в инфраструктуре:
- Для HDD и гибридных систем:
deadlineилиbfq(Budget Fair Queueing). - Для SSD/NVMe в серверах и облаке:
none(аналог NOOP для multiqueue) илиkyber. - Для десктопов с SSD:
bfqдля лучшей интерактивности.
- Для HDD и гибридных систем:
Правильный выбор планировщика — это часть тюнинга производительности дисковой подсистемы, особенно под высокую нагрузку (базы данных, веб-серверы).
Ответ 18+ 🔞
А, ну это же про планировщики ввода-вывода в Линуксе! Ёпта, история древняя, как мир. Представь себе, что твой жёсткий диск — это охуенно ленивый мужик, который не хочет головой мотать туда-сюда. А ему постоянно кричат: «Дай файл отсюда! А теперь отсюда!». Так вот, планировщик — это такой начальник цеха, который кричит: «Э, сабака сука, э бошка думай! Не бегай как угорелый, собери все заказы с одного района, а потом вали в другой!».
Основные типы этих самых начальников:
- CFQ (Completely Fair Queuing): Это старый пердун, который пытался всех рассадить по справедливости. Каждому процессу — своя очередь, всем сестрам по серьгам. Для древних HDD норм было, но сейчас он уже, бля, как будто на дворе 2002-й год. Накрылся медным тазом в новых ядрах, его выпилили.
- Deadline: А вот это уже хитрая жопа. Он говорит: «Ладно, я всё отсортирую по адресам, чтобы голова меньше моталась, НО! Если какой-то запрос слишком долго ждёт — ему пизда рулю, он идёт вне очереди, чтоб дедлайн не проёбан». Для баз данных — самое то.
- NOOP (No Operation): А это похуист. Его девиз — «Да похуй». Пришёл запрос — встал в хвост очереди. Первый пришёл — первый ушёл. Никакой сортировки. Зачем она, если у тебя SSD, где нет этой ебаной механики? Идеально для облаков и быстрых дисков.
- Kyber: Это уже современный умник. Он не просто сортирует, он ещё и подозрение ебать чувствует. Смотрит, как устройство откликается, и сам на лету регулирует глубину очереди, чтобы задержки не зашкаливали. Универсальный солдат, подходит и для быстрых NVMe, и для медленных дисков.
Ну и как этим пользоваться, чувак?
-
Глянуть, какой у тебя сейчас начальник на диске
/dev/sda(а то мало ли, пидарас шерстяной какой-нибудь стоит):cat /sys/block/sda/queue/scheduler # Вывод: [mq-deadline] kyber bfq none # Кто в квадратных скобках — тот у руля. Тут `mq-deadline`.Видишь
mq-deadline? Это современная версия старогоdeadlineдля новых систем. -
Быстренько поменять его на
kyber(временно, до перезагрузки):echo kyber | sudo tee /sys/block/sda/queue/schedulerВсё, хитрая жопа сменила дедлайнового пердуна.
-
А какой вообще ставить?
- Если коптишь старый HDD или гибридную систему —
mq-deadlineилиbfq(это такой потомок CFQ, но поумнее). - Если у тебя SSD/NVMe в сервере — либо
none(это и есть NOOP для новых систем), либоkyber. Доверия ебать ноль к сложным алгоритмам, когда железо и так быстрое. - Для домашнего компа с SSD, где ты и в игрушки играешь, и фильмы качаешь —
bfqможет быть лучше, он интерактивность поднимает.
- Если коптишь старый HDD или гибридную систему —
Короче, выбор планировщика — это такая тонкая ебля колотить, часть настройки производительности. Если у тестя база данных жрёт ресурсов овердохуища, а ты поставил не тот — будет тебе хиросима и нигерсраки с дисковыми задержками.