From: "David S. Miller" <davem@davemloft.net>
To: ak@suse.de
Cc: leonid.grossman@neterion.com, hadi@cyberus.ca, becker@scyld.com,
rick.jones2@hp.com, netdev@oss.sgi.com, davem@redhat.com
Subject: Re: RFC: NAPI packet weighting patch
Date: Wed, 22 Jun 2005 13:22:41 -0700 (PDT) [thread overview]
Message-ID: <20050622.132241.21929037.davem@davemloft.net> (raw)
In-Reply-To: <20050622180654.GX14251@wotan.suse.de>
From: Andi Kleen <ak@suse.de>
Date: Wed, 22 Jun 2005 20:06:55 +0200
> However it is tricky because CPUs have only a limited load queue
> entries and doing too many prefetches will just overflow that.
Several processors can queue about 8 prefetch requests, and
these slots are independant of those consumed by a load.
Yes, if you queue too many prefetches, the queue overflows.
I think the optimal scheme would be:
1) eth_type_trans() info in RX descriptor
2) prefetch(skb->data) done as early as possible in driver
RX handling
Actually, I believe to most optimal scheme is:
foo_driver_rx()
{
for_each_rx_descriptor() {
...
skb = driver_priv->rx_skbs[index];
prefetch(skb->data);
skb = realloc_or_recycle_rx_descriptor(skb, index);
if (skb == NULL)
goto next_rxd;
skb->prot = eth_type_trans(skb, driver_priv->dev);
netif_receive_skb(skb);
...
next_rxd:
...
}
}
The idea is that first the prefetch goes into flight, then you do the
recycle or reallocation of the RX descriptor SKB, then you try to
touch the data.
This makes it very likely the prefetch will be in the cpu in time.
Everyone seems to have this absolute fetish about batching the RX
descriptor refilling work. It's wrong, it should be done when you
pull a receive packet off the ring, for many reasons. Off the top of
my head:
1) Descriptors are refilled as soon as possible, decreasing
the chance of the device hitting the end of the RX ring
and thus unable to receive a packet.
2) As shown above, it gives you compute time which can be used to
schedule the prefetch. This nearly makes RX replenishment free.
Instead of having the CPU spin on a cache miss when we run
eth_type_trans() during those cycles, we do useful work.
I'm going to play around with these ideas in the tg3 driver.
Obvious patch below.
--- 1/drivers/net/tg3.c.~1~ 2005-06-22 12:33:07.000000000 -0700
+++ 2/drivers/net/tg3.c 2005-06-22 13:19:13.000000000 -0700
@@ -2772,6 +2772,13 @@
goto next_pkt_nopost;
}
+ /* Prefetch now. The recycle/realloc of the RX
+ * entry is moderately expensive, so by the time
+ * that is complete the data should have reached
+ * the cpu.
+ */
+ prefetch(skb->data);
+
work_mask |= opaque_key;
if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
next prev parent reply other threads:[~2005-06-22 20:22 UTC|newest]
Thread overview: 121+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-06-06 20:29 RFC: NAPI packet weighting patch Ronciak, John
2005-06-06 23:55 ` Mitch Williams
2005-06-07 0:08 ` Ben Greear
2005-06-08 1:50 ` Jesse Brandeburg
2005-06-07 4:53 ` Stephen Hemminger
2005-06-07 12:38 ` jamal
2005-06-07 12:06 ` Martin Josefsson
2005-06-07 13:29 ` jamal
2005-06-07 12:36 ` Martin Josefsson
2005-06-07 16:34 ` Robert Olsson
2005-06-07 23:19 ` Rick Jones
2005-06-21 20:37 ` David S. Miller
2005-06-22 7:27 ` Eric Dumazet
2005-06-22 8:42 ` P
2005-06-22 19:37 ` jamal
2005-06-23 8:56 ` P
2005-06-21 20:20 ` David S. Miller
2005-06-21 20:38 ` Rick Jones
2005-06-21 20:55 ` David S. Miller
2005-06-21 21:47 ` Andi Kleen
2005-06-21 22:22 ` Donald Becker
2005-06-21 22:34 ` Andi Kleen
2005-06-22 0:08 ` Donald Becker
2005-06-22 4:44 ` Chris Friesen
2005-06-22 11:31 ` Andi Kleen
2005-06-22 16:23 ` Leonid Grossman
2005-06-22 16:37 ` jamal
2005-06-22 18:00 ` Leonid Grossman
2005-06-22 18:06 ` Andi Kleen
2005-06-22 20:22 ` David S. Miller [this message]
2005-06-22 20:35 ` Rick Jones
2005-06-22 20:43 ` David S. Miller
2005-06-22 21:10 ` Andi Kleen
2005-06-22 21:16 ` David S. Miller
2005-06-22 21:53 ` Chris Friesen
2005-06-22 22:11 ` Andi Kleen
2005-06-22 21:38 ` Eric Dumazet
2005-06-22 22:13 ` Eric Dumazet
2005-06-22 22:30 ` David S. Miller
2005-06-22 22:23 ` David S. Miller
2005-06-23 12:14 ` jamal
2005-06-23 17:36 ` David Mosberger
2005-06-22 22:42 ` Leonid Grossman
2005-06-22 23:13 ` Andi Kleen
2005-06-22 23:19 ` David S. Miller
2005-06-22 23:23 ` Andi Kleen
2005-06-22 17:05 ` Andi Kleen
-- strict thread matches above, loose matches on Subject: below --
2005-06-07 16:23 Ronciak, John
2005-06-07 20:21 ` David S. Miller
2005-06-08 2:20 ` Jesse Brandeburg
2005-06-08 3:31 ` David S. Miller
2005-06-08 3:43 ` David S. Miller
2005-06-08 13:36 ` jamal
2005-06-09 21:37 ` Jesse Brandeburg
2005-06-09 22:05 ` Stephen Hemminger
2005-06-09 22:12 ` Jesse Brandeburg
2005-06-09 22:21 ` David S. Miller
2005-06-09 22:21 ` jamal
2005-06-09 22:22 ` David S. Miller
2005-06-09 22:20 ` jamal
2005-06-06 15:35 Ronciak, John
2005-06-06 19:47 ` David S. Miller
2005-06-03 18:19 Ronciak, John
2005-06-03 18:33 ` Ben Greear
2005-06-03 18:49 ` David S. Miller
2005-06-03 18:59 ` Ben Greear
2005-06-03 19:02 ` David S. Miller
2005-06-03 20:17 ` Robert Olsson
2005-06-03 20:30 ` David S. Miller
2005-06-03 17:40 Ronciak, John
2005-06-03 18:08 ` Robert Olsson
2005-06-03 0:11 Ronciak, John
2005-06-03 0:18 ` David S. Miller
2005-06-03 2:32 ` jamal
2005-06-03 17:43 ` Mitch Williams
2005-06-03 18:38 ` David S. Miller
2005-06-03 18:42 ` jamal
2005-06-03 19:01 ` David S. Miller
2005-06-03 19:28 ` Mitch Williams
2005-06-03 19:59 ` jamal
2005-06-03 20:31 ` David S. Miller
2005-06-03 21:12 ` Jon Mason
2005-06-03 20:22 ` David S. Miller
2005-06-03 20:29 ` David S. Miller
2005-06-03 19:49 ` Michael Chan
2005-06-03 20:59 ` Lennert Buytenhek
2005-06-03 20:35 ` Michael Chan
2005-06-03 22:29 ` jamal
2005-06-04 0:25 ` Michael Chan
2005-06-05 21:36 ` David S. Miller
2005-06-06 6:43 ` David S. Miller
2005-06-03 23:26 ` Lennert Buytenhek
2005-06-05 20:11 ` David S. Miller
2005-06-03 21:07 ` Edgar E Iglesias
2005-06-03 23:30 ` Lennert Buytenhek
2005-06-03 20:30 ` Ben Greear
2005-06-03 19:40 ` jamal
2005-06-03 20:23 ` jamal
2005-06-03 20:28 ` Mitch Williams
2005-06-02 21:19 Ronciak, John
2005-06-02 21:31 ` Stephen Hemminger
2005-06-02 21:40 ` David S. Miller
2005-06-02 21:51 ` Jon Mason
2005-06-02 22:12 ` David S. Miller
2005-06-02 22:19 ` Jon Mason
2005-06-02 22:15 ` Robert Olsson
2005-05-26 21:36 Mitch Williams
2005-05-27 8:21 ` Robert Olsson
2005-05-27 11:18 ` jamal
2005-05-27 15:50 ` Stephen Hemminger
2005-05-27 20:27 ` Mitch Williams
2005-05-27 21:01 ` Stephen Hemminger
2005-05-28 0:56 ` jamal
2005-05-31 17:35 ` Mitch Williams
2005-05-31 17:40 ` Stephen Hemminger
2005-05-31 17:43 ` Mitch Williams
2005-05-31 22:07 ` Jon Mason
2005-05-31 22:14 ` David S. Miller
2005-05-31 23:28 ` Jon Mason
2005-06-02 12:26 ` jamal
2005-06-02 17:30 ` Stephen Hemminger
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=20050622.132241.21929037.davem@davemloft.net \
--to=davem@davemloft.net \
--cc=ak@suse.de \
--cc=becker@scyld.com \
--cc=davem@redhat.com \
--cc=hadi@cyberus.ca \
--cc=leonid.grossman@neterion.com \
--cc=netdev@oss.sgi.com \
--cc=rick.jones2@hp.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 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).