Планировщики ввода/вывода в Linux

Примечание.    Эта    информация    будет    полезна   при   настройке
   производительности системы на ядре 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

Оставьте комментарий