Operating System I/O Speculation: how two invocations are
faster than one
Keir Fraser
We present an in-kernel disk prefetcher which uses speculative
execution to determine what data an application is likely to require
in the near future. By placing our design within the operating system,
we provide several benefits compared to the previous application-level
design. Not only is our system easier to implement and deploy, but by
handling page faults as well as traditional file-access methods we are
able to apply speculative execution to swapping applications, which
often spend the majority of their execution time fetching non-resident
pages. We also present two new OS features that further improve the
performance of speculative execution for applications that have have
large page tables and working sets. These are a fast method for
synchronizing an errant speculative process with normal execution,
and a modified form of copy-on-write which preserves application
semantics without delaying normal execution. Finally, by leveraging
OS knowledge about memory usage and contention, we design a mechanism
for estimating and limiting the memory overhead of speculative executions.
Our implementation for Linux 2.4.8 provides benefits of up to 60%
for a wide range of explicit-I/O and swapping applications on
systems with realistic memory constraints. Our results show that
our support mechanisms for swapping applications provide significant
further performance improvements, and in some cases prevent speculative
execution from hurting performance. We further demonstrate that
our memory control mechanism effectively limits speculative overheads
while allowing beneficial speculative executions to proceed unhindered.
|