BSD socket APIs are entrenched into the networking world
and have a universal usability appeal due to their
simplicity.
Unfortunately, if you care about high end performance then, the
current BSD socket APIs for sending and receiving data have too
much many hazards that hamper performance. These hazards
range (to name the most common) from construct such as system calls,
memcpy, page reference counting, etc. The impact of these
"included" costs severely limit the data rate. Bad enough that
modern applications for high performance networking have
universally turned towards RDMA and infiniband after
declaring TCP/IP as too slow and inefficient!
In the pursuit for performance happyness, David Ahern
and Shrijeet Mukherjee have explored a few options out
there for Linux. They have looked at io_uring, AF_XDP sockets,
and RDMA/Infiniband verbs.
In this talk they discuss a proposal to merge some concepts of
RDMA with traditional TCP/IP networking. Specifically, the
ability to create and manage memory regions between
processes and hardware along with userspace access to
hardware queues and software queues to a kernel driver for
submitting work and getting completions.
cheers,
jamal