Anticipatory scheduling
From Wikipedia, the free encyclopedia
Anticipatory scheduling is an algorithm for scheduling hard disk input/output. It seeks to increase the efficiency of disk utilization by "anticipating" synchronous read operations.
"Deceptive idleness" is a situation where a process appears to be finished reading from the disk when it is actually processing data in preparation of the next read operation. This will cause a normal work-conserving I/O scheduler to switch to servicing I/O from an unrelated process. This situation is detrimental to the throughput of synchronous reads, as it degenerates into a seeking workload. [1] Anticipatory scheduling overcomes deceptive idleness by pausing for a short time (a few milliseconds) after a read operation in anticipation of another close-by read requests.[2]
Anticipatory scheduling yields significant improvements in disk utilization for some workloads.[3] In some situations the Apache web server may achieve up to 71% more throughput from using anticipatory scheduling.[4]
The Linux anticipatory scheduler may reduce performance on disks using TCQ, high performance disks, and hardware RAID arrays.[5] An anticipatory scheduler (AS) was the default Linux kernel scheduler between 2.6.0 and 2.6.18, by which time it was replaced by the CFQ scheduler.
[edit] See also
[edit] Other I/O schedulers
- CFQ
- Anticipatory scheduler
- Noop scheduler
- Deadline scheduler
[edit] References
- ^ Iyer, Sitaram. "The Effect of Deceptive Idleness on Disk Schedulers". Retrieved on 2007-05-23.
- ^ Morton, Andrew (2003-01-23). 2.5.59-mm5. linux-kernel, linux-mm mailing list. Retrieved on 2007-05-23.
- ^ Morton, Andrew (2003-02-20). IO scheduler benchmarking. linux-kernel mailing list. Retrieved on 2007-05-23.
- ^ Iyer, Sitaram; Druschel, Peter (2001-06-06). "Anticipatory scheduling: A disk scheduling framework to overcome deceptive idleness in synchronous I/O". 18th ACM Symposium on Operating Systems Principles. Retrieved on 2007-05-23.
- ^ Piggin, Nick (2003-09-13). as-iosched.txt. Linux kernel documentation.