Anticipatory scheduling
Anticipatory scheduling briefly delays dispatch to wait for another request from a process whose I/O queue has just become empty.
A synchronous reader may need a short computation after completion before submitting its next read. Immediately serving another process can force an avoidable head seek, even with pending work elsewhere. This temporary absence of the desired request is deceptive idleness. [1]
Unlike prefetching, anticipation waits for a demand request instead of guessing and issuing its read. The original framework wraps a scheduling policy with adaptive waiting heuristics; seek reduction and proportional service need different criteria. [1]
Linux 6.16 BFQ retains idling for selected synchronous queues. On flash with internal command queueing, it may sacrifice throughput for latency or fairness. Setting slice_idle to zero can remove that protection; it is not a universal performance fix. [2]
Relations
- related
- I/O scheduler, Budget Fair Queueing (BFQ), readahead (Linux syscall), Work-conserving scheduler
Limitations
- Waiting consumes device time when the expected request does not arrive soon enough. [1]
Citations
- Iyer and Druschel. Anticipatory scheduling: A disk scheduling framework to overcome deceptive idleness in synchronous I/O. SOSP 2001, sections 2-5.
- Linux 6.16: BFQ, device idling, slice_idle and strict_guarantees
Further reading
Sources & caveats
- The 2001 experiments used FreeBSD 4.3 and rotating disks; their gains are not predictions for present-day SSDs. [1]
- This entry describes a research framework and its scheduling principle, not an available scheduler name in every current kernel.
- Primary-source synthesis only; no hardware benchmark or paper replication was performed.