netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Eric Dumazet <edumazet@google.com>
To: Horatiu Vultur <horatiu.vultur@microchip.com>
Cc: netdev@vger.kernel.org
Subject: Re: Performance regression on lan966x when extracting frames
Date: Tue, 16 May 2023 11:59:45 +0200	[thread overview]
Message-ID: <CANn89iL83K13OZvKLR41LS-bTjoFtn_1L7PGe6qNxHjzg-zLJQ@mail.gmail.com> (raw)
In-Reply-To: <20230516092714.wresm662w54zs226@soft-dev3-1>

On Tue, May 16, 2023 at 11:27 AM Horatiu Vultur
<horatiu.vultur@microchip.com> wrote:
>
> The 05/16/2023 10:04, Eric Dumazet wrote:
> >
> > On Tue, May 16, 2023 at 9:45 AM Horatiu Vultur
> > <horatiu.vultur@microchip.com> wrote:
> > >
> > > The 05/15/2023 14:30, Eric Dumazet wrote:
> > > >
> > > > On Mon, May 15, 2023 at 11:12 AM Horatiu Vultur
> > > > <horatiu.vultur@microchip.com> wrote:
> > >
> > > Hi Eric,
> > >
> > > Thanks for looking at this.
> > >
> > > > >
> > > > > Hi,
> > > > >
> > > > > I have noticed that on the HEAD of net-next[0] there is a performance drop
> > > > > for lan966x when extracting frames towards the CPU. Lan966x has a Cortex
> > > > > A7 CPU. All the tests are done using iperf3 command like this:
> > > > > 'iperf3 -c 10.97.10.1 -R'
> > > > >
> > > > > So on net-next, I can see the following:
> > > > > [  5]   0.00-10.01  sec   473 MBytes   396 Mbits/sec  456 sender
> > > > > And it gets around ~97000 interrupts.
> > > > >
> > > > > While going back to the commit[1], I can see the following:
> > > > > [  5]   0.00-10.02  sec   632 MBytes   529 Mbits/sec   11 sender
> > > > > And it gets around ~1000 interrupts.
> > > > >
> > > > > I have done a little bit of searching and I have noticed that this
> > > > > commit [2] introduce the regression.
> > > > > I have tried to revert this commit on net-next and tried again, then I
> > > > > can see much better results but not exactly the same:
> > > > > [  5]   0.00-10.01  sec   616 MBytes   516 Mbits/sec    0 sender
> > > > > And it gets around ~700 interrupts.
> > > > >
> > > > > So my question is, was I supposed to change something in lan966x driver?
> > > > > or is there a bug in lan966x driver that pop up because of this change?
> > > > >
> > > > > Any advice will be great. Thanks!
> > > > >
> > > > > [0] befcc1fce564 ("sfc: fix use-after-free in efx_tc_flower_record_encap_match()")
> > > > > [1] d4671cb96fa3 ("Merge branch 'lan966x-tx-rx-improve'")
> > > > > [2] 8b43fd3d1d7d ("net: optimize ____napi_schedule() to avoid extra NET_RX_SOFTIRQ")
> > > > >
> > > > >
> > > >
> > > > Hmmm... thanks for the report.
> > > >
> > > > This seems related to softirq (k)scheduling.
> > > >
> > > > Have you tried to apply this recent commit ?
> > > >
> > > > Commit-ID:     d15121be7485655129101f3960ae6add40204463
> > > > Gitweb:        https://git.kernel.org/tip/d15121be7485655129101f3960ae6add40204463
> > > > Author:        Paolo Abeni <pabeni@redhat.com>
> > > > AuthorDate:    Mon, 08 May 2023 08:17:44 +02:00
> > > > Committer:     Thomas Gleixner <tglx@linutronix.de>
> > > > CommitterDate: Tue, 09 May 2023 21:50:27 +02:00
> > > >
> > > > Revert "softirq: Let ksoftirqd do its job"
> > >
> > > I have tried to apply this patch but the results are the same:
> > > [  5]   0.00-10.01  sec   478 MBytes   400 Mbits/sec  188 sender
> > > And it gets just a little bit bigger number of interrupts ~11000
> > >
> > > >
> > > >
> > > > Alternative would be to try this :
> > > >
> > > > diff --git a/net/core/dev.c b/net/core/dev.c
> > > > index b3c13e0419356b943e90b1f46dd7e035c6ec1a9c..f570a3ca00e7aa0e605178715f90bae17b86f071
> > > > 100644
> > > > --- a/net/core/dev.c
> > > > +++ b/net/core/dev.c
> > > > @@ -6713,8 +6713,8 @@ static __latent_entropy void
> > > > net_rx_action(struct softirq_action *h)
> > > >         list_splice(&list, &sd->poll_list);
> > > >         if (!list_empty(&sd->poll_list))
> > > >                 __raise_softirq_irqoff(NET_RX_SOFTIRQ);
> > > > -       else
> > > > -               sd->in_net_rx_action = false;
> > > > +
> > > > +       sd->in_net_rx_action = false;
> > > >
> > > >         net_rps_action_and_irq_enable(sd);
> > > >  end:;
> > >
> > > I have tried to use also this change with and without the previous patch
> > > but the result is the same:
> > > [  5]   0.00-10.01  sec   478 MBytes   401 Mbits/sec  256 sender
> > > And it is the same number of interrupts.
> > >
> > > Is something else that I should try?
> >
> > High number of interrupts for a saturated receiver seems wrong.
> > (Unless it is not saturating the cpu ?)
>
> The CPU usage seems to be almost at 100%. This is the output of top
> command:
> 149   132 root     R     5032   0%  96% iperf3 -c 10.97.10.1 -R
>  12     2 root     SW       0   0%   3% [ksoftirqd/0]
> 150   132 root     R     2652   0%   1% top

Strange... There might be some scheduling artifacts in TCP stack for
your particular workload.
Perhaps leading to fewer ACK packets being sent, and slowing down the sender.

It is unclear where cpu cycles are eaten. Normally the kernel->user
copy should be the limiting factor.

Please try
perf record -a -g sleep 10
perf report --no-children --stdio


I do not see obvious problems with my commit

  reply	other threads:[~2023-05-16  9:59 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-15  9:12 Performance regression on lan966x when extracting frames Horatiu Vultur
2023-05-15 12:30 ` Eric Dumazet
2023-05-16  7:45   ` Horatiu Vultur
2023-05-16  8:04     ` Eric Dumazet
2023-05-16  9:27       ` Horatiu Vultur
2023-05-16  9:59         ` Eric Dumazet [this message]
2023-05-16 10:17           ` Eric Dumazet
2023-05-16 10:16         ` Paolo Abeni
2023-05-16 14:11           ` Horatiu Vultur
2023-05-16 14:32             ` Paolo Abeni

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=CANn89iL83K13OZvKLR41LS-bTjoFtn_1L7PGe6qNxHjzg-zLJQ@mail.gmail.com \
    --to=edumazet@google.com \
    --cc=horatiu.vultur@microchip.com \
    --cc=netdev@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).