netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Eric Dumazet <eric.dumazet@gmail.com>
Cc: Willy Tarreau <w@1wt.eu>, David Miller <davem@davemloft.net>,
	netdev@vger.kernel.org
Subject: Re: [PATCH net-next] net: netdev_alloc_skb() use build_skb()
Date: Mon, 4 Jun 2012 16:41:38 +0300	[thread overview]
Message-ID: <20120604134138.GA29814@redhat.com> (raw)
In-Reply-To: <1338815213.2760.1806.camel@edumazet-glaptop>

On Mon, Jun 04, 2012 at 03:06:53PM +0200, Eric Dumazet wrote:
> On Mon, 2012-06-04 at 15:37 +0300, Michael S. Tsirkin wrote:
> > On Thu, May 17, 2012 at 07:34:16PM +0200, Eric Dumazet wrote:
> > > From: Eric Dumazet <edumazet@google.com>
> > > 
> > > Please note I havent tested yet this patch, lacking hardware for this.
> > > 
> > > (tg3/bnx2/bnx2x use build_skb, r8169 does a copy of incoming frames,
> > > ixgbe uses fragments...)
> > 
> > virtio-net uses netdev_alloc_skb but maybe it should call
> > build_skb instead?
> > 
> > Also, it's not uncommon for drivers to copy short packets out to be able
> > to reuse pages.  virtio does this but I am guessing the logic is not
> > really virtio specific.
> > 
> > We could do
> > 	if (len < GOOD_COPY_LEN)
> > 		netdev_alloc_skb
> > 		memmov
> > 	else
> > 		build_skb
> > 
> > but maybe it makes sense to put this logic in build_skb?
> > 
> > 
> 
> I am not sure to understand the question.
> 
> If virtio-net uses netdev_alloc_skb(), all is good, you have nothing to
> change.
> 
> build_skb() is for drivers that allocate the memory to hold frame, and
> wait for NIC completion before allocating/populating the skb itself.
> 


This is generally what virtio does, take a look:
page_to_skb fills the first fragment and receive_mergeable fills the
rest (other modes are for legacy hardware).

The way hypervisor now works is this (we call it mergeable buffers):

- pages are passed to hardware
- hypervisor puts virtio specific stuff in first 12 bytes
  on first page
- following this, the rest of the first page and all following
  pages have data

The driver gets the 1st page, allocates the skb, copies out the 12 byte
header and copies the first 128 bytes of data into skb.
The rest if any is populated by the pages.

So I guess I'm asking for advice, would it make sense to switch to build_skb
and how best to handle the data copying above? Maybe it would help
if we changed the hypervisor to write the 12 bytes separately?
  


-- 
MST

  reply	other threads:[~2012-06-04 13:42 UTC|newest]

Thread overview: 61+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-05-17 12:18 Stable regression with 'tcp: allow splice() to build full TSO packets' Willy Tarreau
2012-05-17 15:01 ` Willy Tarreau
2012-05-17 15:43   ` Eric Dumazet
2012-05-17 15:56     ` Willy Tarreau
2012-05-17 16:33       ` Eric Dumazet
2012-05-17 16:40         ` Willy Tarreau
2012-05-17 16:47           ` Eric Dumazet
2012-05-17 16:49           ` Eric Dumazet
2012-05-17 17:22             ` Willy Tarreau
2012-05-17 17:34             ` [PATCH net-next] net: netdev_alloc_skb() use build_skb() Eric Dumazet
2012-05-17 17:45               ` Willy Tarreau
2012-06-04 12:39                 ` Michael S. Tsirkin
2012-06-04 12:44                   ` Willy Tarreau
2012-05-17 19:53               ` David Miller
2012-05-18  4:41                 ` Eric Dumazet
2012-06-04 12:37               ` Michael S. Tsirkin
2012-06-04 13:06                 ` Eric Dumazet
2012-06-04 13:41                   ` Michael S. Tsirkin [this message]
2012-06-04 14:01                     ` Eric Dumazet
2012-06-04 14:09                       ` Eric Dumazet
2012-06-04 14:17                       ` Michael S. Tsirkin
2012-06-04 15:01                         ` Eric Dumazet
2012-06-04 17:20                           ` Michael S. Tsirkin
2012-06-04 17:44                             ` Eric Dumazet
2012-06-04 18:16                               ` Michael S. Tsirkin
2012-06-04 19:24                                 ` Eric Dumazet
2012-06-04 19:48                                   ` Michael S. Tsirkin
2012-06-04 19:56                                     ` Eric Dumazet
2012-06-04 21:20                                       ` Michael S. Tsirkin
2012-06-05  2:50                                         ` Eric Dumazet
2012-06-04 18:16                           ` Michael S. Tsirkin
2012-06-04 19:29                             ` Eric Dumazet
2012-06-04 19:43                               ` Michael S. Tsirkin
2012-06-04 19:52                                 ` Eric Dumazet
2012-06-04 21:54                                   ` Michael S. Tsirkin
2012-06-05  2:46                                     ` Eric Dumazet
2012-06-04 19:56                                 ` Michael S. Tsirkin
2012-06-04 20:05                                   ` Eric Dumazet
2012-05-17 18:38       ` Stable regression with 'tcp: allow splice() to build full TSO packets' Ben Hutchings
2012-05-17 19:55   ` David Miller
2012-05-17 20:04     ` Willy Tarreau
2012-05-17 20:07       ` David Miller
2012-05-17 20:41 ` Eric Dumazet
2012-05-17 21:14   ` Willy Tarreau
2012-05-17 21:40     ` Eric Dumazet
2012-05-17 21:50       ` Eric Dumazet
2012-05-17 21:57         ` Willy Tarreau
2012-05-17 22:01         ` Eric Dumazet
2012-05-17 22:10           ` Eric Dumazet
2012-05-17 22:16           ` Willy Tarreau
2012-05-17 22:22             ` Eric Dumazet
2012-05-17 22:24               ` Willy Tarreau
2012-05-17 22:25                 ` David Miller
2012-05-17 22:30                   ` Willy Tarreau
2012-05-17 22:35                     ` David Miller
2012-05-17 22:49                       ` Willy Tarreau
2012-05-17 22:27               ` Joe Perches
2012-05-17 21:54       ` Willy Tarreau
2012-05-17 21:47     ` Willy Tarreau
2012-05-17 22:14     ` Eric Dumazet
2012-05-17 22:29       ` Willy Tarreau

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=20120604134138.GA29814@redhat.com \
    --to=mst@redhat.com \
    --cc=davem@davemloft.net \
    --cc=eric.dumazet@gmail.com \
    --cc=netdev@vger.kernel.org \
    --cc=w@1wt.eu \
    /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).