The Case Against User-Level Networking
Kostas Magoutis, Margo Seltzer (Harvard University)
Eran Gabber (Google, Inc)
Extensive research on system support for enabling
I/O-intensive applications to achieve performance close to the
limits imposed by the hardware suggests two main approaches:
Low overhead I/O protocols and the flexibility to customize
I/O policies to the needs of applications. One way to achieve
both is by supporting user-level access to I/O devices, enabling
user-level implementations of I/O protocols. User-level networking
is an example of this approach, specific to network interface
controllers (NICs). In this paper, we argue that the real key to
high-performance in I/O-intensive applications is user-level file
caching and user-level network buffering, both of which can be
achieved without user-level access to NICs.
Avoiding the need to support user-level networking carries two important benefits for overall system design: First, a NIC exporting a privileged kernel interface is simpler to design and implement than one exporting a user-level interface. Second, the kernel is re-instated as a global system resource controller and arbitrator. We develop an analytical model of network storage applications and use it to show that their performance is not affected by the use of a kernel-based API to NICs.