
В мире аудио высокой верности довольно часто аудиофилы используют дистрибутив Linux из-за его невероятной аудиосистемы ALSA.
Но плавная работа операционной системы довольно сильно зависит от планировщика ввода-вывода, который можно выбрать по своему желанию и заменить его «на лету». Об этом и пойдет речь ниже.
То как реагирует Linux на ваши действия и выполняет задачи зависит от планировщика ввода-вывода ядра.
За десятилетия было создано не менее десятка разных планировщиков использующих разные подходы, какие-то выделяют строгий квант времени на выполнение задачи, другие используют некую очередь, какие-то определяют важность процесса и в соответствии с ним сортируют очередь, другие используют например абсолютно честное распределение.
Названия популярных планировщиков ядра:
noop, CFQ и deadline, Mq-deadline, anticipatory и др.
Механизм blk-mq используемый в таких планировщиках, как none, bfq, mq-deadline, kyber был создан в силу появления SSD дисков, которые перевернули всю игру на поле в силу возможности одновременного выполнения десятков тысяч оперций — IOPS — одновременно, а так же с ростом процессов современные дистрибутивы Linux стали банально тормозить используя как HDD, так и SSD при использовании старыхметодов доступа к носителям. Планировщики нового поколения с механизмом blk-mq стали использовать преимущества SSD дисков для работы ядра Linux.
noop — no operation, самый простой планировщик, на процессор влияет минимально, что выгодно для слабых процессоров, но вопреки плохим ожиданиям, может оказаться лучшим решением при использовании SSD дисков, так как электроника этих дисков сама решает лучше многие вопросы ввода-вывода. noop на самом деле — это простая FIFO-очередь и объединение запросов к соседним блокам. Noop считает, что контролеру SSD виднее в каком порядке извлекать или сохранять данные. Сегодня noop — это один из лучших вариантов в современных компьютерах с SSD диском на маломощных процессорах.
Планировщик deadline — ориентируется на время нахождения запроса в очереди и может гарантировать, что каждый запрос будет обслужен планировщиком. Большинство приложений блокируются именно на чтении, поэтому deadline отдает приоритет запросам на чтение.
CFQ (Completely fair queuing) делит пропускную способность между всеми процессами создавая для каждого запроса свою очередь. Асинхронные же запросы объединяются по приоритетам.
CFQ сортирует запросы, чтобы минимизировать поиски секторов на диске. Время на выполнение запросов между очередями распределяется согласно приоритету, который можно настроить при помощи утилиты ionice. Дркгими словами это планировщик для компьютеров оснащенных старыми механическимии HDD дисками.
BFQ — наследник CFQ с некоторым развитием и наследованием идей.
Mq-deadline — твик deadline в который добавлен механизм blk-mq, другими словами правильная работа с SSD дисками.
kyber — написан для работы с быстрыми устройствами. Используя две очереди — запросы на запись и на чтение, отдает приоритет запросам на чтение, перед запросами на запись, что похоже на deadline.
Планировщик Anticipatory (упреждающий конвейер) сегодня почти не встречается, потому-что его алгоритм позволяет минимизировать перемещение головки по диску добавляя перед запросом задержку, чтобы головки жесткого диска могли успеть переместиться в нужный сектор и переупорядочить считываемые данные. Учитывая распространенность SSD дисков этот планировщик давно не актуален.
Как узнать какой планировщик ввода вывода используется в вашем дистрибутиве?
Это покажет команда в терминале
cat /sys/block/sda/queue/scheduler
Она выведет список известных ядру планировщиков, используемый будет заключен в скобки, например так:
[none] mq-deadline
Как видим в моем дистрибутиве Xubuntu 24.04.3 ядро знает всего два планировщика — это none и mq-deadline.
Оба поддерживают правильную работу с SSD, который я только что установил в данный старый ноутбук 17″ Aser Aspire V-571 на Core i3 с 4 Gb памяти. Ноутбук куплен в коммисионке «Победа» за 4400 руб + 900 руб за новый SSD Dexp C100 на 128 Гб на TLC памяти.
Такое небольшое число планировщиков означает, что только они были включены в сборку ядра перед компиляцией. При самостоятельной сборке ядра вы можете включить встроенные или запатчить новые самостоятельно, но всем хватает тех, что уже есть.
Планировщик можно изменить на лету и сразу начать им пользоваться, для этого нужно лишь дать комманду (я включаю планировщик none)
echo «none» | sudo tee /sys/block/sda/queue/scheduler
Суть этой комманды:
команда echo посылает текст «none» через созданный тоннель | в программу tee , которая сохраняет этот текст в файл scheduler по пути /sys/block/sda/queue/
Как это возможно?
В Linux всё — это файлы, в том числе и физические устройства.
Отмечу только, что раньше было достаточно дать комманду типа
sudo echo none > /sys/block/sda/queue/scheduler
Но в современных дистрибутивах Linux пишет, что отказано в доступе. Наверное произошли какие-то изменения в развитии Linux, которые я пропустил, хотя я уверен, что старом добром Debian наверняка эта комманда без tee будет/должна работать.
Отправить ответ
Для отправки комментария вам необходимо авторизоваться.