From: jamal <hadi@cyberus.ca>
To: Herbert Xu <herbert@gondor.apana.org.au>
Cc: netdev@vger.kernel.org, jgarzik@pobox.com, mchan@broadcom.com,
David Miller <davem@davemloft.net>, Andi Kleen <ak@suse.de>,
Robert Olsson <Robert.Olsson@data.slu.se>
Subject: Re: netif_tx_disable and lockless TX
Date: Wed, 31 May 2006 08:36:12 -0400 [thread overview]
Message-ID: <1149078972.5462.72.camel@jzny2> (raw)
In-Reply-To: <20060531120626.GA11925@gondor.apana.org.au>
On Wed, 2006-31-05 at 22:06 +1000, Herbert Xu wrote:
> On Wed, May 31, 2006 at 12:08:18AM -0700, David Miller wrote:
> >
> > I understand what you're saying. What I'm talking about is that in
> > net channel drivers we might go back to IRQ disabling locks again.
>
> OK, let's assume that the TX completion will go back into the IRQ
> handler. I contend that we can still get by with a BH-disabling
> xmit_lock. This is how it would work:
>
> The IRQ handler would look like
>
> if (!spin_trylock(&dev->xmit_lock)) {
> tasklet_schedule(&priv->tx_completion_tasklet);
> return;
> }
>
> handle_tx_completion();
> spin_unlock(&dev->xmit_lock);
>
> Where the TX completion tasklet would simply do
>
> spin_lock(&dev->xmit_lock);
> handle_tx_completion();
> spin_unlock(&dev->xmit_lock);
>
> What do you think?
Been done in the past, bad numbers especially in SMP for reasons of
latency and likelihood that a tasklet will run in a totally different
CPU.
Latency-wise: TX completion interrupt provides the best latency.
Processing in the poll() -aka softirq- was almost close to the hardirq
variant. So if you can make things run in a softirq such as transmit
one, then the numbers will likely stay the same.
Sorry, I havent been following discussions on netchannels[1] so i am not
qualified to comment on the "replacement" part Dave mentioned earlier.
What I can say is the tx processing doesnt have to be part of the NAPI
poll() and still use hardirq.
If you look at the earlier NAPI drivers such as the tulip or the
broadcom 1250, the TX EOL was always made an exception and was never
touched by the ->poll() code rather by the main interrupt routine. I do
prefer the scheme of leaving the TX EOL out of the NAPI poll because i
believe that it provides better performance. The caveat is there's a lot
of fscked hardware out there that does unconditional clear-on-read of
the int status register;-> I had a lot of fun with bcm1250 and ended
discovering that there were infact two status regs ;-> (it pays to know
people for undocumented things;->) one was for debug version which
doesnt clear on writing. So in one spot i would read the real register
and in the other the debug version. I had numbers which showed doing it
this way provided better performance than doing it in the poll() routine
(scouring the code just now it seems my version never made it in, so you
will see something along the lines of e1000/tg3).
BTW, Andi Kleen on CC is the person who posted some numbers on the LLTX
(as well as the patch) at some point.
I have also CCed Robert who may have comments on the use of tasklets.
cheers,
jamal
[1] Such a shame, such an exciting topic, such few cycles. I will have
time RealSoonNow and you will probably see a_patch_from_me_too.
next prev parent reply other threads:[~2006-05-31 12:36 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-05-31 4:51 netif_tx_disable and lockless TX Michael Chan
2006-05-31 4:58 ` Herbert Xu
2006-05-31 5:11 ` David Miller
2006-05-31 5:14 ` Herbert Xu
2006-05-31 6:26 ` David Miller
2006-05-31 6:31 ` Herbert Xu
2006-05-31 7:08 ` David Miller
2006-05-31 12:06 ` Herbert Xu
2006-05-31 12:36 ` jamal [this message]
2006-05-31 12:40 ` Herbert Xu
2006-05-31 13:03 ` jamal
2006-05-31 17:52 ` Robert Olsson
2006-06-02 3:25 ` Stephen Hemminger
2006-06-02 10:46 ` Robert Olsson
2006-06-14 12:52 ` jamal
2006-05-31 21:20 ` Michael Chan
2006-06-01 0:09 ` David Miller
2006-06-01 0:25 ` Herbert Xu
2006-05-31 23:01 ` Michael Chan
2006-06-01 0:42 ` Herbert Xu
2006-06-01 0:27 ` Michael Chan
2006-06-01 2:27 ` Herbert Xu
2006-06-01 11:15 ` [NET]: Add netif_tx_lock Herbert Xu
2006-06-06 4:32 ` David Miller
2006-06-06 4:44 ` Roland Dreier
2006-06-06 4:50 ` Roland Dreier
2006-06-06 4:57 ` Roland Dreier
2006-06-06 5:10 ` David Miller
2006-06-06 6:01 ` Roland Dreier
2006-06-06 4:58 ` David Miller
2006-06-06 5:04 ` Roland Dreier
2006-06-06 5:09 ` David Miller
2006-06-06 4:57 ` David Miller
2006-06-06 10:22 ` Herbert Xu
2006-06-09 5:48 ` Herbert Xu
2006-06-09 19:21 ` David Miller
-- strict thread matches above, loose matches on Subject: below --
2006-05-31 5:30 netif_tx_disable and lockless TX Michael Chan
2006-05-31 5:33 ` Herbert Xu
2006-05-31 4:03 Herbert Xu
2006-05-31 4:13 ` David Miller
2006-05-31 4:17 ` Herbert Xu
2006-05-31 4:13 ` Roland Dreier
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=1149078972.5462.72.camel@jzny2 \
--to=hadi@cyberus.ca \
--cc=Robert.Olsson@data.slu.se \
--cc=ak@suse.de \
--cc=davem@davemloft.net \
--cc=herbert@gondor.apana.org.au \
--cc=jgarzik@pobox.com \
--cc=mchan@broadcom.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).