Accelerated pipe()

Onload User Guide (UG1586)

Document ID
UG1586
Release Date
2023-07-31
Revision
1.2 English

Onload supports the acceleration of pipes, providing an accelerated IPC mechanism through which two processes on the same host can communicate using shared memory at user-level. Accelerated pipes do not invoke system calls. Accelerated pipes therefore, reduce the overheads for read/write operations and offer improved latency over the kernel implementation.

To create a user-level pipe, and before the pipe() or pipe2() function is called, a process must be accelerated by Onload and must have created an Onload stack. By default, an accelerated process that has not created an Onload stack is granted only a non-accelerated pipe. See EF_PIPE for other options.

The accelerated pipe is created from the pool of available packet buffers.

The following function calls, related to pipes, will be accelerated by Onload and will not enter the kernel unless they block:

  • pipe()
  • read()
  • write()
  • readv()
  • writev()
  • send()
  • recv()
  • recvmsg()
  • sendmsg()
  • poll()
  • select()
  • epoll_ctl()
  • epoll_wait()

As with TCP/UDP sockets, the Onload tuning options such as EF_POLL_USEC and EF_SPIN_USEC will also influence performance of the user-level pipe.

Refer also to EF_PIPE, EF_PIPE_RECV_SPIN, EF_PIPE_SEND_SPIN in Parameter Reference.

Note: Only anonymous pipes created with the pipe() or pipe2() function calls will be accelerated.