|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 for Xen 4.6 1/4] xen: enabling XL to set per-VCPU parameters of a domain for RTDS scheduler
On Mon, 2015-05-25 at 19:05 -0500, Chong Li wrote:
> diff --git a/xen/common/domctl.c b/xen/common/domctl.c
> index 28aea55..8143c44 100644
> --- a/xen/common/domctl.c
> +++ b/xen/common/domctl.c
> @@ -841,6 +841,11 @@ long do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t)
> u_domctl)
> copyback = 1;
> break;
>
> + case XEN_DOMCTL_scheduler_vcpu_op:
> + ret = sched_adjust_vcpu(d, &op->u.scheduler_vcpu_op);
> + copyback = 1;
> + break;
> +
>
So, thinking more about this, do we really want a full new DOMCTL, or do
we want to instrument XEN_DOMCTL_scheduler_op? That would mean adding
two operations there, and fiddling with struct xen_domctl_scheduler_op?
The problem I see is that, whatever I imagine putting this, there would
be some redundancy.
Quick-&-dirty, I put together the below... would it possibly make sense?
typedef struct xen_domctl_sched_credit {
uint16_t weight;
uint16_t cap;
} xen_domctl_sched_credit_t;
typedef struct xen_domctl_sched_credit2 {
uint16_t weight;
} xen_domctl_sched_credit2_t;
typedef struct xen_domctl_sched_rtds {
uint32_t
period;
uint32_t budget;
} xen_domctl_sched_rtds_t;
typedef union xen_domctl_schedparam {
xen_domctl_sched_credit_t credit;
xen_domctl_sched_credit2_t credit2;
xen_domctl_sched_rtds_t rtds;
} xen_domctl_schedparam_t;
typedef struct xen_domctl_schedparam_vcpu {
union {
xen_domctl_sched_credit_t credit;
xen_domctl_sched_credit2_t credit2;
xen_domctl_sched_rtds_t rtds;
} s;
uint16_t vcpuid;
} xen_domctl_schedparam_vcpu_t;
DEFINE_XEN_GUEST_HANDLE(xen_domctl_schedparam_vcpu_t);
/* Set or get info? */
#define XEN_DOMCTL_SCHEDOP_putinfo 0
#define XEN_DOMCTL_SCHEDOP_getinfo 1
#define XEN_DOMCTL_SCHEDOP_putvcpuinfo 2
#define XEN_DOMCTL_SCHEDOP_getvcpuinfo 3
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);
I'm also attaching a (build-tested only) patch to that effect (I'm
killing SEDF in there, so I don't have to care about it, as it's going
away anyway).
Thoughts?
> /*
> - * set/get each vcpu info of each domain
> + * set/get per-domain params of a domain
> */
> static int
> rt_dom_cntl(
> @@ -1115,6 +1115,74 @@ rt_dom_cntl(
> return rc;
> }
>
> +/*
> + * set/get per-vcpu params of a domain
> + */
> +static int
> +rt_vcpu_cntl(
> + const struct scheduler *ops,
> + struct domain *d,
> + struct xen_domctl_scheduler_vcpu_op *op)
> +{
>
I commented this function already, while replying to Jan.
> +/* Adjust scheduling parameter for the vcpus of a given domain. */
> +long sched_adjust_vcpu(
> + struct domain *d,
> + struct xen_domctl_scheduler_vcpu_op *op)
> +{
>
Actually, I don't think you even need this function.
Especially if we take the path of doing all this as subops of
DOMCTL_scheduler_op, you can just use sched_adjust, do some more
multiplexing in there, and the call the proper scheduler hook.
Thanks and 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)
Attachment:
vcpuparams.patch Attachment:
signature.asc _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |