@device(postscript) @libraryfile(Mathematics10) @libraryfile(Accents) @style(fontfamily=timesroman,fontscale=11) @pagefooting(immediate, left "@c", center "@c", right "@c") @heading(Application-Allocated I/O Buffering with System-Allocated Performance) @heading(CMU-CS-96-169) @center(@b(Jose Carlos Brustoloni, Peter Steenkiste)) @center(August 1996@foot) @center(FTP: CMU-CS-96-169.ps) @blankspace(1) @begin(text) We present a novel taxonomy that classifies I/O data passing between applications and operating system along three dimensions: buffer allocation scheme, guaranteed integrity, and optimization. We contribute new optimizations @y(M) @i(input-disabled pageout, transient output copy-on-write), and @i(input alignment) @y(M) that are used in a novel buffering semantics, @i(emulated copy). We implemented an I/O framework, Genie, that allows applications to select any semantics in the taxonomy. Using Genie for end-to-end communication over an ATM network, we found that, compared to other semantics, only copy had sharply inferior performance. All other semantics performed quite similarly, contradicting the expectation that emulated copy, being application-allocated and strong-integrity (as is copy semantics), should have considerably worse performance than those of move (system-allocated) or share (weak-integrity) semantics. We analyzed end-to-end latencies in terms of the costs of primitive data passing operations and modeled how those costs scale with CPU, memory, and network speeds. The analysis suggests that current trends tend to intensify the observed performance clustering. We conclude that I/O interfaces with copy semantics, such as that of Unix, can be transparently converted to emulated copy and thus achieve performance approaching the best in the taxonomy. @blankspace(2line) @begin(transparent,size=10) @b(Keywords:@ )@c @end(transparent) @blankspace(1line) @end(text) @flushright(@b[(29 pages)])