From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Annie Li <annie.li@oracle.com>
Cc: xen-devel@lists.xensource.com, netdev@vger.kernel.org,
Ian.Campbell@citrix.com
Subject: Re: [PATCH 0/4] Implement persistent grant in xen-netfront/netback
Date: Fri, 16 Nov 2012 10:18:40 -0500 [thread overview]
Message-ID: <20121116151840.GE22320@phenom.dumpdata.com> (raw)
In-Reply-To: <1352962987-541-1-git-send-email-annie.li@oracle.com>
On Thu, Nov 15, 2012 at 03:03:07PM +0800, Annie Li wrote:
> This patch implements persistent grants for xen-netfront/netback. This
> mechanism maintains page pools in netback/netfront, these page pools is used to
> save grant pages which are mapped. This way improve performance which is wasted
> when doing grant operations.
>
> Current netback/netfront does map/unmap grant operations frequently when
> transmitting/receiving packets, and grant operations costs much cpu clock. In
> this patch, netfront/netback maps grant pages when needed and then saves them
> into a page pool for future use. All these pages will be unmapped when
> removing/releasing the net device.
>
> In netfront, two pools are maintained for transmitting and receiving packets.
> When new grant pages are needed, the driver gets grant pages from this pool
> first. If no free grant page exists, it allocates new page, maps it and then
> saves it into the pool. The pool size for transmit/receive is exactly tx/rx
> ring size. The driver uses memcpy(not grantcopy) to copy data grant pages.
> Here, memcpy is copying the whole page size data. I tried to copy len size data
> from offset, but network does not seem work well. I am trying to find the root
> cause now.
>
> In netback, it also maintains two page pools for tx/rx. When netback gets a
> request, it does a search first to find out whether the grant reference of
> this request is already mapped into its page pool. If the grant ref is mapped,
> the address of this mapped page is gotten and memcpy is used to copy data
> between grant pages. However, if the grant ref is not mapped, a new page is
> allocated, mapped with this grant ref, and then saved into page pool for
> future use. Similarly, memcpy replaces grant copy to copy data between grant
> pages. In this implementation, two arrays(gnttab_tx_vif,gnttab_rx_vif) are
> used to save vif pointer for every request because current netback is not
> per-vif based. This would be changed after implementing 1:1 model in netback.
>
> This patch supports both persistent-grant and non persistent grant. A new
> xenstore key "feature-persistent-grants" is used to represent this feature.
>
> This patch is based on linux3.4-rc3. I hit netperf/netserver failure on
> linux latest version v3.7-rc1, v3.7-rc2 and v3.7-rc4. Not sure whether this
> netperf/netserver failure connects compound page commit in v3.7-rc1, but I did
> hit BUG_ON with debug patch from thread
> http://lists.xen.org/archives/html/xen-devel/2012-10/msg00893.html
FYI, I get this:
477.814511] BUG: sleeping function called from invalid context at /home/konrad/ssd/linux/mm/page_alloc.c:2487
[ 477.815281] in_atomic(): 1, irqs_disabled(): 1, pid: 3017, name: netperf
[ 477.815281] Pid: 3017, comm: netperf Not tainted 3.5.0upstream-00004-g69047bb #1
[ 477.815281] Call Trace:
[ 477.815281] [<ffffffff810b990a>] __might_sleep+0xda/0x100
[ 477.815281] [<ffffffff81142e93>] __alloc_pages_nodemask+0x223/0x920
[ 477.815281] [<ffffffff81158439>] ? zone_statistics+0x99/0xc0
[ 477.815281] [<ffffffff81076e79>] ? default_spin_lock_flags+0x9/0x10
[ 477.815281] [<ffffffff81615e3a>] ? _raw_spin_lock_irqsave+0x3a/0x50
[ 477.815281] [<ffffffff81076e79>] ? default_spin_lock_flags+0x9/0x10
[ 477.815281] [<ffffffff81098977>] ? lock_timer_base+0x37/0x70
[ 477.815281] [<ffffffff8109a03d>] ? mod_timer_pending+0x11d/0x230
[ 477.815281] [<ffffffff81616144>] ? _raw_spin_unlock_bh+0x24/0x30
[ 477.815281] [<ffffffff8117e7e1>] alloc_pages_current+0xb1/0x110
[ 477.815281] [<ffffffffa0034238>] xennet_alloc_tx_ref+0x78/0x1c0 [xen_netfront]
[ 477.815281] [<ffffffffa00344eb>] xennet_start_xmit+0x16b/0x9f0 [xen_netfront]
[ 477.815281] [<ffffffff814c69eb>] dev_hard_start_xmit+0x2fb/0x6f0
[ 477.815281] [<ffffffff814e4566>] sch_direct_xmit+0x116/0x1e0
[ 477.815281] [<ffffffff814c6f6a>] dev_queue_xmit+0x18a/0x6b0
[ 477.815281] [<ffffffff8151264e>] ip_finish_output+0x18e/0x300
[ 477.815281] [<ffffffff81512821>] ip_output+0x61/0xa0
[ 477.815281] [<ffffffff81511b82>] ? __ip_local_out+0xa2/0xb0
[ 477.815281] [<ffffffff81511bb4>] ip_local_out+0x24/0x30
[ 477.815281] [<ffffffff81511ffe>] ip_queue_xmit+0x15e/0x410
[ 477.815281] [<ffffffff81528354>] tcp_transmit_skb+0x424/0x8f0
[ 477.815281] [<ffffffff8152a8c2>] tcp_write_xmit+0x1f2/0x9c0
[ 477.815281] [<ffffffff81182194>] ? ksize+0x14/0x70
[ 477.815281] [<ffffffff8152b711>] __tcp_push_pending_frames+0x21/0x90
[ 477.815281] [<ffffffff8151db23>] tcp_sendmsg+0x983/0xcd0
[ 477.815281] [<ffffffff81540daf>] inet_sendmsg+0x7f/0xd0
[ 477.815281] [<ffffffff81290dde>] ? selinux_socket_sendmsg+0x1e/0x20
[ 477.815281] [<ffffffff814aed13>] sock_sendmsg+0xf3/0x120
[ 477.815281] [<ffffffff81076f48>] ? pvclock_clocksource_read+0x58/0xd0
[ 477.815281] [<ffffffff812de7c0>] ? timerqueue_add+0x60/0xb0
[ 477.815281] [<ffffffff810b0b85>] ? enqueue_hrtimer+0x25/0xb0
[ 477.815281] [<ffffffff814af4d4>] sys_sendto+0x104/0x140
[ 477.815281] [<ffffffff81041279>] ? xen_clocksource_read+0x39/0x50
[ 477.815281] [<ffffffff81041419>] ? xen_clocksource_get_cycles+0x9/0x10
[ 477.815281] [<ffffffff810d3242>] ? getnstimeofday+0x52/0xe0
[ 477.815281] [<ffffffff8161dfb9>] system_call_fastpath+0x16/0x1b
>
>
> Annie Li (4):
> xen/netback: implements persistent grant with one page pool.
> xen/netback: Split one page pool into two(tx/rx) page pool.
> Xen/netfront: Implement persistent grant in netfront.
> fix code indent issue in xen-netfront.
>
> drivers/net/xen-netback/common.h | 24 ++-
> drivers/net/xen-netback/interface.c | 26 +++
> drivers/net/xen-netback/netback.c | 215 ++++++++++++++++++--
> drivers/net/xen-netback/xenbus.c | 14 ++-
> drivers/net/xen-netfront.c | 378 +++++++++++++++++++++++++++++------
> 5 files changed, 570 insertions(+), 87 deletions(-)
>
> --
> 1.7.3.4
prev parent reply other threads:[~2012-11-16 15:18 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-15 7:03 [PATCH 0/4] Implement persistent grant in xen-netfront/netback Annie Li
2012-11-15 7:04 ` [PATCH 1/4] xen/netback: implements persistent grant with one page pool Annie Li
2012-11-15 9:10 ` Ian Campbell
2012-11-16 2:18 ` [Xen-devel] " ANNIE LI
2012-11-16 9:27 ` Ian Campbell
2012-11-16 9:55 ` ANNIE LI
2012-11-15 9:57 ` Roger Pau Monné
2012-11-16 2:49 ` ANNIE LI
2012-11-16 7:57 ` ANNIE LI
2012-11-16 9:32 ` Ian Campbell
2012-11-16 11:34 ` ANNIE LI
2012-11-15 7:04 ` [PATCH 2/4] xen/netback: Split one page pool into two(tx/rx) " Annie Li
2012-11-15 9:15 ` Ian Campbell
2012-11-16 3:10 ` ANNIE LI
2012-11-15 7:05 ` [PATCH 3/4] Xen/netfront: Implement persistent grant in netfront Annie Li
2012-11-15 10:52 ` [Xen-devel] " Roger Pau Monné
2012-11-16 5:22 ` ANNIE LI
2012-11-16 7:58 ` ANNIE LI
2012-11-15 7:05 ` [PATCH 4/4] fix code indent issue in xen-netfront Annie Li
2012-11-15 7:40 ` [PATCH 0/4] Implement persistent grant in xen-netfront/netback Pasi Kärkkäinen
2012-11-15 8:38 ` [Xen-devel] " ANNIE LI
2012-11-15 8:51 ` Ian Campbell
2012-11-15 9:02 ` ANNIE LI
2012-11-15 9:35 ` Wei Liu
2012-11-15 11:12 ` [Xen-devel] " ANNIE LI
2012-11-16 15:34 ` Konrad Rzeszutek Wilk
2012-11-15 10:56 ` Roger Pau Monné
2012-11-15 11:14 ` ANNIE LI
2012-11-15 11:15 ` Ian Campbell
2012-11-15 18:29 ` Konrad Rzeszutek Wilk
2012-11-15 19:11 ` Ian Campbell
2012-11-16 15:23 ` Konrad Rzeszutek Wilk
2012-11-16 15:21 ` Konrad Rzeszutek Wilk
2012-11-15 8:53 ` Ian Campbell
2012-11-15 11:14 ` ANNIE LI
2012-11-15 8:56 ` Ian Campbell
2012-11-15 11:14 ` [Xen-devel] " ANNIE LI
2012-11-16 9:57 ` Ian Campbell
2012-11-16 11:37 ` ANNIE LI
2012-11-16 11:46 ` Ian Campbell
2012-11-17 4:39 ` annie li
2012-11-16 15:18 ` Konrad Rzeszutek Wilk [this message]
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=20121116151840.GE22320@phenom.dumpdata.com \
--to=konrad.wilk@oracle.com \
--cc=Ian.Campbell@citrix.com \
--cc=annie.li@oracle.com \
--cc=netdev@vger.kernel.org \
--cc=xen-devel@lists.xensource.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 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.