Thread (24 messages) flat view 24 messages, 5 authors, 2024-02-05

Re: [net-next 0/3] Per epoll context busy poll support

From: Joe Damato <hidden>
Date: 2024-02-02 20:55:49
Also in: lkml, netdev

On Fri, Feb 02, 2024 at 02:50:58PM -0600, Samudrala, Sridhar wrote:

On 2/2/2024 2:23 PM, Joe Damato wrote:
quoted
On Fri, Feb 02, 2024 at 11:58:28AM -0800, Jakub Kicinski wrote:
quoted
On Fri, 2 Feb 2024 11:33:33 -0800 Joe Damato wrote:
quoted
On Fri, Feb 02, 2024 at 10:22:39AM -0800, Jakub Kicinski wrote:
quoted
On Fri, 2 Feb 2024 11:23:28 -0600 Samudrala, Sridhar wrote:
quoted
I think you should be able to get this functionality via the netdev-genl
API to get napi parameters. It returns ifindex as one of the parameters
and you should able to get the name from ifindex.

$ ./cli.py --spec netdev.yaml --do napi-get --json='{"id": 593}'
{'id': 593, 'ifindex': 12, 'irq': 291, 'pid': 3727}
FWIW we also have a C library to access those. Out of curiosity what's
the programming language you'd use in user space, Joe?
I am using C from user space.
Ah, great! Here comes the advert.. :)

  make -C tools/net/ynl/

will generate the C lib for you. tools/net/ynl/generated/netdev-user.h
will have the full API. There are some samples in
tools/net/ynl/samples/. And basic info also here:
https://docs.kernel.org/next/userspace-api/netlink/intro-specs.html#ynl-lib

You should be able to convert Sridhar's cli.py into an equivalent
in C in ~10 LoC.
quoted
Curious what you think about
SIOCGIFNAME_BY_NAPI_ID, Jakub? I think it would be very useful, but not
sure if such an extension would be accepted. I can send an RFC, if you'd
like to take a look and consider it. I know you are busy and I don't want
to add too much noise to the list if I can help it :)
Nothing wrong with it in particular, but we went with the netlink API
because all the objects are related. There are interrupts, NAPI
instances, queues, page pools etc. and we need to show all sort of
attributes, capabilities, stats as well as the linking. So getsockopts
may not scale, or we'd need to create a monster mux getsockopt?
Plus with some luck the netlink API will send you notifications of
things changing.
Yes this all makes sense. The notification on changes would be excellent,
especially if NAPI IDs get changed for some reason  (e.g. the queue count
is adjusted or the queues are rebuilt by the driver for some reason like a
timeout, etc).

I think the issue I'm solving with SIOCGIFNAME_BY_NAPI_ID is related, but
different.

In my case, SIOCGIFNAME_BY_NAPI_ID identifies which NIC a specific fd from
accept arrived from.

AFAICT, the netlink API wouldn't be able to help me answer that question. I
could use SIOCGIFNAME_BY_NAPI_ID to tell me which NIC the fd is from and
then use netlink to figure out which CPU to bind to (for example), but I
think SIOCGIFNAME_BY_NAPI_ID is still needed.
The napi-get netlink api takes napi_id and returns ifindex, irq and pid
associated with the napi id. You can then pass ifindex to the SIOCGIFNAME
ioctl to get the interface name. So it is definitely possible without the
need for the new SIOCGIFNAME_BY_NAPI_ID
Ah, I see. OK. In that case, I won't bother with the RFC for
SIOCGIFNAME_BY_NAPI_ID.

I'll give your suggestion a try next week after I make the driver changes
needed to support it.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help