• Sridhar Samudrala's avatar
    epoll: Add busy poll support to epoll with socket fds. · bf3b9f63
    Sridhar Samudrala authored
    This patch adds busy poll support to epoll. The implementation is meant to
    be opportunistic in that it will take the NAPI ID from the last socket
    that is added to the ready list that contains a valid NAPI ID and it will
    use that for busy polling until the ready list goes empty.  Once the ready
    list goes empty the NAPI ID is reset and busy polling is disabled until a
    new socket is added to the ready list.
    In addition when we insert a new socket into the epoll we record the NAPI
    ID and assume we are going to receive events on it.  If that doesn't occur
    it will be evicted as the active NAPI ID and we will resume normal
    An application can use SO_INCOMING_CPU or SO_REUSEPORT_ATTACH_C/EBPF socket
    options to spread the incoming connections to specific worker threads
    based on the incoming queue. This enables epoll for each worker thread
    to have only sockets that receive packets from a single queue. So when an
    application calls epoll_wait() and there are no events available to report,
    busy polling is done on the associated queue to pull the packets.
    Signed-off-by: default avatarSridhar Samudrala <sridhar.samudrala@intel.com>
    Signed-off-by: default avatarAlexander Duyck <alexander.h.duyck@intel.com>
    Acked-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
eventpoll.c 62.1 KB