Введение

Completely Fair Queuing (CFQ) — это планировщик ввода-вывода для ядра Linux, разработанный Йенсом Аксбо в 2003 году.

Описание

CFQ помещает синхронные запросы, поступающие от процессов, в несколько очередей для каждого процесса, а затем выделяет временные интервалы для доступа к диску каждой из этих очередей. Длительность временного интервала и количество запросов, которые очередь может отправить, зависят от приоритета ввода-вывода данного процесса. Асинхронные запросы от всех процессов группируются в меньшее число очередей – по одной на каждый приоритет. Хотя CFQ и не выполняет явное прогнозирующее планирование операций ввода-вывода, он достигает аналогичного эффекта, обеспечивая высокую общую пропускную способность системы, позволяя очереди процесса простаивать после завершения синхронных операций ввода-вывода, тем самым "предвосхищая" последующие близкие по времени операции ввода-вывода от этого процесса. Это можно рассматривать как естественное расширение принципа выделения процессу временных интервалов для операций ввода-вывода.

До интеграции

В феврале 2003 года Андреа Арканджели предложил Йенсу Аксбоу свою идею планировщика ввода-вывода Stochastic Fair Queueing, который тот затем и реализовал. Йенс Аксбоу улучшил свою первую реализацию, назвав новую версию Completely Fair Queueing, и подготовил патч для применения к ядру серии разработки 2.5.60.

Ядро 2.6.6 (10 мая 2004)

Планировщик ввода-вывода CFQ был впервые интегрирован в основное ядро как опциональный планировщик ввода-вывода. Была возможность изменить планировщик при загрузке системы с помощью параметра 'elevator' в параметрах ядра.

Ядро 2.6.9 (19 октября 2004 года)

Red Hat Enterprise Linux 4 использовала этот планировщик ввода-вывода по умолчанию, несмотря на то, что в ней использовалось ядро, основанное на версии 2.6.9.

Ядро 2.6.10 (24 декабря 2004)

Второй релиз планировщика CFQ, получивший название CFQv2, включен в ядро 2.6.10. Улучшения включают в себя повышенную отзывчивость и устранение некоторых проблем с "голоданием" процессов, которые наблюдались в предыдущей версии. Теперь планировщик также можно переключать во время работы системы, изменяя переменную /sys/block/<block device>/queue/scheduler в файловой системе sysfs.

Ядро 2.6.13 (27 июня 2005)

Планировщик CFQ перешел на новую конструкцию с временными срезами, получившую название CFQv3. В частности, он реализует системные вызовы ioprio_get(2) и ioprio_set(2), позволяющие пользователю устанавливать приоритеты ввода-вывода для каждого процесса, обычно с помощью команды ionice(1) (хотя использование nice(1) также в некоторой степени изменяет приоритеты ввода-вывода).

Ядро 2.6.18 (20 сентября 2006)

CFQ стал планировщиком по умолчанию, заменив прогнозирующий планировщик.

Ядро 5.0 (2019-03-03)

CFQ удалена. CFQ эволюционировала в Budget Fair Queueing (BFQ).