|
[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 |