From: Rusty Russell <rusty@rustcorp.com.au>
To: David Miller <davem@davemloft.net>
Cc: netdev@vger.kernel.org, markmc@redhat.com
Subject: Re: [PATCH 1/3] virtio_net: Recycle some more rx buffer pages
Date: Mon, 17 Nov 2008 17:35:43 +1030 [thread overview]
Message-ID: <200811171735.44025.rusty@rustcorp.com.au> (raw)
In-Reply-To: <20081116.194505.140648013.davem@davemloft.net>
On Monday 17 November 2008 14:15:05 David Miller wrote:
> From: Rusty Russell <rusty@rustcorp.com.au>
> Date: Mon, 17 Nov 2008 13:44:57 +1030
>
> > @@ -82,6 +82,16 @@ static void give_a_page(struct virtnet_info *vi,
> > struct page *page)
>
> -E_EMAIL_CLIENT_NEWLINES
From: Mark McLoughlin <markmc@redhat.com>
Each time we re-fill the recv queue with buffers, we allocate
one too many skbs and free it again when adding fails. We should
recycle the pages allocated in this case.
A previous version of this patch made trim_pages() trim trailing
unused pages from skbs with some paged data, but this actually
caused a barely measurable slowdown.
Signed-off-by: Mark McLoughlin <markmc@redhat.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (use netdev_priv)
---
drivers/net/virtio_net.c | 21 +++++++++++++--------
1 file changed, 13 insertions(+), 8 deletions(-)
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index 0196a0d..985271a 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -82,6 +82,16 @@ static void give_a_page(struct virtnet_info *vi, struct page *page)
vi->pages = page;
}
+static void trim_pages(struct virtnet_info *vi, struct sk_buff *skb)
+{
+ unsigned int i;
+
+ for (i = 0; i < skb_shinfo(skb)->nr_frags; i++)
+ give_a_page(vi, skb_shinfo(skb)->frags[i].page);
+ skb_shinfo(skb)->nr_frags = 0;
+ skb->data_len = 0;
+}
+
static struct page *get_a_page(struct virtnet_info *vi, gfp_t gfp_mask)
{
struct page *p = vi->pages;
@@ -121,14 +131,8 @@ static void receive_skb(struct net_device *dev, struct sk_buff *skb,
}
len -= sizeof(struct virtio_net_hdr);
- if (len <= MAX_PACKET_LEN) {
- unsigned int i;
-
- for (i = 0; i < skb_shinfo(skb)->nr_frags; i++)
- give_a_page(dev->priv, skb_shinfo(skb)->frags[i].page);
- skb->data_len = 0;
- skb_shinfo(skb)->nr_frags = 0;
- }
+ if (len <= MAX_PACKET_LEN)
+ trim_pages(netdev_priv(dev), skb);
err = pskb_trim(skb, len);
if (err) {
@@ -232,6 +236,7 @@ static void try_fill_recv(struct virtnet_info *vi)
err = vi->rvq->vq_ops->add_buf(vi->rvq, sg, 0, num, skb);
if (err) {
skb_unlink(skb, &vi->recv);
+ trim_pages(vi, skb);
kfree_skb(skb);
break;
}
next prev parent reply other threads:[~2008-11-17 7:05 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-11-17 3:14 [PATCH 1/3] virtio_net: Recycle some more rx buffer pages Rusty Russell
2008-11-17 3:16 ` [PATCH 2/3] virtio_net: hook up the set-tso ethtool op Rusty Russell
2008-11-17 3:17 ` [PATCH 3/3] virtio_net: VIRTIO_NET_F_MSG_RXBUF (imprive rcv buffer allocation) Rusty Russell
2008-11-17 6:42 ` David Miller
2008-11-17 6:40 ` [PATCH 2/3] virtio_net: hook up the set-tso ethtool op David Miller
2008-11-17 3:45 ` [PATCH 1/3] virtio_net: Recycle some more rx buffer pages David Miller
2008-11-17 6:40 ` David Miller
2008-11-17 7:08 ` Rusty Russell
2008-11-17 7:14 ` David Miller
2008-11-17 7:05 ` Rusty Russell [this message]
2008-11-17 7:08 ` David Miller
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=200811171735.44025.rusty@rustcorp.com.au \
--to=rusty@rustcorp.com.au \
--cc=davem@davemloft.net \
--cc=markmc@redhat.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 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.