[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [v4][PATCH 15/19] tools: introduce a new parameter to set a predefined rdm boundary
On Tue, Jun 23, 2015 at 05:57:26PM +0800, Tiejun Chen wrote: > Previously we always fix that predefined boundary as 2G to handle > conflict between memory and rdm, but now this predefined boundar > can be changes with the parameter "rdm_mem_boundary" in .cfg file. > > CC: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> > CC: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> > CC: Ian Campbell <ian.campbell@xxxxxxxxxx> > CC: Wei Liu <wei.liu2@xxxxxxxxxx> > Signed-off-by: Tiejun Chen <tiejun.chen@xxxxxxxxx> > --- > v4: > > * Separated from the previous patch to provide a parameter to set that > predefined boundary dynamically. > > docs/man/xl.cfg.pod.5 | 21 +++++++++++++++++++++ > tools/libxl/libxl.h | 6 ++++++ > tools/libxl/libxl_create.c | 4 ++++ > tools/libxl/libxl_dom.c | 8 +------- > tools/libxl/libxl_types.idl | 1 + > tools/libxl/xl_cmdimpl.c | 3 +++ > 6 files changed, 36 insertions(+), 7 deletions(-) > > diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5 > index 638b350..079465f 100644 > --- a/docs/man/xl.cfg.pod.5 > +++ b/docs/man/xl.cfg.pod.5 > @@ -767,6 +767,27 @@ to a given device, and "strict" is default here. > > Note this would override global B<rdm> option. > > +=item B<rdm_mem_boundary=MBYTES> > + > +Number of megabytes to set a boundary for checking rdm conflict. > + > +When RDM conflicts with RAM, RDM probably scatter the whole RAM space. > +Especially multiple RDM entries would worsen this to lead a complicated > +memory layout. So here we're trying to figure out a simple solution to > +avoid breaking existing layout. So when a conflict occurs, > + > + #1. Above a predefined boundary > + - move lowmem_end below reserved region to solve conflict; > + > + #2. Below a predefined boundary > + - Check strict/relaxed policy. > + "strict" policy leads to fail libxl. Note when both policies > + are specified on a given region, 'strict' is always preferred. > + "relaxed" policy issue a warning message and also mask this entry > INVALID > + to indicate we shouldn't expose this entry to hvmloader. > + Can you check the generated manpage to see if the format is correct? > +Here the default is 2G. > + > =back > > =back > diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h > index 0a7913b..a6212fb 100644 > --- a/tools/libxl/libxl.h > +++ b/tools/libxl/libxl.h > @@ -858,6 +858,12 @@ const char *libxl_defbool_to_string(libxl_defbool b); > #define LIBXL_TIMER_MODE_DEFAULT -1 > #define LIBXL_MEMKB_DEFAULT ~0ULL > > +/* > + * We'd like to set a memory boundary to determine if we need to check > + * any overlap with reserved device memory. > + */ > +#define LIBXL_RDM_MEM_BOUNDARY_MEMKB_DEFAULT (2048 * 1024) > + > #define LIBXL_MS_VM_GENID_LEN 16 > typedef struct { > uint8_t bytes[LIBXL_MS_VM_GENID_LEN]; > diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c > index 30e6593..0438731 100644 > --- a/tools/libxl/libxl_create.c > +++ b/tools/libxl/libxl_create.c > @@ -109,6 +109,10 @@ void libxl__rdm_setdefault(libxl__gc *gc, > libxl_domain_build_info *b_info) > { > if (b_info->rdm.reserve == LIBXL_RDM_RESERVE_FLAG_INVALID) > b_info->rdm.reserve = LIBXL_RDM_RESERVE_FLAG_RELAXED; > + > + if (b_info->rdm_mem_boundary_memkb == LIBXL_MEMKB_DEFAULT) > + b_info->rdm_mem_boundary_memkb = > + LIBXL_RDM_MEM_BOUNDARY_MEMKB_DEFAULT; > } > > int libxl__domain_build_info_setdefault(libxl__gc *gc, > diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c > index 34bd466..0987991 100644 > --- a/tools/libxl/libxl_dom.c > +++ b/tools/libxl/libxl_dom.c > @@ -922,12 +922,6 @@ int libxl__build_hvm(libxl__gc *gc, uint32_t domid, > int ret, rc = ERROR_FAIL; > uint64_t mmio_start, lowmem_end, highmem_end; > libxl_domain_build_info *const info = &d_config->b_info; > - /* > - * Currently we fix this as 2G to guarantte how to handle > - * our rdm policy. But we'll provide a parameter to set > - * this dynamically. > - */ > - uint64_t rdm_mem_boundary = 0x80000000; > > memset(&args, 0, sizeof(struct xc_hvm_build_args)); > /* The params from the configuration file are in Mb, which are then > @@ -966,7 +960,7 @@ int libxl__build_hvm(libxl__gc *gc, uint32_t domid, > args.mmio_start = mmio_start; > > ret = libxl__domain_device_construct_rdm(gc, d_config, > - rdm_mem_boundary, > + > info->rdm_mem_boundary_memkb*1024, > &args); > if (ret) { > LOG(ERROR, "checking reserved device memory failed"); > diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl > index 5ba075d..d130d48 100644 > --- a/tools/libxl/libxl_types.idl > +++ b/tools/libxl/libxl_types.idl > @@ -395,6 +395,7 @@ libxl_domain_build_info = Struct("domain_build_info",[ > ("target_memkb", MemKB), > ("video_memkb", MemKB), > ("shadow_memkb", MemKB), > + ("rdm_mem_boundary_memkb", MemKB), Should this be restricted to .hvm? This is HVM only feature after all. Wei. > ("rtc_timeoffset", uint32), > ("exec_ssidref", uint32), > ("exec_ssid_label", string), > diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c > index 5637c30..c7a12b1 100644 > --- a/tools/libxl/xl_cmdimpl.c > +++ b/tools/libxl/xl_cmdimpl.c > @@ -1374,6 +1374,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, "rdm_mem_boundary", &l, 0)) > + b_info->rdm_mem_boundary_memkb = l * 1024; > + > if (!xlu_cfg_get_long(config, "max_event_channels", &l, 0)) > b_info->event_channels = l; > > -- > 1.9.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |