CFQ
From Wikipedia, the free encyclopedia
CFQ, also known as "Completely Fair Queuing", is an I/O scheduler for the Linux kernel which was written by Jens Axboe.
CFQ works by placing synchronous requests submitted by processes into a number of per-process queues and then allocating timeslices for each of the queues to access the disk. The length of the time slice and the number of requests a queue is allowed to submit, depends on the IO priority of the given process. Asynchronous requests for all processes are batched together in fewer queues, one per priority. While CFQ does not do explicit anticipatory IO scheduling, it achieves the same effect of having good aggregate throughput for the system as a whole, by allowing a process queue to idle at the end of synchronous IO thereby "anticipating" further close IO from that process. It can be considered a natural extension of granting IO time slices to a process.
Contents |
[edit] History
This article or section may contain an inappropriate mixture of prose and timeline. |
[edit] Prior to the integration
In February 2003 Andrea Arcangeli puts forward his idea for Stochastic Fair Queueing I/O scheduler to Jens Axboe who then implements it. Jens Axboe makes improvements to his first implementation calling the new version the Completely Fair Queueing scheduler and produces a patch to apply it to the 2.5.60 development series kernel.
[edit] Kernel 2.6.6 (10th May 2004)
The CFQ I/O scheduler was first integrated into the mainline kernel as an optional I/O scheduler. It is possible to change the scheduler at boot time with the 'elevator' parameter to kernel.
[edit] Kernel 2.6.9 (19th October 2004)
Red Hat Enterprise Linux 4 which includes a 2.6.9 based kernel uses the CFQ I/O scheduler by default.
[edit] Kernel 2.6.10 (24th December 2004)
The second release of the CFQ scheduler dubbed CFQv2 is included in the 2.6.10, improvements include better responsiveness and the elimination of some starvation issues which were present in the earlier version. The scheduler now is also switchable at run time by modify the /sys/block/<block_device>/queue/scheduler variable in the sysfs filesystem.
[edit] Kernel 2.6.18 (20th September 2006)
CFQ becomes the default scheduler.
It was an optional I/O scheduler until it became the default scheduler in the 2.6.18 release. Red Hat Enterprise Linux 4 uses this I/O scheduler as the default even though it provides a 2.6.9 based kernel.