Onload provides significantly improved performance without the need to rewrite or recompile the user application, whilst retaining complete interoperability with the standard TCP and UDP protocols.
In the regular kernel TCP/IP architecture an application is dynamically linked to the libc library. This OS library provides support for the standard BSD sockets API via a set of ‘wrapper’ functions with real processing occurring at the kernel-level. Onload also supports the standard BSD sockets API. However, in contrast to the kernel TCP/IP, Onload moves protocol processing out of the kernel-space and into the user-level Onload library itself.
As a networking application invokes the standard socket API function calls such as
socket()
, read()
,
write()
etc, these are intercepted by the Onload library making use of the LD_PRELOAD mechanism on
Linux. From each function call, Onload will examine
the file descriptor identifying those sockets using a supported interface - which are
processed by the Onload stack, whilst those not
using a supported interface are transparently passed to the kernel stack.