[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] Tolerate temporary inconsistency between type info and page contents on



# HG changeset patch
# User smh22@xxxxxxxxxxxxxxxxxxxx
# Node ID d46553f73c6f8ebef2b4a2d1605957c47550792b
# Parent  5ae89ce6748640a35e0866a7fe3ca258c03214be
Tolerate temporary inconsistency between type info and page contents on 
(live) restore. This should now enable live migrate of fork-intensive (or
other page-table-intensive) workloads. 

Signed-off-by: Steven Hand <steven@xxxxxxxxxxxxx>

diff -r 5ae89ce67486 -r d46553f73c6f tools/libxc/xc_linux_restore.c
--- a/tools/libxc/xc_linux_restore.c    Fri Nov 25 15:26:19 2005
+++ b/tools/libxc/xc_linux_restore.c    Fri Nov 25 16:53:41 2005
@@ -78,6 +78,7 @@
             pfn = (pte >> PAGE_SHIFT) & 0xffffffff;
             
             if(pfn >= max_pfn) { 
+                /* This "page table page" is probably not one; bail. */
                 ERR("Frame number in type %lu page table is out of range: "
                     "i=%d pfn=0x%lx max_pfn=%lu", 
                     type >> 28, i, pfn, max_pfn);
@@ -111,6 +112,7 @@
     unsigned long mfn, pfn; 
     unsigned int prev_pc, this_pc;
     int verify = 0;
+    int nraces = 0; 
 
     /* The new domain's shared-info frame number. */
     unsigned long shared_info_frame;
@@ -344,8 +346,15 @@
                 if(pt_levels != 3 || pagetype != L1TAB) { 
 
                     if(!uncanonicalize_pagetable(pagetype, page)) {
-                        ERR("failed uncanonicalize pt!\n"); 
-                        goto out; 
+                        /* 
+                        ** Failing to uncanonicalize a page table can be ok
+                        ** under live migration since the pages type may have
+                        ** changed by now (and we'll get an update later). 
+                        */
+                        DPRINTF("PT L%ld race on pfn=%08lx mfn=%08lx\n", 
+                                pagetype >> 28, pfn, mfn); 
+                        nraces++; 
+                        continue; 
                     }
 
                 } 
@@ -394,7 +403,7 @@
         n+= j; /* crude stats */
     }
 
-    DPRINTF("Received all pages\n");
+    DPRINTF("Received all pages (%d races)\n", nraces);
 
     if(pt_levels == 3) { 
 

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.