From: linas@austin.ibm.com (Linas Vepstas)
To: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: James K Lewis <jklewis@us.ibm.com>, Arnd Bergmann <arnd@arndb.de>,
"cbe-oss-dev@ozlabs.org" <cbe-oss-dev@ozlabs.org>,
cbe-oss-dev-bounces+jklewis=us.ibm.com@ozlabs.org,
Christoph Hellwig <hch@lst.de>,
netdev@vger.kernel.org
Subject: NAPI wait before enabling irq's [was Re: [Cbe-oss-dev] Spider DMA wrongness]
Date: Thu, 14 Dec 2006 14:54:32 -0600 [thread overview]
Message-ID: <20061214205432.GA4329@austin.ibm.com> (raw)
In-Reply-To: <1162931892.28571.497.camel@localhost.localdomain>
On Wed, Nov 08, 2006 at 07:38:12AM +1100, Benjamin Herrenschmidt wrote:
>
> What about Linas patches to do interrupt mitigation with NAPI polling ?
> That didn't end up working ?
It seems to be "working as designed", which is different than "working
as naively expected".
For large packets:
-- a packet comes in
-- rx interrupt generated
-- rx interrupts turned off
-- tcp poll function runs, receives packet
-- completes all work before next packet has arrived,
so interupts are turned back on.
-- go to start
This results in a high number of interrupts, and a high cpu usage.
We were able to prove that napi works by stalling in the poll function
just long enough to allow the next packet to arrive. In this case,
napi works great, and number of irqs is vastly reduced.
Unfortunately, I could not figure out any simple way of turning this
into acceptable code. I can't just wait a little bit before turning
on interrupts. Some network apps, such as netpipe, want to receive
something before sending the next thing. Without the interrupt, the
packet just sits there, and the OS doesn't realize (until milliseconds
later) that there's a packet that can be handled. This is a variant
of the so-called "rotting packet" discussed in the napi docs.
What is needed is for the tcp stack to wait for
1500Bytes / (1Gbit/sec) = 12 microsecs
and then poll again. If there are *still* no new packets, then and
only then do we re-enable interrupts. This would require a new napi.
Presuming the network stack folks find it even remotely acceptable.
--linas
next parent reply other threads:[~2006-12-14 20:54 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <OFBF8BBD4B.0E5AEA34-ON8725721F.005D5313-8625721F.005EAC5D@us.ibm.com>
[not found] ` <1162931892.28571.497.camel@localhost.localdomain>
2006-12-14 20:54 ` Linas Vepstas [this message]
2006-12-14 20:51 ` NAPI wait before enabling irq's [was Re: [Cbe-oss-dev] Spider DMA wrongness] akepner
2006-12-14 22:49 ` Linas Vepstas
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=20061214205432.GA4329@austin.ibm.com \
--to=linas@austin.ibm.com \
--cc=arnd@arndb.de \
--cc=benh@kernel.crashing.org \
--cc=cbe-oss-dev-bounces+jklewis=us.ibm.com@ozlabs.org \
--cc=cbe-oss-dev@ozlabs.org \
--cc=hch@lst.de \
--cc=jklewis@us.ibm.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