All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rafael Aquini <aquini@redhat.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Rusty Russell <rusty@rustcorp.com.au>,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	virtualization@lists.linux-foundation.org,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Rik van Riel <riel@redhat.com>, Mel Gorman <mel@csn.ul.ie>,
	Andi Kleen <andi@firstfloor.org>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	Minchan Kim <minchan@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Subject: Re: [PATCH v11 5/7] virtio_balloon: introduce migration primitives to balloon pages
Date: Wed, 7 Nov 2012 22:32:01 -0200	[thread overview]
Message-ID: <20121108003159.GD10444@optiplex.redhat.com> (raw)
In-Reply-To: <20121107161146.b99dc4a8.akpm@linux-foundation.org>

On Wed, Nov 07, 2012 at 04:11:46PM -0800, Andrew Morton wrote:
> On Thu, 08 Nov 2012 09:32:18 +1030
> Rusty Russell <rusty@rustcorp.com.au> wrote:
> 
> > Rafael Aquini <aquini@redhat.com> writes:
> > > + * virtballoon_migratepage - perform the balloon page migration on behalf of
> > > + *			     a compation thread.     (called under page lock)
> > 
> > > +	if (!mutex_trylock(&vb->balloon_lock))
> > > +		return -EAGAIN;
> > 
> > Erk, OK...
> 
> Not really.  As is almost always the case with a trylock, it needs a
> comment explaining why we couldn't use the far superior mutex_lock(). 
> Data: this reader doesn't know!
>


That was just to alleviate balloon_lock contention if we're migrating pages
concurrently with balloon_fill() or balloon_leak(), as it's easier to retry
the page migration later (in the contended case).

 
> > > +	/* balloon's page migration 1st step  -- inflate "newpage" */
> > > +	spin_lock_irqsave(&vb_dev_info->pages_lock, flags);
> > > +	balloon_page_insert(newpage, mapping, &vb_dev_info->pages);
> > > +	vb_dev_info->isolated_pages--;
> > > +	spin_unlock_irqrestore(&vb_dev_info->pages_lock, flags);
> > > +	vb->num_pfns = VIRTIO_BALLOON_PAGES_PER_PAGE;
> > > +	set_page_pfns(vb->pfns, newpage);
> > > +	tell_host(vb, vb->inflate_vq);
> > 
> > tell_host does wait_event(), so you can't call it under the page_lock.
> > Right?
> 
> Sleeping inside lock_page() is OK.  More problematic is that GFP_KERNEL
> allocation.  iirc it _should_ be OK.  Core VM uses trylock_page() and
> the filesystems shouldn't be doing a synchronous lock_page() in the
> pageout path.  But I suspect it isn't a well-tested area.


The locked page under migration is not contended by any other FS / core VM path,
as it is already isolated by compaction to a private migration page list.
OTOH, there's a chance of another parallel compaction thread hitting this page
while scanning page blocks for isolation, but that path can be considered safe
as it uses trylock_page()



> 
> > You probably get away with it because current qemu will service you
> > immediately.  You could spin here in this case for the moment.
> > 
> > There's a second call to tell_host():
> > 
> > > +	/*
> > > +	 * balloon's page migration 2nd step -- deflate "page"
> > > +	 *
> > > +	 * It's safe to delete page->lru here because this page is at
> > > +	 * an isolated migration list, and this step is expected to happen here
> > > +	 */
> > > +	balloon_page_delete(page);
> > > +	vb->num_pfns = VIRTIO_BALLOON_PAGES_PER_PAGE;
> > > +	set_page_pfns(vb->pfns, page);
> > > +	tell_host(vb, vb->deflate_vq);
> > 
> > The first one can be delayed, the second one can be delayed if the host
> > didn't ask for VIRTIO_BALLOON_F_MUST_TELL_HOST (qemu doesn't).
> > 
> > We could implement a proper request queue for these, and return -EAGAIN
> > if the queue fills.  Though in practice, it's not important (it might
> > help performance).
> 

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

WARNING: multiple messages have this Message-ID (diff)
From: Rafael Aquini <aquini@redhat.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Rusty Russell <rusty@rustcorp.com.au>,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	virtualization@lists.linux-foundation.org,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Rik van Riel <riel@redhat.com>, Mel Gorman <mel@csn.ul.ie>,
	Andi Kleen <andi@firstfloor.org>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	Minchan Kim <minchan@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Subject: Re: [PATCH v11 5/7] virtio_balloon: introduce migration primitives to balloon pages
Date: Wed, 7 Nov 2012 22:32:01 -0200	[thread overview]
Message-ID: <20121108003159.GD10444@optiplex.redhat.com> (raw)
In-Reply-To: <20121107161146.b99dc4a8.akpm@linux-foundation.org>

