netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: "Xin, Xiaohui" <xiaohui.xin@intel.com>
Cc: Herbert Xu <herbert@gondor.hengli.com.au>,
	"Dong, Eddie" <eddie.dong@intel.com>,
	Stephen Hemminger <shemminger@vyatta.com>,
	"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"mingo@elte.hu" <mingo@elte.hu>,
	"davem@davemloft.net" <davem@davemloft.net>,
	"jdike@linux.intel.com" <jdike@linux.intel.com>
Subject: Re: [RFC PATCH v7 01/19] Add a new structure for skb buffer from external.
Date: Mon, 28 Jun 2010 13:00:01 +0300	[thread overview]
Message-ID: <20100628100000.GA30628@redhat.com> (raw)
In-Reply-To: <F2E9EB7348B8264F86B6AB8151CE2D7916B0129230@shsmsx502.ccr.corp.intel.com>

On Mon, Jun 28, 2010 at 05:56:07PM +0800, Xin, Xiaohui wrote:
> >-----Original Message-----
> >From: Herbert Xu [mailto:herbert@gondor.apana.org.au]
> >Sent: Sunday, June 27, 2010 2:15 PM
> >To: Dong, Eddie
> >Cc: Xin, Xiaohui; Stephen Hemminger; netdev@vger.kernel.org; kvm@vger.kernel.org;
> >linux-kernel@vger.kernel.org; mst@redhat.com; mingo@elte.hu; davem@davemloft.net;
> >jdike@linux.intel.com
> >Subject: Re: [RFC PATCH v7 01/19] Add a new structure for skb buffer from external.
> >
> >On Fri, Jun 25, 2010 at 09:03:46AM +0800, Dong, Eddie wrote:
> >>
> >> In current patch, each SKB for the assigned device (SRIOV VF or NIC or a complete
> >queue pairs) uses the buffer from guest, so it eliminates copy completely in software and
> >requires hardware to do so. If we can have an additonal place to store the buffer per skb (may
> >cause copy later on), we can do copy later on or re-post the buffer to assigned NIC driver
> >later on. But that may be not very clean either :(
> >
> >OK, if I understand you correctly then I don't think have a
> >problem.  With your current patch-set you have exactly the same
> >situation when the skb->data is reallocated as a kernel buffer.
> >
> 
> When will skb->data to be reallocated? May you point me the code path?
> 
> >This is OK because as you correctly argue, it is a rare situation.
> >
> >With my proposal you will need to get this extra external buffer
> >in even less cases, because you'd only need to do it if the skb
> >head grows, which only happens if it becomes encapsulated.
> >So let me explain it in a bit more detail:
> >
> >Our packet starts out as a purely non-linear skb, i.e., skb->head
> >contains nothing and all the page frags come from the guest.
> >
> >During host processing we may pull data into skb->head but the
> >first frag will remain unless we pull all of it.  If we did do
> >that then you would have a free external buffer anyway.
> >
> >Now in the common case the header may be modified or pulled, but
> >it very rarely grows.  So you can just copy the header back into
> >the first frag just before we give it to the guest.
> >
> Since the data is still there, so recompute the page offset and size is ok, right?

Question: can devices use parts of the same page
in frags of different skbs (or for other purposes)? If they do,
we'll corrupt that memory if we try to stick the header there.

We have another option, reserve some buffers
posted by guest and use them if we need to copy
the header. This seems the most straight-forward to me.

> >Only in the case where the packet header grows (e.g., encapsulation)
> >would you need to get an extra external buffer.
> >
> >Cheers,
> >--
> >Email: Herbert Xu <herbert@gondor.apana.org.au>
> >Home Page: http://gondor.apana.org.au/~herbert/
> >PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

  reply	other threads:[~2010-06-28 10:00 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-06-05 10:14 [RFC PATCH v7 01/19] Add a new structure for skb buffer from external xiaohui.xin
2010-06-05 10:14 ` [RFC PATCH v7 02/19] Add a new struct for device to manipulate external buffer xiaohui.xin
2010-06-05 10:14   ` [RFC PATCH v7 03/19] Export 2 func for device to assign/deassign new strucure xiaohui.xin
2010-06-05 10:14     ` [RFC PATCH v7 04/19] Add a ndo_mp_port_prep pointer to net_device_ops xiaohui.xin
2010-06-05 10:14       ` [RFC PATCH v7 05/19] Add a function make external buffer owner to query capability xiaohui.xin
2010-06-05 10:14         ` [RFC PATCH v7 06/19] Add a function to indicate if device use external buffer xiaohui.xin
2010-06-05 10:14           ` [RFC PATCH v7 07/19] Add interface to get external buffers xiaohui.xin
2010-06-05 10:14             ` [RFC PATCH v7 08/19] Make __alloc_skb() to get external buffer xiaohui.xin
2010-06-05 10:14               ` [RFC PATCH v7 09/19] Ignore room skb_reserve() when device is using " xiaohui.xin
2010-06-05 10:14                 ` [RFC PATCH v7 10/19] Don't do skb recycle, if device use " xiaohui.xin
2010-06-05 10:14                   ` [RFC PATCH v7 11/19] Use callback to deal with skb_release_data() specially xiaohui.xin
2010-06-05 10:14                     ` [RFC PATCH v7 12/19] Add a hook to intercept external buffers from NIC driver xiaohui.xin
2010-06-05 10:14                       ` [RFC PATCH v7 13/19] To skip GRO if buffer is external currently xiaohui.xin
2010-06-05 10:14                         ` [RFC PATCH v7 14/19] Add header file for mp device xiaohui.xin
2010-06-05 10:14                           ` [RFC PATCH v7 15/19] Add basic funcs and ioctl to " xiaohui.xin
2010-06-05 10:14                             ` [RFC PATCH v7 16/19] Manipulate external buffers in " xiaohui.xin
2010-06-05 10:14                               ` [RFC PATCH v7 17/19] Export proto_ops to vhost-net driver xiaohui.xin
2010-06-05 10:14                                 ` [RFC PATCH v7 18/19] Add a kconfig entry and make entry for mp device xiaohui.xin
2010-06-05 10:14                                   ` [RFC PATCH v7 19/19] Provides multiple submits and asynchronous notifications xiaohui.xin
2010-06-05 10:14                                     ` [RFC PATCH v7 00/19] Provide a zero-copy method on KVM virtio-net xiaohui.xin
2010-06-05 14:56                     ` [RFC PATCH v7 11/19] Use callback to deal with skb_release_data() specially Eric Dumazet
2010-06-09  7:30                       ` Xin, Xiaohui
2010-06-05 14:53               ` [RFC PATCH v7 08/19] Make __alloc_skb() to get external buffer Eric Dumazet
2010-06-09  7:34                 ` Xin, Xiaohui
2010-06-05 14:51     ` [RFC PATCH v7 03/19] Export 2 func for device to assign/deassign new strucure Eric Dumazet
2010-06-06 23:13 ` [RFC PATCH v7 01/19] Add a new structure for skb buffer from external Stephen Hemminger
2010-06-07  7:51   ` Andi Kleen
2010-06-07  8:17     ` Mitchell Erblich
2010-06-09  9:22       ` Xin, Xiaohui
2010-06-09  8:48     ` Xin, Xiaohui
2010-06-08  5:27   ` Herbert Xu
2010-06-09  9:54     ` Xin, Xiaohui
2010-06-11  5:21       ` Herbert Xu
2010-06-12  9:31         ` Xin, Xiaohui
2010-06-13  8:58           ` Xin, Xiaohui
2010-06-17 11:21             ` Herbert Xu
2010-06-18  5:26               ` Xin, Xiaohui
2010-06-18  5:59                 ` Herbert Xu
2010-06-18  7:14                   ` Xin, Xiaohui
2010-06-18  7:45                     ` Herbert Xu
2010-06-20 10:06                     ` Michael S. Tsirkin
2010-06-20 10:32                       ` Herbert Xu
2010-06-20 10:39                         ` Michael S. Tsirkin
2010-06-20 11:02                           ` Herbert Xu
2010-06-20 11:11                             ` Michael S. Tsirkin
2010-06-20 11:36                               ` Herbert Xu
2010-06-20 11:47                                 ` Michael S. Tsirkin
2010-06-20 11:59                                   ` Herbert Xu
2010-06-20 12:48                                     ` Michael S. Tsirkin
2010-06-20 15:19                                     ` Ben Hutchings
2010-06-23  8:09                 ` Dong, Eddie
2010-06-23  9:52                   ` Herbert Xu
2010-06-23 10:05                     ` Dong, Eddie
2010-06-24 10:08                       ` Herbert Xu
2010-06-25  1:03                         ` Dong, Eddie
2010-06-25 11:06                           ` Michael S. Tsirkin
2010-06-27  6:14                           ` Herbert Xu
2010-06-28  9:56                             ` Xin, Xiaohui
2010-06-28 10:00                               ` Michael S. Tsirkin [this message]
2010-07-03  9:12                               ` Herbert Xu
2010-06-25  2:07                         ` Xin, Xiaohui
2010-06-17 11:20           ` Herbert Xu
2010-06-09  8:29   ` Xin, Xiaohui

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=20100628100000.GA30628@redhat.com \
    --to=mst@redhat.com \
    --cc=davem@davemloft.net \
    --cc=eddie.dong@intel.com \
    --cc=herbert@gondor.hengli.com.au \
    --cc=jdike@linux.intel.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=netdev@vger.kernel.org \
    --cc=shemminger@vyatta.com \
    --cc=xiaohui.xin@intel.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).