|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 2 of 4] tools: Save superpages in the same batch, to make detection easier
On the first time through (when pfns are mostly allocated on
the receiving side), try to keep superpages together in the same
batch by ending a batch early if we see the first page of a
potential superpage and there isn't enough room in the batch
for a full superpage.
Signed-off-by: George Dunlap <george.dunlap@xxxxxxxxxxxxx>
diff -r 57558d87761f -r a629b41a8d1f tools/libxc/xc_domain_save.c
--- a/tools/libxc/xc_domain_save.c Mon May 16 11:50:46 2011 +0100
+++ b/tools/libxc/xc_domain_save.c Mon May 16 11:50:46 2011 +0100
@@ -82,6 +82,11 @@ struct outbuf {
((mfn_to_pfn(_mfn) < (dinfo->p2m_size)) && \
(pfn_to_mfn(mfn_to_pfn(_mfn)) == (_mfn))))
+#define SUPERPAGE_PFN_SHIFT 9
+#define SUPERPAGE_NR_PFNS (1UL << SUPERPAGE_PFN_SHIFT)
+
+#define SUPER_PAGE_START(pfn) (((pfn) & (SUPERPAGE_NR_PFNS-1)) == 0 )
+
/*
** During (live) save/migrate, we maintain a number of bitmaps to track
** which pages we have to send, to fixup, and to skip.
@@ -906,6 +911,7 @@ int xc_domain_save(xc_interface *xch, in
int rc = 1, frc, i, j, last_iter = 0, iter = 0;
int live = (flags & XCFLAGS_LIVE);
int debug = (flags & XCFLAGS_DEBUG);
+ int superpages = !!hvm;
int race = 0, sent_last_iter, skip_this_iter = 0;
unsigned int sent_this_iter = 0;
int tmem_saved = 0;
@@ -1262,6 +1268,12 @@ int xc_domain_save(xc_interface *xch, in
(test_bit(n, to_fix) && last_iter)) )
continue;
+ /* First time through, try to keep superpages in the same
batch */
+ if ( superpages && iter == 1
+ && SUPER_PAGE_START(n)
+ && batch + SUPERPAGE_NR_PFNS > MAX_BATCH_SIZE )
+ break;
+
/*
** we get here if:
** 1. page is marked to_send & hasn't already been
re-dirtied
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |