Speaker: Jose Carlos Brustoloni, CMU
Reducing the effects of buffering semantics and operating system structure on I/O performanceDate: March 20, 1997
Many workstation operating systems, including Unix and Windows NT, have I/O API with copy semantics. Systems with such buffering semantics often copy data to pass it across protection boundaries, despite the widening gap between processor and memory performance, which makes copying expensive. Data passing costs are compounded in systems with microkernel architecture, where I/O data typically has to cross multiple protection boundaries. Copy-on-write (COW) avoids data copying if there is no buffer overwriting; unfortunately, data input requires overwriting. Several other copy avoidance techniques require change in buffering semantics (DASH, fbufs, container shipping), and consequently are not compatible with existing applications. Still other optimizations change the operating system structure so as to reduce or eliminate protection boundary crossings, which may sacrifice benefits of the previous structure (e.g., moving user-level servers into the kernel) or require major changes in existing applications (e.g., to execute as kernel extension).
In my talk, I will describe two novel copy-avoidance schemes: (1) Emulated copy, which uses virtual-memory manipulations and optional hardware optimizations to avoid copying between application and system I/O buffers; and (2) I/O-oriented IPC, an efficient mechanism to make selected system I/O buffers accessible by user-level servers. My experiments show that: (1) Emulated copy performs almost as well as or better than other buffering semantics, including share and move; (2) Emulated copy gives monolithic systems I/O performance approaching that of extensible kernels; (3) I/O-oriented IPC gives microkernel systems I/O performance approaching that of monolithic systems; and (4) Current trends in processor, device, and memory speeds tend to reduce performance differences among copy-avoidance techniques. I conclude that emulated copy and I/O-oriented IPC greatly reduce the effects of buffering semantics and operating system structure on I/O performance while, unlike previous optimizations, maintaining compatibility with legacy applications and systems.