Ядро Linux является сердцем операционной системы и отвечает за управление доступом к дискам, используя планировщик
ввода/вывода ядра. Red Hat Enterprise Linux 3 построен на основе ядра 2.4 и использует один сложный
конвейер ввода/вывода общего назначения. Планировщик ввода вывода в ядре 2.4 имеет приемлемое
количество настраиваемых параметров для управления количеством времени, которое запрос остается в очереди
ввода/вывода до момента его обслуживания, настраиваемое командой elvtune.
В то время как Red Hat Enterprise Linux 3 предлагает хорошую производительность для большинства задач,
он не всегда предоставляет лучшие характеристики ввода/вывода для широкого круга приложений используемых сегодня в Linux.
Планировщик ввода/вывода в составе Red Hat Enterprise Linux 4, включенный в ядро 2.6, обладает значительно
расширенными возможностями управления вводом/выводом Linux. При использовании
Red Hat Enterprise Linux 4 теперь возможно оптимизировать поведение подсистемы ввода/вывода ядра
на этапе загрузки, для этого необходимо выбрать одни из четырех планировщиков, удовлетворяюший вашим потребностям:
Полностью справедливая очередь (Completely Fair Queuing) — elevator=cfq (по умолчанию)
Deadline — elevator=deadline
NOOP — elevator=noop
Упреждающий конвейер (Anticipatory) — elevator=as
Добавьте параметр elevator из приведенной выше таблицы в строку kernel конфигурационного файла
загрузчика GRUB (/boot/grub/grub.conf) или в строку приглашения eLILO.
Все четыре конвейера встроены в Red Hat Enterprise Linux 4 и перекомпиляция ядра не потребуется.
Ядро 2.6 объединяет лучшие алгоритмы ввода/вывода, которые были переданы разработчиками и
исследователями в сообщество открытого кода в середине 2004 года. Указанные планировщики были доступны
уже в Fedora Core 3 и продолжают использоваться в Fedora Core 4. Ранее было опубликовано несколько хороших
материалов, описывающих использование планировщиков в Linux 2.6.
Ссылки на некоторые из них приведены в конце статьи. Данное исследование мы проведем на примере запуска
Oracle 10G в конфигурациях OLTP и DSS при использовании файловой системы EXT3.
Планировщики ввода/вывода в Red Hat Enterprise Linux 4
В состав Red Hat Enterprise Linux 4 входят четыре планировщика, один их которых вы можете выбрать.
Каждый из них является комбинацией различных оптимизаций.
Планировщик Полностью справедливой очереди (Completely Fair Queuing, CFQ) является алгоритмом
по умолчанию в Red Hat Enterprise Linux 4. Как следует из названия, CFQ поддерживает очередь
ввода/вывода для каждого процесса и пытается распределить доступную полосу пропускания
равномерно между всеми запросами. CFQ отлично подходит для многопроцессорных системы выше
среднего уровня и для систем, которым требуется сбалансированная производительность подсистемы
ввода/вывода между различными LUN и контроллерами.
Конвейер Deadline использует алгоритм предельного срока для минимизации задержек ввода/вывода
для данного запроса. Этот планировщик предоставляет поведение близкое к реальному времени
и использует политику перебора (round robin), пытаясь быть справедливым по отношению
к нескольким запросам, для предотвращения "голодания" процессов. Используя пять очередей ввода/вывода,
планировщик активно переупорядочивает запросы для улучшения производительности.
Планировщик NOOP представляет собой простую очередь "Первый вошел - Первый вышел" (FIFO) и использует
минимальное количество команд CPU на одну операцию ввода/вывода, выполняя простые операций объединения
и сортировки. Подразумевается, что производительность системы ввода/вывода оптимизируется на уровне
блочного устройства (память-диск) или при помощи интеллектуального HBA или внешнего контроллера.
Упреждающий конвейер (Anticipatory) вводит управляемую задержку перед обработкой операции в попытке
объединить и/или переупорядочить запросы, улучшая смежность и уменьшая количество операций перемещения
по диску. Этот алгоритм предназначен для оптимизации систем с небольшой или медленной дисковой подсистемой.
Одним из побочных эффектов AS планировщика может оказаться увеличенная задержка ввода/вывода.
Выбор конвейера ввода/вывода
Приведенное выше определение может дать исчерпывающую информацию необходимую для выбора типа планировщика.
Альтернативным методом является проверка на практике и настройка вашей задачи для каждого из
планировщиков ввода/вывода, с перезагрузкой системы и выполнением замеров в вашей среде.
Мы как раз выполнили именно эти шаги для планировщика Red Hat Enterprise Linux 3 и четырех планировщиков
Red Hat Enterprise Linux 4, используя в качестве нагрузки Oracle 10G.
Рисунок 1 показывает результаты запуска Oracle 10G OLTP на системе с 2-CPU/2-HT Xeon,
4 Гб ОЗУ и 8 LUN`ами подключенными к контроллеру LSIlogic megraraid. Нагрузка в OLTP варианте
выполнялась преимущественно блоками по 4Кб с произвольными операциями и равным соотношением чтение/запись.
Нагрузка в DSS варианте состояла из 100% последовательных запросов на чтение с блоками передачи данных 32Кб-256Кб.
Рисунок 1. Сравнение планировщиков Red Hat Enterprise Linux 4 с Red Hat Enterprise Linux 3
при использовании БД Oracle 10G oltp/dss (относительная производительность)
Планировщик CFQ был выбран в качестве варианта по умолчанию, т.к. он предлагает наивысшую производительность
для широкого круга приложений и конфигураций систем ввода/вывода. Мы увидели превосходство CFQ в пропускной
способности и по задержкам в многопроцессорных системах вплоть до 16 процессоров и для систем
от 2 до 64 LUN в дисковых массивах UltraSCSI и Fiber Channel. В дополнение отметим, что настройка CFQ проста,
необходимо установить параметр nr_requests в подсистеме /proc/sys/scsi в значение соответствующее
возможностям конкретной подсистемы ввода/вывода.
Планировщик Deadline выигрывает при попытке уменьшить задержку одной операции ввода/вывода в окружении,
близком к реальному времени. Задача, которая зависит от равной балансировки транзакций между
несколькими HBA, дисками или разными файловыми системами не может иметь лучшее решение в
большинстве случаев при использовании планировщика Deadline. Тестирование Oracle 10G OLTP для
10 одновременно работающих пользователей при использовании восьми LUN`ов показало улучшение
для Deadline варианта по сравнению с конвейером Red Hat Enterprise Linux 3, но показатели были все
равно меньше на 12.5%, чем у планировщика CFQ.
Планировщик NOOP действительно освобождает процессор от операций, но при этом выполняет на 23% меньше
транзакций в минуту при использовании такого же количества клиентов работающих с БД Oracle 10G.
Уменьшение числа циклов процессора было пропорционально падению производительности,
таким образом, скорее всего, этот планировщик будет хорошо работать на системах, интенсивно
использующих ресурсы процессора при работе баз данных. Использование CFQ или Deadline дает лучшую
пропускную способность при том же количестве клиентов по сравнению с планировщиком NOOP.
Планировщик AS выигрывает на небольших системах с ограниченной конфигурацией ввода/вывода и
имеющих один или два LUN`а. Из дизайна планировщика AS следует, что он лучше всего подойдет для
клиентских систем и рабочих станций, для которых интерактивность работы имеет приоритет над задержками ввода/вывода.
Итого: Выберите свой путь!
Подводя итоги нашего исследования мы видим, что не существует ЕДИНОГО ответа на вопрос
"какой планировщик ввода/вывод является лучшим". Хорошей новостью является тот факт, что конечный
пользователь системы Red Hat Enterprise Linux 4 может выбрать желаемый планировщик при помощи
параметра загрузки. Наши данные наводят на мысль, что планировщик ввода/вывода по умолчанию (CFQ)
в Red Hat Enterprise Linux 4 обеспечивает наиболее масштабируемый алгоритм для широчайшего круга систем,
конфигураций и пользователей коммерческих баз данных. Тем не менее, мы также измерили поведение
иных задач и увидели, что Deadline планировщик превосходит CFQ при больших последовательных операциях,
в основном чтения, в DSS задачах. Другие исследования, ссылки на которые приведены в конце статьи,
рассматривают использование AS планировщика для улучшения интерактивности.
Дополнительно отметим, что NOOP вариант действительно снимает нагрузку с процессора и обеспечивает
адекватную производительность ввода/вывода для систем с интеллектуальным контроллером ввода/вывода,
обладающим собственными возможностями по упорядочиванию запросов.
В заключение, мы рекомендуем взять за основу в приложениях планировщик по умолчанию CFQ.
Вы можете использовать эту статью и ссылки в конце документа для определения того,
какому варианту соответствует ваша ситуация. Затем настройте планировщик ввода/вывода с помощью
простой команды при перезагрузке для определения прироста производительности.
Выполняйте только одно изменение за раз и используйте средства определения производительности для оценки результатов.
Джон Шакшобер (D. John Shakshober) является Инженером-консультатом Red Hat в Вестфолде (штат Массачусетс) и
его деятельность связана с ядром и оценкой производительности. До работы в Red Hat, Джон был
Техническим Директором отдела Performance Engineering в HP, Compaq и Digital, работая над
вопросами оценки производительноси Linux и Tru64 Unix в Нашуа, Нью-Хэмпшир.
От является кандидатом наук (M.S.) по Electrical Engineering университета Корнелла и
бакалавром (B.S.) по Computer Engineering Институте технологий в Рочестере.