On Wed, Nov 07, 2012 at 04:11:46PM -0800, Andrew Morton wrote:
> On Thu, 08 Nov 2012 09:32:18 +1030
> Rusty Russell <rusty@rustcorp.com.au> wrote:
> 
> > Rafael Aquini <aquini@redhat.com> writes:
> > > + * virtballoon_migratepage - perform the balloon page migration on behalf of
> > > + *			     a compation thread.     (called under page lock)
> > 
> > > +	if (!mutex_trylock(&vb->balloon_lock))
> > > +		return -EAGAIN;
> > 
> > Erk, OK...
> 
> Not really.  As is almost always the case with a trylock, it needs a
> comment explaining why we couldn't use the far superior mutex_lock(). 
> Data: this reader doesn't know!
>


That was just to alleviate balloon_lock contention if we're migrating pages
concurrently with balloon_fill() or balloon_leak(), as it's easier to retry
the page migration later (in the contended case).

 
> > > +	/* balloon's page migration 1st step  -- inflate "newpage" */
> > > +	spin_lock_irqsave(&vb_dev_info->pages_lock, flags);
> > > +	balloon_page_insert(newpage, mapping, &vb_dev_info->pages);
> > > +	vb_dev_info->isolated_pages--;
> > > +	spin_unlock_irqrestore(&vb_dev_info->pages_lock, flags);
> > > +	vb->num_pfns = VIRTIO_BALLOON_PAGES_PER_PAGE;
> > > +	set_page_pfns(vb->pfns, newpage);
> > > +	tell_host(vb, vb->inflate_vq);
> > 
> > tell_host does wait_event(), so you can't call it under the page_lock.
> > Right?
> 
> Sleeping inside lock_page() is OK.  More problematic is that GFP_KERNEL
> allocation.  iirc it _should_ be OK.  Core VM uses trylock_page() and
> the filesystems shouldn't be doing a synchronous lock_page() in the
> pageout path.  But I suspect it isn't a well-tested area.


The locked page under migration is not contended by any other FS / core VM path,
as it is already isolated by compaction to a private migration page list.
OTOH, there's a chance of another parallel compaction thread hitting this page
while scanning page blocks for isolation, but that path can be considered safe
as it uses trylock_page()



> 
> > You probably get away with it because current qemu will service you
> > immediately.  You could spin here in this case for the moment.
> > 
> > There's a second call to tell_host():
> > 
> > > +	/*
> > > +	 * balloon's page migration 2nd step -- deflate "page"
> > > +	 *
> > > +	 * It's safe to delete page->lru here because this page is at
> > > +	 * an isolated migration list, and this step is expected to happen here
> > > +	 */
> > > +	balloon_page_delete(page);
> > > +	vb->num_pfns = VIRTIO_BALLOON_PAGES_PER_PAGE;
> > > +	set_page_pfns(vb->pfns, page);
> > > +	tell_host(vb, vb->deflate_vq);
> > 
> > The first one can be delayed, the second one can be delayed if the host
> > didn't ask for VIRTIO_BALLOON_F_MUST_TELL_HOST (qemu doesn't).
> > 
> > We could implement a proper request queue for these, and return -EAGAIN
> > if the queue fills.  Though in practice, it's not important (it might
> > help performance).
> 

  reply	other threads:[~2012-11-08  0:32 UTC|newest]

Thread overview: 98+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-07  3:05 [PATCH v11 0/7] make balloon pages movable by compaction Rafael Aquini
2012-11-07  3:05 ` Rafael Aquini
2012-11-07  3:05 ` [PATCH v11 1/7] mm: adjust address_space_operations.migratepage() return code Rafael Aquini
2012-11-07  3:05   ` Rafael Aquini
2012-11-07 19:56   ` Andrew Morton
2012-11-07 19:56     ` Andrew Morton
2012-11-07 19:56     ` Andrew Morton
2012-11-07 21:39     ` Rafael Aquini
2012-11-07 21:39       ` Rafael Aquini
2012-11-07 21:39     ` Rafael Aquini
2012-11-07  3:05 ` Rafael Aquini
2012-11-07  3:05 ` [PATCH v11 2/7] mm: redefine address_space.assoc_mapping Rafael Aquini
2012-11-07  3:05 ` Rafael Aquini
2012-11-07  3:05   ` Rafael Aquini
2012-11-07  3:05 ` [PATCH v11 3/7] mm: introduce a common interface for balloon pages mobility Rafael Aquini
2012-11-07  3:05   ` Rafael Aquini
2012-11-07 21:02   ` Andrew Morton
2012-11-07 21:02     ` Andrew Morton
2012-11-07 21:02     ` Andrew Morton
2012-11-07 21:34     ` Rafael Aquini
2012-11-07 21:34     ` Rafael Aquini
2012-11-07 21:34       ` Rafael Aquini
2012-11-09 12:11   ` Mel Gorman
2012-11-09 12:11     ` Mel Gorman
2012-11-09 14:53     ` Rafael Aquini
2012-11-09 14:53       ` Rafael Aquini
2012-11-09 16:23       ` Mel Gorman
2012-11-09 16:23         ` Mel Gorman
2012-11-09 17:58         ` Rafael Aquini
2012-11-09 17:58           ` Rafael Aquini
2012-11-09 17:58         ` Rafael Aquini
2012-11-09 16:23       ` Mel Gorman
2012-11-09 14:53     ` Rafael Aquini
2012-11-09 12:11   ` Mel Gorman
2012-11-07  3:05 ` Rafael Aquini
2012-11-07  3:05 ` [PATCH v11 4/7] mm: introduce compaction and migration for ballooned pages Rafael Aquini
2012-11-07  3:05 ` Rafael Aquini
2012-11-07  3:05   ` Rafael Aquini
2012-11-09 12:16   ` Mel Gorman
2012-11-09 12:16     ` Mel Gorman
2012-11-20 23:33     ` Andrew Morton
2012-11-20 23:33       ` Andrew Morton
2012-11-20 23:33       ` Andrew Morton
2012-11-27 11:59       ` Rafael Aquini
2012-11-27 11:59         ` Rafael Aquini
2012-11-27 11:59       ` Rafael Aquini
2012-11-09 12:16   ` Mel Gorman
2012-11-07  3:05 ` [PATCH v11 5/7] virtio_balloon: introduce migration primitives to balloon pages Rafael Aquini
2012-11-07  3:05 ` Rafael Aquini
2012-11-07  3:05   ` Rafael Aquini
2012-11-07 19:58   ` Andrew Morton
2012-11-07 19:58     ` Andrew Morton
2012-11-07 19:58     ` Andrew Morton
2012-11-07 22:02     ` Rafael Aquini
2012-11-07 22:02     ` Rafael Aquini
2012-11-07 22:02       ` Rafael Aquini
2012-11-07 23:02   ` Rusty Russell
2012-11-07 23:02     ` Rusty Russell
2012-11-07 23:02     ` Rusty Russell
2012-11-08  0:11     ` Andrew Morton
2012-11-08  0:11       ` Andrew Morton
2012-11-08  0:11       ` Andrew Morton
2012-11-08  0:32       ` Rafael Aquini [this message]
2012-11-08  0:32         ` Rafael Aquini
2012-11-08  0:32       ` Rafael Aquini
2012-11-10 15:53       ` Michael S. Tsirkin
2012-11-10 15:53         ` Michael S. Tsirkin
2012-11-10 15:53       ` Michael S. Tsirkin
2012-11-08  0:34     ` Rafael Aquini
2012-11-08  0:34       ` Rafael Aquini
2012-11-12  7:49       ` Rusty Russell
2012-11-12  7:49         ` Rusty Russell
2012-11-12  7:49         ` Rusty Russell
2012-11-08  0:34     ` Rafael Aquini
2012-11-10 15:53   ` Michael S. Tsirkin
2012-11-10 15:53     ` Michael S. Tsirkin
2012-11-10 15:53   ` Michael S. Tsirkin
2012-11-07  3:05 ` [PATCH v11 6/7] mm: introduce putback_movable_pages() Rafael Aquini
2012-11-07  3:05 ` Rafael Aquini
2012-11-07  3:05   ` Rafael Aquini
2012-11-07  3:05 ` [PATCH v11 7/7] mm: add vm event counters for balloon pages compaction Rafael Aquini
2012-11-07  3:05 ` Rafael Aquini
2012-11-07  3:05   ` Rafael Aquini
2012-11-09 12:20   ` Mel Gorman
2012-11-09 12:20     ` Mel Gorman
2012-11-09 12:20     ` Mel Gorman
2012-11-09 14:58     ` Rafael Aquini
2012-11-09 14:58     ` Rafael Aquini
2012-11-09 14:58       ` Rafael Aquini
2012-11-20 23:29       ` Andrew Morton
2012-11-20 23:29         ` Andrew Morton
2012-11-20 23:29         ` Andrew Morton
2012-11-10 15:55   ` Michael S. Tsirkin
2012-11-10 15:55   ` Michael S. Tsirkin
2012-11-10 15:55     ` Michael S. Tsirkin
2012-11-11 19:22     ` Rafael Aquini
2012-11-11 19:22       ` Rafael Aquini
2012-11-11 19:22     ` Rafael Aquini

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=20121108003159.GD10444@optiplex.redhat.com \
    --to=aquini@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=andi@firstfloor.org \
    --cc=konrad.wilk@oracle.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mel@csn.ul.ie \
    --cc=minchan@kernel.org \
    --cc=mst@redhat.com \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=peterz@infradead.org \
    --cc=riel@redhat.com \
    --cc=rusty@rustcorp.com.au \
    --cc=virtualization@lists.linux-foundation.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.