Как описано в /usr/src/linux/Documentation/block/switching-sched.txt
, планировщик ввода-вывода на любом конкретном блочном устройстве может быть изменен во время выполнения. Может быть некоторая задержка, так как все запросы предыдущего планировщика сбрасываются до ввода в действие нового планировщика, но ее можно без проблем изменить, даже когда устройство активно используется.
# cat /sys/block/hda/queue/scheduler
noop deadline [cfq]
# echo anticipatory > /sys/block/hda/queue/scheduler
# cat /sys/block/hda/queue/scheduler
noop [deadline] cfq
В идеале должен быть один планировщик для удовлетворения всех потребностей. Кажется, его еще нет. Ядру часто не хватает знаний, чтобы выбрать лучший планировщик для вашей рабочей нагрузки:
noop
часто является лучшим выбором для блочных устройств с поддержкой памяти (например, RAM-дисков) и других невращающихся носителей (флэш), где попытка перепланирования ввода-вывода является пустой тратой ресурсов
deadline
- это легкий планировщик, который пытается установить жесткое ограничение задержки
cfq
пытается поддерживать общесистемную справедливость пропускной способности ввода / вывода
Значение по умолчанию было anticipatory
долгое время, и оно получило множество настроек, но было удалено в версии 2.6.33 (начало 2010 г.). cfq
некоторое время назад стал стандартом по умолчанию, так как его производительность разумная, а справедливость - хорошая цель для многопользовательских систем (и даже для однопользовательских рабочих столов). Для некоторых сценариев - базы данных часто используются в качестве примеров, поскольку они, как правило, уже имеют свои собственные специфические схемы планирования и доступа и часто являются наиболее важной службой (так кого заботит справедливость?) - anticipatory
имеют долгую историю настройки для наилучшей производительности при таких рабочих нагрузках и deadline
очень быстро передает все запросы на базовое устройство.
noop
на невращающихся носителях, но ядро не имеет такой функции. В нем есть функция обнаружения невращающихся носителей, но это ненадежно, поскольку некоторые диски неверно сообщают о себе, и в любом случае еще не подключены к коду планировщика ввода-вывода.Можно использовать правило udev, чтобы позволить системе выбирать планировщик на основе некоторых характеристик hw.
Пример правила udev для SSD и других невращающихся дисков может выглядеть так:
внутри нового файла правил udev (например,
/etc/udev/rules.d/60-ssd-scheduler.rules
). Этот ответ основан на вики- версии debianЧтобы проверить, будут ли ssd-диски использовать правило, можно заранее проверить атрибут триггера:
источник
Цель того, чтобы ядро поддерживала разные версии, состоит в том, чтобы вы могли опробовать их без перезагрузки; затем вы можете запускать тестовые рабочие нагрузки через систему, измерять производительность, а затем делать ее стандартной для своего приложения.
На современном аппаратном обеспечении серверного уровня только безупречный вариант может оказаться полезным. Остальные в моих тестах кажутся медленнее.
источник
Вы можете установить это при загрузке, добавив параметр "elevator" в командную строку ядра (например, в grub.cfg)
Пример:
Это сделает "крайний срок" планировщиком ввода-вывода по умолчанию для всех блочных устройств.
Если вы хотите запросить или изменить планировщик после загрузки системы или хотите использовать другой планировщик для конкретного блочного устройства, я рекомендую установить и использовать инструмент ioschedset, чтобы упростить эту задачу .
https://github.com/kata198/ioschedset
Если вы используете Archlinux, он доступен в формате aur:
https://aur.archlinux.org/packages/ioschedset
Пример использования:
Использование должно быть понятным. Инструменты автономны и требуют только bash.
Надеюсь это поможет!
EDIT: отказ от ответственности, это сценарии, которые я написал.
источник
Ядро Linux не изменяет автоматически планировщик ввода-вывода во время выполнения. Под этим я подразумеваю, что на сегодняшний день ядро Linux не может автоматически выбирать «оптимальный» планировщик в зависимости от типа устройства вторичного хранения. Во время запуска или во время выполнения можно изменить планировщик ввода-вывода вручную .
Планировщик по умолчанию выбирается при запуске на основе содержимого файла, расположенного по адресу /linux-2.6 /block/Kconfig.iosched . Однако можно изменить планировщик ввода-вывода во время выполнения,
echo
указав допустимое имя планировщика в файле, расположенном в / sys / block / [DEV] / queue / scheduler. Например,echo deadline > /sys/block/hda/queue/scheduler
источник