[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 11/11] libxl, xl: add event_channels option to xl configuration file
On Fri, 2013-09-27 at 11:55 +0100, David Vrabel wrote: > From: David Vrabel <david.vrabel@xxxxxxxxxx> > > Add the 'event_channels' option to the xl configuration file to limit > the number of event channels that domain may use. > > Plumb this option through to libxl via a new libxl_build_info field > and call xc_domain_set_max_evtchn() in the post build stage of domain > creation. > > A new LIBXL_HAVE_BUILDINFO_EVENT_CHANNELS #define indicates that this > new field is available. > > The default value of 127 limits the domain to uses the minimum amount "to use" > of Xen resources (xenheap and global mapping pages) regardless of > event channel ABI that may be used by a guest. > > Signed-off-by: David Vrabel <david.vrabel@xxxxxxxxxx> > Cc: Ian Campbell <ian.campbell@xxxxxxxxxx> > Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> > --- > docs/man/xl.cfg.pod.5 | 12 ++++++++++++ > tools/libxl/libxl.h | 5 +++++ > tools/libxl/libxl_create.c | 3 +++ > tools/libxl/libxl_dom.c | 4 ++++ > tools/libxl/libxl_types.idl | 1 + > tools/libxl/xl_cmdimpl.c | 3 +++ > 6 files changed, 28 insertions(+), 0 deletions(-) > > diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5 > index 769767b..3c7dd28 100644 > --- a/docs/man/xl.cfg.pod.5 > +++ b/docs/man/xl.cfg.pod.5 > @@ -572,6 +572,18 @@ Allow a guest to access specific physical IRQs. > It is recommended to use this option only for trusted VMs under > administrator control. > > +=item B<event_channels=N> Since this is actually a limit perhaps apply s/event_channels/max_&/ throughout? > + > +Limit the guest to using a most N event channels (PV interrupts). > +Guests use hypervisor resources for each event channel they use. > + > +The default of 127 should be sufficient for typical guests and means > +the guest uses the lowest amout of hypervisor resources. The maximum "amount" > +value depends what the guest supports. Guests supporting the > +FIFO-based event channel ABI support up to 131,071 event channels. > +Other guests are limited to 4095 (64-bit x86 and ARM) or 1023 (32-bit > +x86). Does this setting really restrict the classical ABI to 127? TBH I'm fine if it does, just curious. > + > =back > > =head2 Paravirtualised (PV) Guest Specific Options > diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h > index 4cab294..30712c2 100644 > --- a/tools/libxl/libxl.h > +++ b/tools/libxl/libxl.h > @@ -90,6 +90,11 @@ > #define LIBXL_HAVE_BUILDINFO_HVM_VENDOR_DEVICE 1 > > /* > + * The libxl_domain_build_info has the event_channels field. > + */ > +#define LIBXL_HAVE_BUILDINFO_EVENT_CHANNELS 1 > + > +/* > * libxl ABI compatibility > * > * The only guarantee which libxl makes regarding ABI compatibility > diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c > index 7567238..806e25c 100644 > --- a/tools/libxl/libxl_create.c > +++ b/tools/libxl/libxl_create.c > @@ -208,6 +208,9 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc, > > libxl_defbool_setdefault(&b_info->disable_migrate, false); > > + if (!b_info->event_channels) > + b_info->event_channels = 127; > + > switch (b_info->type) { > case LIBXL_DOMAIN_TYPE_HVM: > if (b_info->shadow_memkb == LIBXL_MEMKB_DEFAULT) > diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c > index 6e2252a..c905c74 100644 > --- a/tools/libxl/libxl_dom.c > +++ b/tools/libxl/libxl_dom.c > @@ -268,6 +268,10 @@ int libxl__build_post(libxl__gc *gc, uint32_t domid, > if (rc) > return rc; > > + rc = xc_domain_set_max_evtchn(ctx->xch, domid, info->event_channels); > + if (rc) > + return rc; Is there anything sensible we can log here? Would be nice to give some clue as to why the domain creation failed... > + > libxl_cpuid_apply_policy(ctx, domid); > if (info->cpuid != NULL) > libxl_cpuid_set(ctx, domid, info->cpuid); > diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl > index 049dbb5..7bf517d 100644 > --- a/tools/libxl/libxl_types.idl > +++ b/tools/libxl/libxl_types.idl > @@ -308,6 +308,7 @@ libxl_domain_build_info = Struct("domain_build_info",[ > ("irqs", Array(uint32, "num_irqs")), > ("iomem", Array(libxl_iomem_range, "num_iomem")), > ("claim_mode", libxl_defbool), > + ("event_channels", uint32), > ("u", KeyedUnion(None, libxl_domain_type, "type", > [("hvm", Struct(None, [("firmware", string), > ("bios", libxl_bios_type), > diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c > index 3d7eaad..7931bb9 100644 > --- a/tools/libxl/xl_cmdimpl.c > +++ b/tools/libxl/xl_cmdimpl.c > @@ -813,6 +813,9 @@ static void parse_config_data(const char *config_source, > if (!xlu_cfg_get_long (config, "videoram", &l, 0)) > b_info->video_memkb = l * 1024; > > + if (!xlu_cfg_get_long(config, "event_channels", &l, 0)) > + b_info->event_channels = l; > + > switch(b_info->type) { > case LIBXL_DOMAIN_TYPE_HVM: > if (!xlu_cfg_get_string (config, "kernel", &buf, 0)) _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |