From: George Dunlap <george.dunlap@eu.citrix.com>
To: xen-devel@lists.xensource.com
Cc: george.dunlap@eu.citrix.com
Subject: [PATCH 4 of 4] tools: Introduce "allocate-only" page type for migration
Date: Fri, 6 May 2011 15:01:21 +0100 [thread overview]
Message-ID: <aeb70017bf606aca3e81.1304690481@elijah> (raw)
In-Reply-To: <patchbomb.1304690477@elijah>
To detect presence of superpages on the receiver side, we need
to have strings of sequential pfns sent across on the first iteration
through the memory. However, as we go through the memory, more and
more of it will be marked dirty, making it wasteful to send those pages.
This patch introduces a new PFINFO type, "XALLOC". Like PFINFO_XTAB, it
indicates that there is no corresponding page present in the subsquent
page buffer. However, unlike PFINFO_XTAB, it contains a pfn which should be
allocated.
This new type is only used for migration; but it's placed in
xen/public/domctl.h so that the value isn't reused.
Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>
diff -r 3fa5cca65bac -r aeb70017bf60 tools/libxc/xc_domain_restore.c
--- a/tools/libxc/xc_domain_restore.c Fri May 06 15:01:08 2011 +0100
+++ b/tools/libxc/xc_domain_restore.c Fri May 06 15:01:08 2011 +0100
@@ -839,7 +839,8 @@
countpages = count;
for (i = oldcount; i < buf->nr_pages; ++i)
- if ((buf->pfn_types[i] & XEN_DOMCTL_PFINFO_LTAB_MASK) == XEN_DOMCTL_PFINFO_XTAB)
+ if ((buf->pfn_types[i] & XEN_DOMCTL_PFINFO_LTAB_MASK) == XEN_DOMCTL_PFINFO_XTAB
+ ||(buf->pfn_types[i] & XEN_DOMCTL_PFINFO_LTAB_MASK) == XEN_DOMCTL_PFINFO_XALLOC)
--countpages;
if (!countpages)
@@ -917,6 +918,7 @@
pfn = pagebuf->pfn_types[i + curbatch] & ~XEN_DOMCTL_PFINFO_LTAB_MASK;
pagetype = pagebuf->pfn_types[i + curbatch] & XEN_DOMCTL_PFINFO_LTAB_MASK;
+ /* For allocation purposes, treat XEN_DOMCTL_PFINFO_XALLOC as a normal page */
if ( (pagetype != XEN_DOMCTL_PFINFO_XTAB) &&
(ctx->p2m[pfn] == INVALID_P2M_ENTRY) )
{
@@ -1028,21 +1030,21 @@
pfn = pagebuf->pfn_types[i + curbatch] & ~XEN_DOMCTL_PFINFO_LTAB_MASK;
pagetype = pagebuf->pfn_types[i + curbatch] & XEN_DOMCTL_PFINFO_LTAB_MASK;
- if ( pagetype == XEN_DOMCTL_PFINFO_XTAB )
+ if ( pagetype != XEN_DOMCTL_PFINFO_XTAB
+ && ctx->p2m[pfn] == (INVALID_P2M_ENTRY-1) )
+ {
+ /* We just allocated a new mfn above; update p2m */
+ ctx->p2m[pfn] = ctx->p2m_batch[nr_mfns++];
+ ctx->nr_pfns++;
+ }
+
+ /* setup region_mfn[] for batch map, if necessary.
+ * For HVM guests, this interface takes PFNs, not MFNs */
+ if ( pagetype == XEN_DOMCTL_PFINFO_XTAB
+ || pagetype == XEN_DOMCTL_PFINFO_XALLOC )
region_mfn[i] = ~0UL; /* map will fail but we don't care */
- else
- {
- if ( ctx->p2m[pfn] == (INVALID_P2M_ENTRY-1) )
- {
- /* We just allocated a new mfn above; update p2m */
- ctx->p2m[pfn] = ctx->p2m_batch[nr_mfns++];
- ctx->nr_pfns++;
- }
-
- /* setup region_mfn[] for batch map.
- * For HVM guests, this interface takes PFNs, not MFNs */
+ else
region_mfn[i] = hvm ? pfn : ctx->p2m[pfn];
- }
}
/* Map relevant mfns */
@@ -1062,8 +1064,9 @@
pfn = pagebuf->pfn_types[i + curbatch] & ~XEN_DOMCTL_PFINFO_LTAB_MASK;
pagetype = pagebuf->pfn_types[i + curbatch] & XEN_DOMCTL_PFINFO_LTAB_MASK;
- if ( pagetype == XEN_DOMCTL_PFINFO_XTAB )
- /* a bogus/unmapped page: skip it */
+ if ( pagetype == XEN_DOMCTL_PFINFO_XTAB
+ || pagetype == XEN_DOMCTL_PFINFO_XALLOC)
+ /* a bogus/unmapped/allocate-only page: skip it */
continue;
if (pfn_err[i])
diff -r 3fa5cca65bac -r aeb70017bf60 tools/libxc/xc_domain_save.c
--- a/tools/libxc/xc_domain_save.c Fri May 06 15:01:08 2011 +0100
+++ b/tools/libxc/xc_domain_save.c Fri May 06 15:01:08 2011 +0100
@@ -1258,13 +1258,15 @@
}
else
{
- if ( !last_iter &&
+ int dont_skip = (last_iter || (superpages && iter==1));
+
+ if ( !dont_skip &&
test_bit(n, to_send) &&
test_bit(n, to_skip) )
skip_this_iter++; /* stats keeping */
if ( !((test_bit(n, to_send) && !test_bit(n, to_skip)) ||
- (test_bit(n, to_send) && last_iter) ||
+ (test_bit(n, to_send) && dont_skip) ||
(test_bit(n, to_fix) && last_iter)) )
continue;
@@ -1277,7 +1279,7 @@
/*
** we get here if:
** 1. page is marked to_send & hasn't already been re-dirtied
- ** 2. (ignore to_skip in last iteration)
+ ** 2. (ignore to_skip in first and last iterations)
** 3. add in pages that still need fixup (net bufs)
*/
@@ -1301,7 +1303,7 @@
set_bit(n, to_fix);
continue;
}
-
+
if ( last_iter &&
test_bit(n, to_fix) &&
!test_bit(n, to_send) )
@@ -1346,6 +1348,7 @@
{
if ( pfn_type[j] == XEN_DOMCTL_PFINFO_XTAB )
continue;
+
DPRINTF("map fail: page %i mfn %08lx err %d\n",
j, gmfn, pfn_err[j]);
pfn_type[j] = XEN_DOMCTL_PFINFO_XTAB;
@@ -1358,6 +1361,9 @@
continue;
}
+ if ( superpages && iter==1 && test_bit(gmfn, to_skip))
+ pfn_type[j] = XEN_DOMCTL_PFINFO_XALLOC;
+
/* canonicalise mfn->pfn */
pfn_type[j] |= pfn_batch[j];
++run;
@@ -1432,8 +1438,9 @@
}
}
- /* skip pages that aren't present */
- if ( pagetype == XEN_DOMCTL_PFINFO_XTAB )
+ /* skip pages that aren't present or are alloc-only */
+ if ( pagetype == XEN_DOMCTL_PFINFO_XTAB
+ || pagetype == XEN_DOMCTL_PFINFO_XALLOC )
continue;
pagetype &= XEN_DOMCTL_PFINFO_LTABTYPE_MASK;
diff -r 3fa5cca65bac -r aeb70017bf60 xen/include/public/domctl.h
--- a/xen/include/public/domctl.h Fri May 06 15:01:08 2011 +0100
+++ b/xen/include/public/domctl.h Fri May 06 15:01:08 2011 +0100
@@ -133,6 +133,7 @@
#define XEN_DOMCTL_PFINFO_LTABTYPE_MASK (0x7U<<28)
#define XEN_DOMCTL_PFINFO_LPINTAB (0x1U<<31)
#define XEN_DOMCTL_PFINFO_XTAB (0xfU<<28) /* invalid page */
+#define XEN_DOMCTL_PFINFO_XALLOC (0xeU<<28) /* allocate-only page */
#define XEN_DOMCTL_PFINFO_PAGEDTAB (0x8U<<28)
#define XEN_DOMCTL_PFINFO_LTAB_MASK (0xfU<<28)
prev parent reply other threads:[~2011-05-06 14:01 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-06 14:01 [PATCH 0 of 4] Use superpages on restore/migrate George Dunlap
2011-05-06 14:01 ` [PATCH 1 of 4] p2m: Keep statistics on order of p2m entries George Dunlap
2011-05-06 14:23 ` Tim Deegan
2011-05-06 15:07 ` George Dunlap
2011-05-06 14:40 ` Christoph Egger
2011-05-06 15:00 ` Tim Deegan
2011-05-06 14:53 ` Christoph Egger
2011-05-06 15:34 ` George Dunlap
2011-05-09 8:27 ` Tim Deegan
2012-06-08 10:52 ` George Dunlap
2012-06-14 8:52 ` Tim Deegan
2011-05-06 15:14 ` George Dunlap
2011-05-06 14:01 ` [PATCH 2 of 4] tools: Detect superpages on domain restore George Dunlap
2011-05-06 14:01 ` [PATCH 3 of 4] tools: Save superpages in the same batch, to make detection easier George Dunlap
2011-05-06 14:01 ` George Dunlap [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=aeb70017bf606aca3e81.1304690481@elijah \
--to=george.dunlap@eu.citrix.com \
--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 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).