All of lore.kernel.org
 help / color / mirror / Atom feed
From: Felix Fietkau <nbd@nbd.name>
To: Wei Wang <weiwan@google.com>
Cc: "David S . Miller" <davem@davemloft.net>,
	Linux Kernel Network Developers <netdev@vger.kernel.org>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>,
	Hannes Frederic Sowa <hannes@stressinduktion.org>,
	Paolo Abeni <pabeni@redhat.com>
Subject: Re: [PATCH net-next 5/5] net: improve napi threaded config
Date: Thu, 1 Oct 2020 19:11:54 +0200	[thread overview]
Message-ID: <e9fdabda-72b1-fabd-8522-38965a62744c@nbd.name> (raw)
In-Reply-To: <CAEA6p_AsJuGb3C2MmWNDQYaZQtcCQc2CHdqcSPiH9i9NmPZMdQ@mail.gmail.com>

On 2020-10-01 19:01, Wei Wang wrote:
> On Thu, Oct 1, 2020 at 3:01 AM Felix Fietkau <nbd@nbd.name> wrote:
>>
>>
>> On 2020-09-30 21:21, Wei Wang wrote:
>> > This commit mainly addresses the threaded config to make the switch
>> > between softirq based and kthread based NAPI processing not require
>> > a device down/up.
>> > It also moves the kthread_create() call to the sysfs handler when user
>> > tries to enable "threaded" on napi, and properly handles the
>> > kthread_create() failure. This is because certain drivers do not have
>> > the napi created and linked to the dev when dev_open() is called. So
>> > the previous implementation does not work properly there.
>> >
>> > Signed-off-by: Wei Wang <weiwan@google.com>
>> > ---
>> > Changes since RFC:
>> > changed the thread name to napi/<dev>-<napi-id>
>> >
>> >  net/core/dev.c       | 49 +++++++++++++++++++++++++-------------------
>> >  net/core/net-sysfs.c |  9 +++-----
>> >  2 files changed, 31 insertions(+), 27 deletions(-)
>> >
>> > diff --git a/net/core/dev.c b/net/core/dev.c
>> > index b4f33e442b5e..bf878d3a9d89 100644
>> > --- a/net/core/dev.c
>> > +++ b/net/core/dev.c
>> > @@ -1490,17 +1490,24 @@ EXPORT_SYMBOL(netdev_notify_peers);
>> >
>> >  static int napi_threaded_poll(void *data);
>> >
>> > -static void napi_thread_start(struct napi_struct *n)
>> > +static int napi_kthread_create(struct napi_struct *n)
>> >  {
>> > -     if (test_bit(NAPI_STATE_THREADED, &n->state) && !n->thread)
>> > -             n->thread = kthread_create(napi_threaded_poll, n, "%s-%d",
>> > -                                        n->dev->name, n->napi_id);
>> > +     int err = 0;
>> > +
>> > +     n->thread = kthread_create(napi_threaded_poll, n, "napi/%s-%d",
>> > +                                n->dev->name, n->napi_id);
>> > +     if (IS_ERR(n->thread)) {
>> > +             err = PTR_ERR(n->thread);
>> > +             pr_err("kthread_create failed with err %d\n", err);
>> > +             n->thread = NULL;
>> > +     }
>> > +
>> > +     return err;
>> If I remember correctly, using kthread_create with no explicit first
>> wakeup means the task will sit there and contribute to system loadavg
>> until it is woken up the first time.
>> Shouldn't we use kthread_run here instead?
>>
> 
> Right. kthread_create() basically creates the thread and leaves it in
> sleep mode. I think that is what we want. We rely on the next
> ___napi_schedule() call to wake up this thread when there is work to
> do.
But what if you have a device that's basically idle and napi isn't
scheduled until much later? It will get a confusing loadavg until then.
I'd prefer waking up the thread immediately and filtering going back to
sleep once in the thread function before running the loop if
NAPI_STATE_SCHED wasn't set.

- Felix

  reply	other threads:[~2020-10-01 17:12 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-30 19:21 [PATCH net-next 0/5] implement kthread based napi poll Wei Wang
2020-09-30 19:21 ` [PATCH net-next 1/5] net: implement threaded-able napi poll loop support Wei Wang
2020-09-30 19:21 ` [PATCH net-next 2/5] net: add sysfs attribute to control napi threaded mode Wei Wang
2020-09-30 19:21 ` [PATCH net-next 3/5] net: extract napi poll functionality to __napi_poll() Wei Wang
2020-09-30 19:21 ` [PATCH net-next 4/5] net: modify kthread handler to use __napi_poll() Wei Wang
2020-09-30 19:21 ` [PATCH net-next 5/5] net: improve napi threaded config Wei Wang
2020-10-01 10:01   ` Felix Fietkau
2020-10-01 17:01     ` Wei Wang
2020-10-01 17:11       ` Felix Fietkau [this message]
2020-10-01 18:03         ` Eric Dumazet
2020-10-01 18:37           ` Felix Fietkau
2020-10-01 19:24             ` Wei Wang
2020-10-01 20:48               ` Felix Fietkau
2020-10-01 22:42                 ` Wei Wang
2020-09-30 20:08 ` [PATCH net-next 0/5] implement kthread based napi poll Jakub Kicinski
2020-10-01  7:52   ` Eric Dumazet
2020-10-01 20:26     ` Jakub Kicinski
2020-10-01 22:12       ` Wei Wang
2020-10-01 23:46         ` Jakub Kicinski
2020-10-02  1:44           ` Wei Wang
2020-10-02 22:53             ` Jakub Kicinski
2020-10-02  7:56       ` Eric Dumazet
2020-10-02 22:49         ` Jakub Kicinski
2020-10-02 23:00 ` David Miller
2020-10-02 23:15   ` Alexei Starovoitov
2020-10-03  3:54     ` Eric Dumazet
2020-10-03  4:17       ` Alexei Starovoitov

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=e9fdabda-72b1-fabd-8522-38965a62744c@nbd.name \
    --to=nbd@nbd.name \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=hannes@stressinduktion.org \
    --cc=kuba@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=weiwan@google.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.