libxl: set domain scheduling parameters while creating the dom the domain specific scheduling parameters like cpu_weight, cap, slice, ... will be set during creating the domain, so this parameters can be defined in the domain config file Signed-off-by: Dieter Bloms diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c index 0bdd654..38acff4 100644 --- a/tools/libxl/libxl_dom.c +++ b/tools/libxl/libxl_dom.c @@ -124,8 +124,27 @@ int libxl__build_post(libxl__gc *gc, uint32_t domid, char *dom_path, *vm_path; xs_transaction_t t; char **ents, **hvm_ents; + libxl_scheduler sched; int i; + sched = libxl_get_scheduler (ctx); + switch (sched) { + case LIBXL_SCHEDULER_SEDF: + libxl_sched_sedf_domain_set(ctx, domid, &(info->us.sedf)); + break; + case LIBXL_SCHEDULER_CREDIT: + libxl_sched_credit_domain_set(ctx, domid, &(info->us.credit)); + break; + case LIBXL_SCHEDULER_CREDIT2: + libxl_sched_credit2_domain_set(ctx, domid, &(info->us.credit2)); + break; + case LIBXL_SCHEDULER_ARINC653: + /* not implemented */ + break; + default: + abort(); + } + 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 5cf9708..c1cdc3c 100644 --- a/tools/libxl/libxl_types.idl +++ b/tools/libxl/libxl_types.idl @@ -224,6 +224,27 @@ libxl_domain_create_info = Struct("domain_create_info",[ MemKB = UInt(64, init_val = "LIBXL_MEMKB_DEFAULT") +libxl_sched_credit_domain = Struct("sched_credit_domain", [ + ("weight", integer), + ("cap", integer), + ]) + +libxl_sched_credit2_domain = Struct("sched_credit2_domain", [ + ("weight", integer), + ]) + +libxl_sched_sedf_domain = Struct("sched_sedf_domain", [ + ("period", integer), + ("slice", integer), + ("latency", integer), + ("extratime", integer), + ("weight", integer), + ]) + +libxl_sched_arinc653_domain = Struct("sched_arinc653_domain", [ + ("weight", integer), + ]) + # Instances of libxl_file_reference contained in this struct which # have been mapped (with libxl_file_reference_map) will be unmapped # by libxl_domain_build/restore. If either of these are never called @@ -256,6 +277,13 @@ libxl_domain_build_info = Struct("domain_build_info",[ # extra parameters pass directly to qemu for HVM guest, NULL terminated ("extra_hvm", libxl_string_list), + ("us", KeyedUnion(None, libxl_scheduler, "sched", + [("credit", libxl_sched_credit_domain), + ("credit2", libxl_sched_credit2_domain), + ("sedf", libxl_sched_sedf_domain), + ("arinc653", libxl_sched_arinc653_domain), + ], keyvar_init_val = "-1")), + ("u", KeyedUnion(None, libxl_domain_type, "type", [("hvm", Struct(None, [("firmware", string), ("bios", libxl_bios_type), @@ -417,28 +445,12 @@ libxl_cputopology = Struct("cputopology", [ ("node", uint32), ], dir=DIR_OUT) -libxl_sched_credit_domain = Struct("sched_credit_domain", [ - ("weight", integer), - ("cap", integer), - ]) libxl_sched_credit_params = Struct("sched_credit_params", [ ("tslice_ms", integer), ("ratelimit_us", integer), ], dispose_fn=None) -libxl_sched_credit2_domain = Struct("sched_credit2_domain", [ - ("weight", integer), - ]) - -libxl_sched_sedf_domain = Struct("sched_sedf_domain", [ - ("period", integer), - ("slice", integer), - ("latency", integer), - ("extratime", integer), - ("weight", integer), - ]) - libxl_event_type = Enumeration("event_type", [ (1, "DOMAIN_SHUTDOWN"), (2, "DOMAIN_DEATH"), diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c index 5703512..db51ca6 100644 --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -587,6 +587,23 @@ static void parse_config_data(const char *configfile_filename_report, libxl_domain_build_info_init_type(b_info, c_info->type); /* the following is the actual config parsing with overriding values in the structures */ + if (!xlu_cfg_get_long (config, "cpu_weight", &l, 0)) + b_info->us.credit.weight = l; + b_info->us.credit2.weight = l; + b_info->us.sedf.weight = l; + + if (!xlu_cfg_get_long (config, "cap", &l, 0)) + b_info->us.credit.cap = l; + + if (!xlu_cfg_get_long (config, "period", &l, 0)) + b_info->us.sedf.period = l; + if (!xlu_cfg_get_long (config, "slice", &l, 0)) + b_info->us.sedf.period = l; + if (!xlu_cfg_get_long (config, "latency", &l, 0)) + b_info->us.sedf.period = l; + if (!xlu_cfg_get_long (config, "extratime", &l, 0)) + b_info->us.sedf.period = l; + if (!xlu_cfg_get_long (config, "vcpus", &l, 0)) { b_info->max_vcpus = l; b_info->cur_vcpus = (1 << l) - 1;