Anticipatory scheduling

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search

Anticipatory scheduling is an algorithm for scheduling hard disk input/output (I/O scheduling). It seeks to increase the efficiency of disk utilization by "anticipating" future synchronous read operations.

I/O scheduling[edit]

"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 Tagged Command Queuing (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.

As of kernel version 2.6.33, the Anticipatory scheduler has been removed from the Linux kernel.[6] The reason being that while useful, the scheduler's effects could be achieved through tuned use of other schedulers (mostly CFQ, which can also be configured to idle with the slice_idle tunable).[7] Since the anticipatory scheduler added maintenance overhead while not improving the workload coverage of the Linux kernel, it was deemed redundant.

See also[edit]


  1. ^ Iyer, Sitaram. "The Effect of Deceptive Idleness on Disk Schedulers". Retrieved 2010-04-20. {{cite journal}}: Cite journal requires |journal= (help)
  2. ^ Morton, Andrew (2003-01-23). "2.5.59-mm5". linux-kernel, linux-mm (Mailing list). Archived from the original on 15 June 2007. Retrieved 2007-05-23.
  3. ^ Morton, Andrew (2003-02-20). "IO scheduler benchmarking". linux-kernel (Mailing list). Archived from the original on 2 June 2007. Retrieved 2007-05-23.
  4. ^ 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 2010-04-20.
  5. ^ Piggin, Nick (2003-09-13). "as-iosched.txt". Linux kernel documentation. Retrieved 2010-04-20.
  6. ^ "Linux 2 6 33 - Linux Kernel Newbies".
  7. ^ "CFQ Kernel Documentation".