[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4] tools: set migration constraints from cmdline
On Fri, 2013-02-01 at 19:34 +0000, Olaf Hering wrote: > # HG changeset patch > # User Olaf Hering <olaf@xxxxxxxxx> > # Date 1359746832 -3600 > # Node ID 785c8f34e1f802106e53ca4d2c54dce55c8ee166 > # Parent fd711ebdce9a58556d62c2daaf5d49ab06de4a3c > tools: set migration constraints from cmdline > > Add new options to xm/xl migrate to control the process of migration. > The intention is to optionally abort the migration if it takes too long > to migrate a busy guest due to the high number of dirty pages. Currently > the guest is suspended to transfer the remaining dirty pages. This > transfer can take too long, which can confuse the guest if its suspended > for too long. > > -M <number> Number of iterations before final suspend (default: 30) > --max_iters <number> > > -m <factor> Max amount of memory to transfer before final suspend (default: > 3*RAM) > --max_factor <factor> > > -N Abort migration instead of doing final suspend. > --no_suspend Is this last one a debug option? (Having read the patch I think not, but the description here doesn't really explain it) > The changes to libxl change the API, is that approach acceptable? I think this is now along the right lines (see below though). > v4: > - update default for no_suspend from None to 0 in XendCheckpoint.py:save > - update logoutput in setMigrateConstraints > - change xm migrate defaults from None to 0 > - add new options to xl.1 > - fix syntax error in XendDomain.py:domain_migrate_constraints_set > - fix xm migrate -N option name to match xl migrate > > v3: > - move logic errors in libxl__domain_suspend and fixed help text in > cmd_table to separate patches > - fix syntax error in XendCheckpoint.py > - really pass max_iters and max_factor in libxl__xc_domain_save > - make libxl_domain_suspend_0x040200 declaration globally visible > - bump libxenlight.so SONAME from 2.0 to 2.1 due to changed > libxl_domain_suspend > > v2: > - use LIBXL_API_VERSION and define libxl_domain_suspend_0x040200 > - fix logic error in min_reached check in xc_domain_save > - add longopts > - update --help text > - correct description of migrate --help text > > Signed-off-by: Olaf Hering <olaf@xxxxxxxxx> > > diff -r fd711ebdce9a -r 785c8f34e1f8 docs/man/xl.pod.1 > --- a/docs/man/xl.pod.1 > +++ b/docs/man/xl.pod.1 > @@ -391,6 +391,18 @@ Send <config> instead of config file fro > > Print huge (!) amount of debug during the migration process. > > +=item B<-M> I<number>, B<--max_iters> I<number> > + > +Number of iterations before final suspend (default: 30) > + > +=item B<-m> I<factor>, B<--max_factor> I<factor> > + > +Max amount of memory to transfer before final suspend (default: 3*RAM) > + > +=item B<-N>, B<--no_suspend> > + > +Abort migration instead of doing final suspend. > + > =back > > =item B<remus> [I<OPTIONS>] I<domain-id> I<host> > diff -r fd711ebdce9a -r 785c8f34e1f8 tools/libxc/xc_domain_save.c > --- a/tools/libxc/xc_domain_save.c > +++ b/tools/libxc/xc_domain_save.c The changes to this file only seem to implement the -N and not the other two? > diff -r fd711ebdce9a -r 785c8f34e1f8 tools/libxl/libxl.h > --- a/tools/libxl/libxl.h > +++ b/tools/libxl/libxl.h > @@ -500,12 +500,25 @@ int libxl_domain_create_restore(libxl_ct > void libxl_domain_config_init(libxl_domain_config *d_config); > void libxl_domain_config_dispose(libxl_domain_config *d_config); > > -int libxl_domain_suspend(libxl_ctx *ctx, uint32_t domid, int fd, > +int libxl_domain_suspend_0x040200(libxl_ctx *ctx, uint32_t domid, int fd, > int flags, /* LIBXL_SUSPEND_* */ > const libxl_asyncop_how *ao_how) > LIBXL_EXTERNAL_CALLERS_ONLY; > +#ifdef LIBXL_API_VERSION > +#if LIBXL_API_VERSION == 0x040200 > +#define libxl_domain_suspend libxl_domain_suspend_0x040200 int libxl_domain_suspend(libxl_ctx *ctx, uint32_t domid, int fd, int flags, /* LIBXL_SUSPEND_* */ int max_iters, int max_factor, const libxl_asyncop_how *ao_how) LIBXL_EXTERNAL_CALLERS_ONLY; #ifdef LIBXL_API_VERSION #if LIBXL_API_VERSION == 0x040200 #define libxl_domain_suspend(ctx, domid, fd, flags, ao_how) \ libxl_domain_suspend(ctx, domid, fd, flags, 0, 0, ao_how) #endif /* LIBXL_API_VERSION == 0x040200 */ #endif /* defined(LIBXL_API_VERSION) */ Should work? Not sure if #if defined(LIBXL_API_VERSION) && LIBXL_API_VERSION == 0x040200 works in CPP. Maybe we should #ifndef LIBXL_API_VERSION #define LIBXL_API_VERSION LIBXL_API_VERSION_LATEST #endif ? > + > #define LIBXL_SUSPEND_DEBUG 1 > #define LIBXL_SUSPEND_LIVE 2 > +#define LIBXL_SUSPEND_NO_FINAL_SUSPEND 4 (These should really be in the IDL, but this is a pre-existing condition) The name of this new option doesn't quite describe what it does, since it doesn't disable the final suspend always, only under certain condition. LIBXL_SUSPEND_ABORT_ON_<xxx> Where the <xxx> is tricky ;-) <xxx> == DIRTYING_TOO_FAST <xxx> == GUEST_TOO_BUSY <xxx> == YOUR_SUGGESTIONS_HERE > > /* @param suspend_cancel [from xenctrl.h:xc_domain_resume( @param fast )] > * If this parameter is true, use co-operative resume. The guest > diff -r fd711ebdce9a -r 785c8f34e1f8 tools/libxl/libxl_dom.c > --- a/tools/libxl/libxl_dom.c > +++ b/tools/libxl/libxl_dom.c > @@ -1240,6 +1240,7 @@ void libxl__domain_suspend(libxl__egc *e > > dss->xcflags = (live ? XCFLAGS_LIVE : 0) > | (debug ? XCFLAGS_DEBUG : 0) > + | (dss->xlflags & LIBXL_SUSPEND_NO_FINAL_SUSPEND ? > XCFLAGS_DOMSAVE_NOSUSPEND : 0) > | (dss->hvm ? XCFLAGS_HVM : 0); > > dss->suspend_eventchn = -1; > diff -r fd711ebdce9a -r 785c8f34e1f8 tools/libxl/xl_cmdimpl.c > --- a/tools/libxl/xl_cmdimpl.c > +++ b/tools/libxl/xl_cmdimpl.c > @@ -3172,7 +3172,7 @@ static int save_domain(uint32_t domid, c > > save_domain_core_writeconfig(fd, filename, config_data, config_len); > > - int rc = libxl_domain_suspend(ctx, domid, fd, 0, NULL); > + int rc = libxl_domain_suspend(ctx, domid, fd, 0, 0, 0, NULL); Doesn't this need to pass down the selected values? > @@ -3753,8 +3757,16 @@ int main_migrate(int argc, char **argv) > char *rune = NULL; > char *host; > int opt, daemonize = 1, monitor = 1, debug = 0; > - > - SWITCH_FOREACH_OPT(opt, "FC:s:ed", NULL, "migrate", 2) { > + int max_iters = 0, max_factor = 0, no_suspend = 0; > + static struct option opts[] = { > + {"max_iters", 1, 0, 'M'}, > + {"max_factor", 1, 0, 'm'}, > + {"no_suspend", 0, 0, 'N'}, I think _ in arguments is pretty ugly... But I see we have others already. > diff -r fd711ebdce9a -r 785c8f34e1f8 tools/python/xen/xend/XendCheckpoint.py > --- a/tools/python/xen/xend/XendCheckpoint.py > +++ b/tools/python/xen/xend/XendCheckpoint.py I didn't look at any of the python stuff. Ian. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |