From: Zoltan Kiss <zoltan.kiss@citrix.com>
To: Eric Dumazet <eric.dumazet@gmail.com>
Cc: "netdev@vger.kernel.org" <netdev@vger.kernel.org>,
"xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
Malcolm Crossley <malcolm.crossley@citrix.com>,
Jonathan Davies <Jonathan.Davies@eu.citrix.com>,
Paul Durrant <Paul.Durrant@citrix.com>,
Wei Liu <wei.liu2@citrix.com>,
Ian Campbell <Ian.Campbell@citrix.com>
Subject: Re: NAPI rescheduling and the delay caused by it
Date: Wed, 4 Dec 2013 21:23:23 +0000 [thread overview]
Message-ID: <529F9D4B.1020208@citrix.com> (raw)
In-Reply-To: <1386189718.30495.131.camel@edumazet-glaptop2.roam.corp.google.com>
On 04/12/13 20:41, Eric Dumazet wrote:
> On Wed, 2013-12-04 at 18:55 +0000, Zoltan Kiss wrote:
>
>> So, my questions are:
>> - why is NAPI rescheduled on an another CPU?
>> - why does it cause a 3-4 milisec delay?
>
> NAPI can not be scheduled on another cpu.
>
> But at the time of napi_schedule() call, napi_struct can be already be
> scheduled by another cpu.
>
> ( NAPI_STATE_SCHED bit already set)
> So I would say something made the 'other' cpu non responsive fast enough
> to softirq events being ready for service.
>
> (Another wakeup happened 3-4 millisec later)
Oh, thanks! I forgot to mention, I have my grant mapping patches
applied. The callback when the previous packet is sent to the another
vif schedules the NAPI instance on that other CPU. But it's still not
clear why it takes so long to serve that softirq!
> Really, I suspect your usage of netif_wake_queue() is simply wrong.
>
> Check why we have netif_rx() and netif_rx_ni() variants.
>
> And ask yourself if xenvif_notify_tx_completion() is correct, being
> called from process context.
So, at the moment we use netif_wake_queue to notify the stack that it
can call xenvif_start_xmit, the thread is ready to accept new packets
for transmission. It is called when we get an interrupt from the
frontend (it marks it made room in the ring), and from
xenvif_notify_tx_completion at the end of the thread. The latter checks
if queueing were stopped in the meantime, and see if the guest made
space after our recent transmission.
I see netif_rx_ni makes sure the softirq is executed, but I'm not sure I
get how is it related to wake_queue. Can you explain a bit more?
Thanks,
Zoli
next prev parent reply other threads:[~2013-12-04 21:23 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-04 18:55 NAPI rescheduling and the delay caused by it Zoltan Kiss
2013-12-04 20:41 ` Eric Dumazet
2013-12-04 21:23 ` Zoltan Kiss [this message]
2013-12-04 23:32 ` Eric Dumazet
2013-12-04 23:32 ` Eric Dumazet
2013-12-09 23:39 ` Zoltan Kiss
2013-12-10 1:14 ` Eric Dumazet
2013-12-10 1:17 ` Eric Dumazet
2013-12-10 1:17 ` Eric Dumazet
2013-12-11 18:52 ` Zoltan Kiss
2013-12-11 18:52 ` Zoltan Kiss
2013-12-10 1:14 ` Eric Dumazet
2013-12-09 23:39 ` Zoltan Kiss
2013-12-04 21:23 ` Zoltan Kiss
2013-12-04 20:41 ` Eric Dumazet
-- strict thread matches above, loose matches on Subject: below --
2013-12-04 18:55 Zoltan Kiss
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=529F9D4B.1020208@citrix.com \
--to=zoltan.kiss@citrix.com \
--cc=Ian.Campbell@citrix.com \
--cc=Jonathan.Davies@eu.citrix.com \
--cc=Paul.Durrant@citrix.com \
--cc=eric.dumazet@gmail.com \
--cc=malcolm.crossley@citrix.com \
--cc=netdev@vger.kernel.org \
--cc=wei.liu2@citrix.com \
--cc=xen-devel@lists.xenproject.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 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.