Re: [net-next PATCH v2 8/8] net: Introduce SO_INCOMING_NAPI_ID
From: Andy Lutomirski
Date: Thu Mar 23 2017 - 18:44:08 EST
On Thu, Mar 23, 2017 at 2:38 PM, Alexander Duyck
<alexander.duyck@xxxxxxxxx> wrote:
> From: Sridhar Samudrala <sridhar.samudrala@xxxxxxxxx>
>
> This socket option returns the NAPI ID associated with the queue on which
> the last frame is received. This information can be used by the apps to
> split the incoming flows among the threads based on the Rx queue on which
> they are received.
>
> If the NAPI ID actually represents a sender_cpu then the value is ignored
> and 0 is returned.
This may be more of a naming / documentation issue than a
functionality issue, but to me this reads as:
"This socket option returns an internal implementation detail that, if
you are sufficiently clueful about the current performance heuristics
used by the Linux networking stack, just might give you a hint as to
which epoll set to put the socket in." I've done some digging into
Linux networking stuff, but not nearly enough to have the slighest
clue what you're supposed to do with the NAPI ID.
It would be nice to make this a bit more concrete and a bit less tied
in Linux innards. Perhaps a socket option could instead return a hint
saying "for best results, put this socket in an epoll set that's on
cpu N"? After all, you're unlikely to do anything productive with
busy polling at all, even on a totally different kernel
implementation, if you have more than one epoll set per CPU. I can
see cases where you could plausibly poll with fewer than one set per
CPU, I suppose.
Again, though, from the description, it's totally unclear what a user
is supposed to do.
--Andy