All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Roger Pau Monné" <roger.pau@citrix.com>
To: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: <xen-devel@lists.xen.org>, <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH RFC 4/4] xen-block: introduce a new request type to unmap grants
Date: Wed, 10 Jul 2013 11:19:23 +0200	[thread overview]
Message-ID: <51DD271B.3010408@citrix.com> (raw)
In-Reply-To: <20130708194152.GJ4927@phenom.dumpdata.com>

On 08/07/13 21:41, Konrad Rzeszutek Wilk wrote:
> On Mon, Jul 08, 2013 at 03:03:27PM +0200, Roger Pau Monne wrote:
>> Right now blkfront has no way to unmap grant refs, if using persistent
>> grants once a grant is used blkfront cannot assure if blkback will
>> have this grant mapped or not. To solve this problem, a new request
>> type (BLKIF_OP_UNMAP) that allows requesting blkback to unmap certain
>> grants is introduced.
> 
> I don't think this is the right way of doing it. It is a new operation
> (BLKIF_OP_UNMAP) that has nothing to do with READ/WRITE. All it is
> is just some way for the frontend to say: unmap this grant if you can.
> 
> As such I would think a better mechanism would be to have a new
> grant mechanism that can say: 'I am done with this grant you can
> remove it' - that is called to the hypervisor. The hypervisor
> can then figure out whether it is free or not and lazily delete it.
> (And the guest would be notified when it is freed).

I have a patch that I think implements something quite similar to what 
you describe, but it doesn't require any new patch to the hypervisor 
side. From blkfront we can check what grants blkback has chosen to 
persistently map and only keep those.

This is different from my previous approach, were blkfront could 
specifically request blkback to unmap certain grants, but it still 
prevents blkfront from hoarding all grants (unless blkback is 
persistently mapping every possible grant). With this patch the number 
of persistent grants in blkfront will be the same as in blkback, so 
basically the backend can control how many grants will be persistently 
mapped. 

---
>From 1ede72ba10a7ec13d57ba6d2af54e86a099d7125 Mon Sep 17 00:00:00 2001
From: Roger Pau Monne <roger.pau@citrix.com>
Date: Wed, 10 Jul 2013 10:22:19 +0200
Subject: [PATCH RFC] xen-blkfront: revoke foreign access for grants not
 mapped by the backend
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

There's no need to keep the foreign access in a grant if it is not
persistently mapped by the backend. This allows us to free grants that
are not mapped by the backend, thus preventing blkfront from hoarding
all grants.

The main effect of this is that blkfront will only persistently map
the same grants as the backend, and it will always try to use grants
that are already mapped by the backend. Also the number of persistent
grants in blkfront is the same as in blkback (and is controlled by the
value in blkback).

Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
---
 drivers/block/xen-blkfront.c |   33 +++++++++++++++++++++++++++++----
 1 files changed, 29 insertions(+), 4 deletions(-)

diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index 3d445c0..6ba88c1 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -1022,13 +1022,38 @@ static void blkif_completion(struct blk_shadow *s, struct blkfront_info *info,
 	}
 	/* Add the persistent grant into the list of free grants */
 	for (i = 0; i < nseg; i++) {
-		list_add(&s->grants_used[i]->node, &info->persistent_gnts);
-		info->persistent_gnts_c++;
+		if (gnttab_query_foreign_access(s->grants_used[i]->gref)) {
+			/*
+			 * If the grant is still mapped by the backend (the
+			 * backend has chosen to make this grant persistent)
+			 * we add it at the head of the list, so it will be
+			 * reused first.
+			 */
+			list_add(&s->grants_used[i]->node, &info->persistent_gnts);
+			info->persistent_gnts_c++;
+		} else {
+			/*
+			 * If the grant is not mapped by the backend we end the
+			 * foreign access and add it to the tail of the list,
+			 * so it will not be picked again unless we run out of
+			 * persistent grants.
+			 */
+			gnttab_end_foreign_access(s->grants_used[i]->gref, 0, 0UL);
+			s->grants_used[i]->gref = GRANT_INVALID_REF;
+			list_add_tail(&s->grants_used[i]->node, &info->persistent_gnts);
+		}
 	}
 	if (s->req.operation == BLKIF_OP_INDIRECT) {
 		for (i = 0; i < INDIRECT_GREFS(nseg); i++) {
-			list_add(&s->indirect_grants[i]->node, &info->persistent_gnts);
-			info->persistent_gnts_c++;
+			if (gnttab_query_foreign_access(s->indirect_grants[i]->gref)) {
+				list_add(&s->indirect_grants[i]->node, &info->persistent_gnts);
+				info->persistent_gnts_c++;
+			} else {
+				gnttab_end_foreign_access(s->indirect_grants[i]->gref, 0, 0UL);
+				s->indirect_grants[i]->gref = GRANT_INVALID_REF;
+				list_add_tail(&s->indirect_grants[i]->node,
+				              &info->persistent_gnts);
+			}
 		}
 	}
 }
