|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 for Xen 4.6 3/4] libxl: enabling XL to set per-VCPU parameters of a domain for RTDS scheduler
If no more feedbacks, let me summarize the design for the next version.
For "get" operations, we will implement the following features:
1) Use " xl sched-rtds -v all " to output the per-dom parameters of
all domains. And use, e.g., " xl sched-rtds -d vm1 -v all ", to output
the per-dom parameters of one specific domain. When a domain (say vm1)
has vcpus with different scheduling parameters but meanwhile the user
uses "xl sched-rtds -d vm1 -v all " to show the per-dom parameters,
the actual output result is just the parameters of vcpu with ID=0
(which is pointless, and should be made clear to the users).
These two kinds of "get" operations would be implemented through
libxl_domain_sched_params_get() and other domain-related functions (no
changes to all these functions).
2) For example, use " xl sched-rtds -d vm1 -v 0 -v 2 -v 4 " to show
the per-vcpu parameters of vcpu"0", vcpu"2" and vcpu"4" of vm1.
This kind of "get" operation would be implemented through
libxl_vcpu_sched_params_get() and other newly-added vcpu-related
functions.
For "set" operations, no new feature is added, against patch v2.
We need some new data structures to support per-vcpu operations (for
all schedulers, not just RTDS).
1) In libxl, we will introduce:
libxl_vcpu_sched_params = Struct("vcpu_sched_params",[
("vcpuid", integer, { xxx some init val xxx}),
("weight", integer, {'init_val': 'LIBXL_PARAM_WEIGHT_DEFAULT'}),
("cap", integer, {'init_val': 'LIBXL_PARAM_CAP_DEFAULT'}),
("period", integer, {'init_val': 'LIBXL_PARAM_PERIOD_DEFAULT'}),
("slice", integer, {'init_val': 'LIBXL_PARAM_SLICE_DEFAULT'}),
("latency", integer, {'init_val': 'LIBXL_PARAM_LATENCY_DEFAULT'}),
("extratime", integer, {'init_val': 'LIBXL_PARAM_EXTRATIME_DEFAULT'}),
("budget", integer, {'init_val': 'LIBXL_PARAM_BUDGET_DEFAULT'}),
])
libxl_sched_params = Struct("sched_params",[
("sched", libxl_scheduler),
("vcpus", Array(libxl_sched_params, "num_vcpus")),
])
and use libxl_sched_params to store and transfer vcpu array with
parameters to change/output.
2) In xen, we will introduce:
struct xen_domctl_scheduler_op {
uint32_t sched_id; /* XEN_SCHEDULER_* */
uint32_t cmd; /* XEN_DOMCTL_SCHEDOP_* */
union {
xen_domctl_schedparam_t d;
struct {
XEN_GUEST_HANDLE_64(xen_domctl_schedparam_vcpu_t) vcpus;
uint16_t nr_vcpus;
} v;
} u;
};
typedef struct xen_domctl_scheduler_op xen_domctl_scheduler_op_t;
DEFINE_XEN_GUEST_HANDLE(xen_domctl_scheduler_op_t);
and some others (details can be found in
http://www.gossamer-threads.com/lists/xen/devel/380726?do=post_view_threaded
). Because of this new xen_domctl_scheduler_op_t, some changes have to
be done for credit and credit2 schedulers (for the
XEN_DOMCTL_scheduler_op processing there).
Please correct me if something is wrong.
Thanks,
Chong
On Tue, Jun 9, 2015 at 11:18 AM, Dario Faggioli
<dario.faggioli@xxxxxxxxxx> wrote:
> On Mon, 2015-06-08 at 15:55 -0500, Chong Li wrote:
>> On Mon, Jun 8, 2015 at 10:56 AM, Dario Faggioli
>
>> > So, Thoughts? What do you think the best way forward could be?
>>
>> I like option 2 more. But I think we may also need a 'vcpuid' field in
>> libxl_sched_params.
>>
> For sparse array support, yes. At which point, I would flip the names as
> well, i.e., something like this:
>
> libxl_vcpu_sched_params = Struct("vcpu_sched_params",[
> ("vcpuid", integer, { xxx some init val xxx}),
> ("weight", integer, {'init_val': 'LIBXL_PARAM_WEIGHT_DEFAULT'}),
> ("cap", integer, {'init_val': 'LIBXL_PARAM_CAP_DEFAULT'}),
> ("period", integer, {'init_val': 'LIBXL_PARAM_PERIOD_DEFAULT'}),
> ("slice", integer, {'init_val': 'LIBXL_PARAM_SLICE_DEFAULT'}),
> ("latency", integer, {'init_val': 'LIBXL_PARAM_LATENCY_DEFAULT'}),
> ("extratime", integer, {'init_val': 'LIBXL_PARAM_EXTRATIME_DEFAULT'}),
> ("budget", integer, {'init_val': 'LIBXL_PARAM_BUDGET_DEFAULT'}),
> ])
>
> libxl_sched_params = Struct("sched_params",[
> ("sched", libxl_scheduler),
> ("vcpus", Array(libxl_sched_params, "num_vcpus")),
> ])
>
> With the possibility of naming the latter 'libxl_vcpus_sched_params',
> which is more descriptive, but perhaps is too similar to
> libxl_vcpu_sched_params.
>
> Ian, George, what do you think?
>
> While we're here, another thing we would appreciate some feedback on is
> what should happen to libxl_domain_sched_params_get(). This occurred to
> my mind while reviewing patch 4 of this series. Actually, I think we've
> discussed this before, but can't find the reference now.
>
> Anyway, my view is that, for a scheduler that uses per-vcpu parameters,
> libxl_domain_sched_params_set() should set the same parameters for all
> the vcpus.
> When it comes to _get(), however, I'm not sure. To match the _set()
> case, we'd need to return the parameters of all the vcpus, but we can't,
> because the function takes a libxl_domain_sched_params argument, which
> just holds 1 tuple.
>
> Should we just WARN and ask, when on that specific scheduler, to use the
> per-vcpu variant being introduced in this patch
> (libxl_vcpu_sched_params_get())?
>
> This does not look ideal, but without changing the prototype of
> libxl_domain_sched_params_get(), I don't see what else sensible we could
> do... :-/
>
> Should we change it, and do the LIBXL_API_VERSION "trick"?
>
> So, again, thoughts?
>
> Regards,
> Dario
>
> --
> <<This happens because I choose it to happen!>> (Raistlin Majere)
> -----------------------------------------------------------------
> Dario Faggioli, Ph.D, http://about.me/dario.faggioli
> Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK)
--
Chong Li
Department of Computer Science and Engineering
Washington University in St.louis
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |