xdp-newbies.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Srivats P <pstavirs@gmail.com>
To: Magnus Karlsson <magnus.karlsson@gmail.com>
Cc: Xdp <xdp-newbies@vger.kernel.org>
Subject: Re: AF_XDP sendto kick returning EPERM
Date: Fri, 7 May 2021 20:17:21 +0530	[thread overview]
Message-ID: <CANzUK5_K5fv6eYr+xd7ThQ_FywD2KCZ55KB+0YJr8oZ49sVKrg@mail.gmail.com> (raw)
In-Reply-To: <CAJ8uoz00gxM6j4tFgd64qA12Y-JxOGFq66qfbXMsxZAD+SUYRw@mail.gmail.com>

On Mon, May 3, 2021 at 1:54 PM Magnus Karlsson
<magnus.karlsson@gmail.com> wrote:
>
> On Thu, Apr 29, 2021 at 5:47 PM Srivats P <pstavirs@gmail.com> wrote:
> >
> > On Tue, Apr 27, 2021 at 12:58 PM Magnus Karlsson
> > <magnus.karlsson@gmail.com> wrote:
> > >
> > > On Fri, Apr 23, 2021 at 5:44 PM Srivats P <pstavirs@gmail.com> wrote:
> > > >
> > > > Hi,
> > > >
> > > > I'm using sendto() to kick tx in my AF_XDP program after I submit
> > > > descriptors to the tx ring -
> > > >
> > > > ret = sendto(xsk_socket__fd(xsk_), NULL, 0, MSG_DONTWAIT, NULL, 0);
> > > >
> > > > However, I'm receiving EPERM as the return value every time. AFAIK
> > > > this is not an expected return value. Since this is with i40e, I
> > > > checked i40e_xsk_wakeup() - but that also doesn't return EPERM. I am
> > > > running as root and I don't see any problems with creating the xsk,
> > > > configuring umem etc.
> > > >
> > > > Also, no packets seem to go out either.
> > > >
> > > > # uname -a
> > > > Linux Ostinato-1 5.11.15-1-default #1 SMP Fri Apr 16 16:47:34 UTC 2021
> > > > (64fb5bf) x86_64 x86_64 x86_64 GNU/Linux
> > > >
> > > > I don't see the problem on another machine with i40e but older kernel 5.4 series
> > > >
> > > > Any suggestions on what to look for or how to proceed?
> > >
> > > Weird. Have not seen this before. What is your command line for
> > > xdpsock? Is it unmodified?
> >
> > This is not xdpsock, but my own AF_XDP program.
> >
> > >
> > > Using bpftrace, we can get the call stack of xsk_sendmsg. Somewhere in
> > > this stack there must be an EPERM. You can run the same command on
> > > your system, but use ftrace to see what a sendto call hits. Then see
> > > where the code terminates.
> > >
> > > mkarlsso@kurt:~/src/dna-linux$ sudo bpftrace -e 'kprobe:xsk_sendmsg {
> > > @[kstack()] = count(); }'
> > > Attaching 1 probe...
> > > ^C
> > >
> > > @[
> > >     xsk_sendmsg+1
> > >     sock_sendmsg+94
> > >     __sys_sendto+238
> > >     __x64_sys_sendto+37
> > >     do_syscall_64+51
> > >     entry_SYSCALL_64_after_hwframe+68
> > > ]: 2244805
> >
> > Ostinato-1:~ # bpftrace -e 'kprobe:xsk_sendmsg {
> > @[kstack()] = count(); }'
> > Attaching 1 probe...^C@[
> >     xsk_sendmsg+1
> >     sock_sendmsg+94
> >     __sys_sendto+238
> >     __x64_sys_sendto+37
> >     do_syscall_64+51
> >     entry_SYSCALL_64_after_hwframe+68
> > ]: 1253307
> >
> > Which doesn't seem to suggest any error - I've looked at the source
> > code for all these functions, but don't see any reference to EPERM.
>
> It must be in there somewhere :-). Could you plesae use ftrace
> (through perf for example) and trace all functions that a sendto hits
> in your case? Then we might see what it hits.
>
> Are you running in SKB mode or in zero-copy mode? Guess it is
> zero-copy from your mail, but just want to verify. Does Rx work as
> expected?
>
> Could you share your AF_XDP program?

After some experimentation and a lot of head-scratching, I found part
of the problem last night. The sendto() was not returning EPERM (-1),
but ENXIO (-6) - I was mistakenly printing the return value of the
sento() call (which always returns -1 in case of failure), instead of
errno (duh!).

Looking at the code, I see ENXIO is returned if the xsk is unbound.
I'm still investigating this and will post an update soon. The problem
is happening at a customer end and there's some delay and follow up
required to get the logs.

Srivats

  reply	other threads:[~2021-05-07 14:47 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-23 15:44 AF_XDP sendto kick returning EPERM Srivats P
2021-04-27  7:28 ` Magnus Karlsson
2021-04-29 15:47   ` Srivats P
2021-05-03  8:24     ` Magnus Karlsson
2021-05-07 14:47       ` Srivats P [this message]
2021-05-07 15:09         ` Srivats P
2021-05-09 15:41           ` Maciej Fijalkowski
2021-05-11 12:02             ` Srivats P

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CANzUK5_K5fv6eYr+xd7ThQ_FywD2KCZ55KB+0YJr8oZ49sVKrg@mail.gmail.com \
    --to=pstavirs@gmail.com \
    --cc=magnus.karlsson@gmail.com \
    --cc=xdp-newbies@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).