-- 
1.7.7.5 (Apple Git-26)


  parent reply	other threads:[~2013-07-10  9:19 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-08 13:03 [PATCH RFC 0/4] xen-block: prevent blkfront for hoarding grants Roger Pau Monne
2013-07-08 13:03 ` [PATCH RFC 1/4] xen-gnt: prevent adding duplicate gnt callbacks Roger Pau Monne
2013-07-08 13:03   ` Roger Pau Monne
2013-07-11 13:17   ` [Xen-devel] " David Vrabel
2013-07-11 16:23     ` Roger Pau Monné
2013-07-11 16:23     ` [Xen-devel] " Roger Pau Monné
2013-07-11 13:17   ` David Vrabel
2013-07-08 13:03 ` [PATCH RFC 2/4] xen-blkfront: improve aproximation of required grants per request Roger Pau Monne
2013-07-08 13:03 ` Roger Pau Monne
2013-07-11 13:20   ` David Vrabel
2013-07-11 13:20   ` [Xen-devel] " David Vrabel
2013-07-11 14:47     ` Roger Pau Monné
2013-07-11 14:47     ` [Xen-devel] " Roger Pau Monné
2013-07-08 13:03 ` [PATCH RFC 3/4] xen-blkfront: prevent hoarding all grants Roger Pau Monne
2013-07-08 13:03 ` Roger Pau Monne
2013-07-11 13:32   ` [Xen-devel] " David Vrabel
2013-07-11 14:57     ` Roger Pau Monné
2013-07-11 14:57     ` Roger Pau Monné
2013-07-11 13:32   ` David Vrabel
2013-07-08 13:03 ` [PATCH RFC 4/4] xen-block: introduce a new request type to unmap grants Roger Pau Monne
2013-07-08 13:03 ` Roger Pau Monne
2013-07-08 19:41   ` Konrad Rzeszutek Wilk
2013-07-09 13:22     ` Wei Liu
2013-07-09 13:22     ` [Xen-devel] " Wei Liu
2013-07-09 16:37     ` Roger Pau Monné
2013-07-09 16:37     ` Roger Pau Monné
2013-07-09 18:32       ` Konrad Rzeszutek Wilk
2013-07-09 18:32       ` Konrad Rzeszutek Wilk
2013-07-09 18:38         ` [Xen-devel] " Wei Liu
2013-07-09 18:38         ` Wei Liu
2013-07-10  9:19     ` Roger Pau Monné [this message]
2013-07-10 13:54       ` [Xen-devel] " Egger, Christoph
2013-07-10 14:46         ` Roger Pau Monné
2013-07-10 14:46         ` [Xen-devel] " Roger Pau Monné
2013-07-10 13:54       ` Egger, Christoph
2013-07-10 14:52       ` Konrad Rzeszutek Wilk
2013-07-10 14:52       ` Konrad Rzeszutek Wilk
2013-07-11 13:48       ` David Vrabel
2013-07-11 13:48       ` [Xen-devel] " David Vrabel
2013-07-11 15:12         ` Roger Pau Monné
2013-07-11 15:12           ` Roger Pau Monné
2013-07-11 15:26           ` David Vrabel
2013-07-11 15:26           ` [Xen-devel] " David Vrabel
2013-07-11 15:48             ` Roger Pau Monné
2013-07-11 15:48             ` [Xen-devel] " Roger Pau Monné
2013-07-12 10:12               ` David Vrabel
2013-07-12 10:12               ` David Vrabel
2013-07-10  9:19     ` Roger Pau Monné
2013-07-08 19:41   ` Konrad Rzeszutek Wilk
2013-07-11 13:35 ` [PATCH RFC 0/4] xen-block: prevent blkfront for hoarding grants David Vrabel
2013-07-11 13:35 ` [Xen-devel] " David Vrabel
2013-07-31  9:50 ` Roger Pau Monné
2013-07-31 11:27   ` Konrad Rzeszutek Wilk
2013-07-31 11:27   ` Konrad Rzeszutek Wilk
2013-07-31  9:50 ` Roger Pau Monné

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=51DD271B.3010408@citrix.com \
    --to=roger.pau@citrix.com \
    --cc=konrad.wilk@oracle.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=xen-devel@lists.xen.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.