A User Level Networking Infrastructure for Linux
by Andrew McRae
ABSTRACT
Currently, most network packet processing occurs within the confines of the kernel in the Linux system. This reflects the historic nature of a Linux/Unix kernel in that its primary role was as a network host or end-point e.g a web server, or desktop. However, considerable effort is being expended to provide a greater level of packet processing on Linux systems, as more features are required such as tunnelling, encryption, quality of service etc. Another factor is the growing use of Linux as a gateway or router. Both these factors rely on a implementing the bulk of the ever-more complex packet processing inside the kernel itself, mainly for performance reasons, though with the attendant issues of robustness, ease of programming, scalability etc.
This paper presents an alternative approach to implementing network
services within the kernel itself, and describes a networking
infrastructure that attempts to address the major issues with
supporting a sophisticated and extensive packet processing environment
on Linux without sacrificing performance or robustness.
This infrastructure (termed NetIO
) is implemented as a kernel module in
Linux, but is designed to interact closely with user level processes in
implementing the network services, bypassing the major issues of kernel
limitations such as scalability, robustness, configuration and ease of
programming, yet without suffering the performance limitations caused
by kernel/user process interactions.
Andrew McRae
NetDevices Inc.
Download the paper: A User Level Networking Infrastructure for Linux (180K PDF)