[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] Enable 'live' migration from a tools pov; prior to this the 'live' flag was
# HG changeset patch # User shand@xxxxxxxxxxxxxxxxxxxxxxxxxxx # Node ID a1de77c1486c5f35884e9f578b7f33b6bd75c362 # Parent 0c0d929e787c0848ba26168cd0fbebb6dad2aaf2 Enable 'live' migration from a tools pov; prior to this the 'live' flag was being ignored by xend/xc_linux_save. Signed-off-by: Steven Hand <steven@xxxxxxxxxxxxx> diff -r 0c0d929e787c -r a1de77c1486c tools/libxc/xc_linux_save.c --- a/tools/libxc/xc_linux_save.c Fri Sep 2 17:55:24 2005 +++ b/tools/libxc/xc_linux_save.c Sat Sep 3 01:36:29 2005 @@ -20,6 +20,24 @@ #define BATCH_SIZE 1024 /* 1024 pages (4MB) at a time */ #define MAX_MBIT_RATE 500 + + +/* +** Default values for important tuning parameters. Can override by passing +** non-zero replacement values to xc_linux_save(). +** +** XXX SMH: should consider if want to be able to override MAX_MBIT_RATE too. +** +*/ +#define DEF_MAX_ITERS 29 /* limit us to 30 times round loop */ +#define DEF_MAX_FACTOR 3 /* never send more than 3x nr_pfns */ + + + +/* Flags to control behaviour of xc_linux_save */ +#define XCFLAGS_LIVE 1 +#define XCFLAGS_DEBUG 2 + #define DEBUG 0 @@ -320,18 +338,18 @@ xc_dominfo_t *info, vcpu_guest_context_t *ctxt) { - int i=0; + int i = 0; char ans[30]; printf("suspend\n"); fflush(stdout); if (fgets(ans, sizeof(ans), stdin) == NULL) { - ERR("failed reading suspend reply"); - return -1; + ERR("failed reading suspend reply"); + return -1; } if (strncmp(ans, "done\n", 5)) { - ERR("suspend reply incorrect: %s", ans); - return -1; + ERR("suspend reply incorrect: %s", ans); + return -1; } retry: @@ -377,19 +395,16 @@ return -1; } -int xc_linux_save(int xc_handle, int io_fd, u32 dom) +int xc_linux_save(int xc_handle, int io_fd, u32 dom, u32 max_iters, + u32 max_factor, u32 flags) { xc_dominfo_t info; int rc = 1, i, j, k, last_iter, iter = 0; unsigned long mfn; - int live = 0; // (ioctxt->flags & XCFLAGS_LIVE); - int debug = 0; // (ioctxt->flags & XCFLAGS_DEBUG); + int live = (flags & XCFLAGS_LIVE); + int debug = (flags & XCFLAGS_DEBUG); int sent_last_iter, skip_this_iter; - - /* Important tuning parameters */ - int max_iters = 29; /* limit us to 30 times round loop */ - int max_factor = 3; /* never send more than 3x nr_pfns */ /* The new domain's shared-info frame number. */ unsigned long shared_info_frame; @@ -442,8 +457,16 @@ MBIT_RATE = START_MBIT_RATE; - DPRINTF("xc_linux_save start %d\n", dom); - + + /* If no explicit control parameters given, use defaults */ + if(!max_iters) + max_iters = DEF_MAX_ITERS; + if(!max_factor) + max_factor = DEF_MAX_FACTOR; + + + DPRINTF("xc_linux_save start DOM%u live=%s\n", dom, live?"true":"false"); + if (mlock(&ctxt, sizeof(ctxt))) { ERR("Unable to mlock ctxt"); return 1; diff -r 0c0d929e787c -r a1de77c1486c tools/libxc/xenguest.h --- a/tools/libxc/xenguest.h Fri Sep 2 17:55:24 2005 +++ b/tools/libxc/xenguest.h Sat Sep 3 01:36:29 2005 @@ -6,13 +6,12 @@ * Copyright (c) 2003-2004, K A Fraser. */ -#ifndef XENBUILD_H -#define XENBUILD_H +#ifndef XENGUEST_H +#define XENGUEST_H -#define XCFLAGS_VERBOSE 1 -#define XCFLAGS_LIVE 2 -#define XCFLAGS_DEBUG 4 -#define XCFLAGS_CONFIGURE 8 +#define XCFLAGS_LIVE 1 +#define XCFLAGS_DEBUG 2 + /** * This function will save a domain running Linux. @@ -22,7 +21,8 @@ * @parm dom the id of the domain * @return 0 on success, -1 on failure */ -int xc_linux_save(int xc_handle, int fd, uint32_t dom); +int xc_linux_save(int xc_handle, int fd, uint32_t dom, uint32_t max_iters, + uint32_t max_factor, uint32_t flags /* XCFLAGS_xxx */); /** * This function will restore a saved domain running Linux. @@ -35,8 +35,9 @@ * @parm store_mfn returned with the mfn of the store page * @return 0 on success, -1 on failure */ -int xc_linux_restore(int xc_handle, int io_fd, uint32_t dom, unsigned long nr_pfns, - unsigned int store_evtchn, unsigned long *store_mfn); +int xc_linux_restore(int xc_handle, int io_fd, uint32_t dom, + unsigned long nr_pfns, unsigned int store_evtchn, + unsigned long *store_mfn); int xc_linux_build(int xc_handle, uint32_t domid, @@ -65,4 +66,4 @@ unsigned int store_evtchn, unsigned long *store_mfn); -#endif +#endif // XENGUEST_H diff -r 0c0d929e787c -r a1de77c1486c tools/python/xen/xend/XendCheckpoint.py --- a/tools/python/xen/xend/XendCheckpoint.py Fri Sep 2 17:55:24 2005 +++ b/tools/python/xen/xend/XendCheckpoint.py Sat Sep 3 01:36:29 2005 @@ -34,7 +34,7 @@ raise XendError(errmsg) return buf -def save(xd, fd, dominfo): +def save(xd, fd, dominfo, live): write_exact(fd, SIGNATURE, "could not write guest state file: signature") config = sxp.to_string(dominfo.sxpr()) @@ -42,8 +42,13 @@ "could not write guest state file: config len") write_exact(fd, config, "could not write guest state file: config") + # xc_save takes three customization parameters: maxit, max_f, and flags + # the last controls whether or not save is 'live', while the first two + # further customize behaviour when 'live' save is enabled. Passing "0" + # simply uses the defaults compiled into libxenguest; see the comments + # and/or code in xc_linux_save() for more information. cmd = [PATH_XC_SAVE, str(xc.handle()), str(fd), - str(dominfo.id)] + str(dominfo.id), "0", "0", str(live) ] log.info("[xc_save] " + join(cmd)) child = xPopen3(cmd, True, -1, [fd, xc.handle()]) diff -r 0c0d929e787c -r a1de77c1486c tools/python/xen/xend/XendDomain.py --- a/tools/python/xen/xend/XendDomain.py Fri Sep 2 17:55:24 2005 +++ b/tools/python/xen/xend/XendDomain.py Sat Sep 3 01:36:29 2005 @@ -542,7 +542,7 @@ dominfo.name = "tmp-" + dominfo.name try: - XendCheckpoint.save(self, sock.fileno(), dominfo) + XendCheckpoint.save(self, sock.fileno(), dominfo, live) except: if dst == "localhost": dominfo.name = string.replace(dominfo.name, "tmp-", "", 1) @@ -563,7 +563,8 @@ fd = os.open(dst, os.O_WRONLY | os.O_CREAT | os.O_TRUNC) - return XendCheckpoint.save(self, fd, dominfo) + # For now we don't support 'live checkpoint' + return XendCheckpoint.save(self, fd, dominfo, False) except OSError, ex: raise XendError("can't write guest state file %s: %s" % diff -r 0c0d929e787c -r a1de77c1486c tools/xcutils/xc_save.c --- a/tools/xcutils/xc_save.c Fri Sep 2 17:55:24 2005 +++ b/tools/xcutils/xc_save.c Sat Sep 3 01:36:29 2005 @@ -17,14 +17,17 @@ int main(int argc, char **argv) { - unsigned int xc_fd, io_fd, domid; + unsigned int xc_fd, io_fd, domid, maxit, max_f, flags; - if (argc != 4) - errx(1, "usage: %s xcfd iofd domid", argv[0]); + if (argc != 7) + errx(1, "usage: %s xcfd iofd domid maxit maxf flags", argv[0]); xc_fd = atoi(argv[1]); io_fd = atoi(argv[2]); domid = atoi(argv[3]); + maxit = atoi(argv[4]); + max_f = atoi(argv[5]); + flags = atoi(argv[6]); - return xc_linux_save(xc_fd, io_fd, domid); + return xc_linux_save(xc_fd, io_fd, domid, maxit, max_f, flags); } _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |