Планировщики ввода/вывода в Linux (linux kernel io schedule optimization tune)
Ключевые слова: linux, kernel, io, schedule, optimization, tune, (найти похожие документы)
From: Santa Claus
Date: Mon, 11 Jan 2006 14:31:37 +0000 (UTC)
Subject: Планировщики ввода/вывода в Linux
Оригинал: http://santa-claus-rpm.livejournal.com/2456.html
Планировщики ввода/вывода в Linux
© 2006 Santa Claus
Примечание. Эта информация будет полезна при настройке
производительности системы на ядре 2.6.
Не слишком углубляясь в дебри ядра, скажем, что с т/з планирования все
процессы в Linux подразделяются на:
* I/O-зависимые
* CPU-зависимые
Первые слишком плотно работают с устройствами ввода/вывода, вторым
требуется как можно больше процессорного времени.
По другой, независимой от первой, классификации процессы также могут
быть:
* Интерактивными
* Фоновыми и пакетными
* Real-time
Например, процесс СУБД является фоновым и I/O-зависимым.
Поэтому важно понимать, что далее речь пойдет о планировании I/O, а не CPU.
Итак, существует ровно четыре основных планировщика I/O:
* CFQ - Completely Fair Queuing - полностью справедливая очередь
* Deadline
* NOOP
* Anticipatory - упреждающий конвейер
Чтобы узнать какие планировщики ввода/вывода зарегистрированы в
системе, введите команду
$ dmesg | grep schedule
io scheduler noop registered
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered (default)
Чтобы выбрать планировщик, отличный от дефолтного добавьте параметр
elevator=as | deadline | cfq | noop
в строку kernel конфигурационного файла загрузчика GRUB
(/boot/grub/grub.conf) или в строку "append=" для LILO.
Все четыре конвейера являются встроенными и перекомпиляция ядра не
потребуется.
CFQ является планировщиком по-умолчанию (по крайней мере в Fedora).
Поддерживает очередь ввода/вывода для каждого процесса и пытается
распределить доступную полосу пропускания равномерно между всеми
запросами. CFQ отлично подходит для многопроцессорных системы выше
среднего уровня и для систем, которым требуется сбалансированная
производительность подсистемы ввода/вывода между различными
устройствами и контроллерами. Если несколько программ одновременно
запросят доступ к диску, все программы получат ответ.
Deadline использует алгоритм предельного срока для минимизации
задержек ввода/вывода для данного запроса. Этот планировщик
предоставляет поведение близкое к реальному времени и использует
политику перебора (round robin), пытаясь быть справедливым по
отношению к нескольким запросам, для предотвращения "голодания"
процессов. Используя пять очередей ввода/вывода, планировщик активно
переупорядочивает запросы для улучшения производительности. Другими
словами, из очереди извлекается одна программа, которая и получает
практически монопольный доступ к диску. Пока эта программа работают,
все остальные ожидают в очереди. По истечению определенного времени,
планировщик переводит эту программу в состояние ожидания и
переключается на другую программу - следующую в очереди. Теперь вторая
программа получается доминирующий доступ к диску. Потом третья,
четвертая и т.д. Данный метод хорош для сервера баз данных, но не для
десктопа.
NOOP представляет собой простую очередь "Первый вошел - Первый вышел"
(FIFO) и использует минимальное количество команд CPU на одну операцию
ввода/вывода, выполняя простые операций объединения и сортировки.
Подразумевается, что производительность системы ввода/вывода
оптимизируется на уровне блочного устройства (память-диск) или при
помощи интеллектуального HBA или внешнего контроллера. Что снимает
нагрузку с процессора и обеспечивает адекватную производительность
ввода/вывода для систем с интеллектуальным контроллером ввода/вывода,
обладающим собственными возможностями по упорядочиванию запросов.
Anticipatory (упреждающий конвейер) вводит управляемую задержку перед
обработкой операции в попытке объединить и/или переупорядочить
запросы, улучшая смежность и уменьшая количество операций перемещения
по диску. Этот алгоритм предназначен для оптимизации систем с
небольшой или медленной дисковой подсистемой. Одним из побочных
эффектов этого планировщика может оказаться увеличенная задержка
ввода/вывода. Из дизайна планировщика следует, что он лучше всего
подойдет для клиентских систем и рабочих станций, для которых
интерактивность работы имеет приоритет над задержками ввода/вывода.
Планировщик CFQ обычно устанавливается по умолчанию, т.к. он
предлагает наивысшую производительность для широкого круга приложений
и конфигураций систем ввода/вывода.
Выбор планировщика ввода/вывода
Правильный выбор планировщика ввода/вывода состоит в том, чтобы
проверить на практике и настроить вашу задачу для каждого из
планировщиков, с перезагрузкой системы и выполнением замеров
производительности.
Поэтому не существует единого или правильного ответа на вопрос "какой
планировщик ввода/вывода является лучшим".
Полезные ссылки
* Выбор планировщика ввода/вывода в Red Hat Enterprise Linux 4 и ядре версии 2.6