Onload supports the acceleration of TCP loopback connections, providing an accelerated mechanism through which two processes on the same host can communicate. Accelerated TCP loopback connections do not invoke system calls, reduce the overheads for read/write operations and offer improved latency over the kernel implementation.
The server and client processes who want to communicate using an accelerated TCP loopback connection do not need to be configured to share an Onload stack. However, the server and client TCP loopback sockets can only be accelerated if they are in the same Onload stack. Onload has the ability to move a TCP loopback socket between Onload stacks to achieve this.
TCP loopback acceleration is configured via the environment variables EF_TCP_CLIENT_LOOPBACK and EF_TCP_SERVER_LOOPBACK. As well as enabling TCP loopback acceleration these environment variables control Onload’s behavior when the server and client sockets do not originate in the same Onload stack. This gives the user greater flexibility and control when establishing loopback on TCP sockets either from the listening (server) socket or from the connecting (client) socket. The connecting socket can use any local address or specify the loopback address.
The following diagram illustrates the client and server loopback options. Refer to Parameter Reference for a description of the loopback variables.
The client loopback option EF_TCP_CLIENT_LOOPBACK=4
, when used with the server loopback option EF_TCP_SERVER_LOOPBACK=2
, differs from other loopback options such that rather than move sockets between existing stacks they will create an additional stack and move sockets from both ends of the TCP connection into this new stack. This avoids the possibility of having many loopback sockets sharing and contending for the resources of a single stack.
When client and server are not the same UID, set the environment variable EF_SHARE_WITH to allow both processes to share the created shared stack.