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

Существует четыре планировщика IO в Linux:

CFQ поддерживает очередь ввода/вывода для каждого процесса и пытается распределить доступную полосу пропускания равномерно между всеми запросами. CFQ отлично подходит для многопроцессорных системы выше среднего уровня и для систем, которым требуется сбалансированная производительность подсистемы ввода/вывода между различными устройствами и контроллерами. Если несколько программ одновременно запросят доступ к диску, все программы получат ответ.

Deadline использует алгоритм предельного срока для минимизации задержек ввода/вывода для данного запроса. Этот планировщик предоставляет поведение близкое к реальному времени и использует политику перебора (round robin), пытаясь быть справедливым по отношению к нескольким запросам, для предотвращения “голодания” процессов. Используя пять очередей ввода/вывода, планировщик активно переупорядочивает запросы для улучшения производительности. Другими словами, из очереди извлекается одна программа, которая и получает практически монопольный доступ к диску. Пока эта программа работают, все остальные ожидают в очереди. По истечению определенного времени, планировщик переводит эту программу в состояние ожидания и переключается на другую программу – следующую в очереди. Теперь вторая программа получается доминирующий доступ к диску. Потом третья, четвертая и т.д. Данный метод хорош для сервера баз данных, но не для десктопа.

NOOP представляет собой простую очередь “Первый вошел – Первый вышел” (FIFO) и использует минимальное количество команд CPU на одну операцию ввода/вывода, выполняя простые операций объединения и сортировки. Подразумевается, что производительность системы ввода/вывода оптимизируется на уровне блочного устройства (память-диск) или при помощи интеллектуального HBA или внешнего контроллера. Что снимает нагрузку с процессора и обеспечивает адекватную производительность ввода/вывода для систем с интеллектуальным контроллером ввода/вывода, обладающим собственными возможностями по упорядочиванию запросов.

Anticipatory (упреждающий конвейер) вводит управляемую задержку перед обработкой операции в попытке объединить и/или переупорядочить запросы, улучшая смежность и уменьшая количество операций перемещения по диску. Этот алгоритм предназначен для оптимизации систем с небольшой или медленной дисковой подсистемой. Одним из побочных эффектов этого планировщика может оказаться увеличенная задержка ввода/вывода. Из дизайна планировщика следует, что он лучше всего подойдет для клиентских систем и рабочих станций, для которых интерактивность работы имеет приоритет над задержками ввода/вывода.

Статья Планировщики ввода/вывода в Linux.

Leave a Reply

Your email address will not be published. Required fields are marked *