|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [RFC PATCH 7/7] remus: implement colo mode
Add a new option --colo to the command remus. We will ignore the
options: --time, -i, --no-net when --colo is specified. In colo
mode, we will write new signature "GuestColoRestore". If the xen-tool
in secondary machine does not support colo, it will reject this
signature, and the command remus will fail.
Signed-off-by: Ye Wei <wei.ye1987@xxxxxxxxx>
Signed-off-by: Jiang Yunhong <yunhong.jiang@xxxxxxxxx>
Signed-off-by: Wen Congyang <wency@xxxxxxxxxxxxxx>
---
tools/python/xen/remus/image.py | 7 +++++--
tools/python/xen/remus/save.py | 6 ++++--
tools/remus/remus | 8 +++++++-
3 files changed, 16 insertions(+), 5 deletions(-)
diff --git a/tools/python/xen/remus/image.py b/tools/python/xen/remus/image.py
index b79d1e5..0927314 100644
--- a/tools/python/xen/remus/image.py
+++ b/tools/python/xen/remus/image.py
@@ -189,9 +189,12 @@ def parseheader(header):
"parses a header sexpression"
return vm.parsedominfo(vm.strtosxpr(header))
-def makeheader(dominfo):
+def makeheader(dominfo, colo):
"create an image header from a VM dominfo sxpr"
- items = [SIGNATURE]
+ if colo:
+ items = [COLO_SIGNATURE]
+ else:
+ items = [SIGNATURE]
sxpr = vm.sxprtostr(dominfo)
items.append(struct.pack('!i', len(sxpr)))
items.append(sxpr)
diff --git a/tools/python/xen/remus/save.py b/tools/python/xen/remus/save.py
index 71517da..5157153 100644
--- a/tools/python/xen/remus/save.py
+++ b/tools/python/xen/remus/save.py
@@ -127,7 +127,7 @@ class Keepalive(object):
class Saver(object):
def __init__(self, domid, fd, suspendcb=None, resumecb=None,
- checkpointcb=None, interval=0):
+ checkpointcb=None, interval=0, colo):
"""Create a Saver object for taking guest checkpoints.
domid: name, number or UUID of a running domain
fd: a stream to which checkpoint data will be written.
@@ -135,12 +135,14 @@ class Saver(object):
resumecb: callback invoked before guest resumes
checkpointcb: callback invoked when a checkpoint is complete. Return
True to take another checkpoint, or False to stop.
+ colo: use colo mode
"""
self.fd = fd
self.suspendcb = suspendcb
self.resumecb = resumecb
self.checkpointcb = checkpointcb
self.interval = interval
+ self.colo = colo
self.vm = vm.VM(domid)
@@ -149,7 +151,7 @@ class Saver(object):
def start(self):
vm.getshadowmem(self.vm)
- hdr = image.makeheader(self.vm.dominfo)
+ hdr = image.makeheader(self.vm.dominfo, self.colo)
self.fd.write(hdr)
self.fd.flush()
diff --git a/tools/remus/remus b/tools/remus/remus
index 11d83e4..34c200f 100644
--- a/tools/remus/remus
+++ b/tools/remus/remus
@@ -37,6 +37,8 @@ class Cfg(object):
help='run without net buffering (benchmark option)')
parser.add_option('', '--timer', dest='timer', action='store_true',
help='force pause at checkpoint interval
(experimental)')
+ parser.add_option('', '--colo', dest='colo', action='store_true',
+ help='use colo checkpointing (experimental)')
self.parser = parser
def usage(self):
@@ -53,6 +55,10 @@ class Cfg(object):
self.netbuffer = False
if opts.timer:
self.timer = True
+ if opts.colo:
+ self.interval = 0
+ self.netbuffer = False
+ self.timer = True
if not args:
raise CfgException('Missing domain')
@@ -181,7 +187,7 @@ def run(cfg):
rc = 0
checkpointer = save.Saver(cfg.domid, fd, postsuspend, preresume, commit,
- interval)
+ interval, cfg.colo)
try:
checkpointer.start()
--
1.8.0
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |