[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] Added new simple EDF scheduler
ChangeSet 1.1159.221.1, 2005/01/17 13:38:54+00:00, sd386@xxxxxxxxxxxxxxxxx Added new simple EDF scheduler tools/libxc/Makefile | 1 tools/libxc/xc.h | 8 tools/libxc/xc_sedf.c | 45 ++ tools/python/xen/lowlevel/xc/xc.c | 64 +++ tools/python/xen/xend/XendClient.py | 6 tools/python/xen/xend/XendDomain.py | 18 + tools/python/xen/xend/server/SrvDomain.py | 8 tools/python/xen/xm/main.py | 17 + xen/common/sched_sedf.c | 505 ++++++++++++++++++++++++++++++ xen/common/schedule.c | 4 xen/include/public/sched_ctl.h | 10 11 files changed, 685 insertions(+), 1 deletion(-) diff -Nru a/tools/libxc/Makefile b/tools/libxc/Makefile --- a/tools/libxc/Makefile 2005-05-09 14:03:41 -04:00 +++ b/tools/libxc/Makefile 2005-05-09 14:03:41 -04:00 @@ -12,6 +12,7 @@ INCLUDES += -I $(XEN_LIBXUTIL) SRCS := +SRCS += xc_sedf.c SRCS += xc_atropos.c SRCS += xc_bvtsched.c SRCS += xc_domain.c diff -Nru a/tools/libxc/xc.h b/tools/libxc/xc.h --- a/tools/libxc/xc.h 2005-05-09 14:03:41 -04:00 +++ b/tools/libxc/xc.h 2005-05-09 14:03:41 -04:00 @@ -132,6 +132,14 @@ int xc_rrobin_global_get(int xc_handle, u64 *slice); +int xc_sedf_domain_set(int xc_handle, + u32 domid, + u64 period, u64 slice); + +int xc_sedf_domain_get(int xc_handle, + u32 domid, + u64* period, u64 *slice); + typedef evtchn_status_t xc_evtchn_status_t; int xc_evtchn_alloc_unbound(int xc_handle, u32 dom, diff -Nru a/tools/libxc/xc_sedf.c b/tools/libxc/xc_sedf.c --- /dev/null Wed Dec 31 16:00:00 196900 +++ b/tools/libxc/xc_sedf.c 2005-05-09 14:03:41 -04:00 @@ -0,0 +1,45 @@ +/****************************************************************************** + * xc_sedf.c + * + * API for manipulating parameters of the Simple EDF scheduler. + * + * changes by Stephan Diestelhorst + * based on code + * by Mark Williamson, Copyright (c) 2004 Intel Research Cambridge. + */ + +#include "xc_private.h" + +int xc_sedf_domain_set(int xc_handle, + u32 domid, u64 period, u64 slice) +{ + dom0_op_t op; + struct sedf_adjdom *p = &op.u.adjustdom.u.sedf; + + op.cmd = DOM0_ADJUSTDOM; + op.u.adjustdom.domain = (domid_t)domid; + op.u.adjustdom.sched_id = SCHED_SEDF; + op.u.adjustdom.direction = SCHED_INFO_PUT; + + p->period = period; + p->slice = slice; + return do_dom0_op(xc_handle, &op); +} + +int xc_sedf_domain_get(int xc_handle, u32 domid, u64 *period, u64 *slice) +{ + dom0_op_t op; + int ret; + struct sedf_adjdom *p = &op.u.adjustdom.u.sedf; + + op.cmd = DOM0_ADJUSTDOM; + op.u.adjustdom.domain = (domid_t)domid; + op.u.adjustdom.sched_id = SCHED_SEDF; + op.u.adjustdom.direction = SCHED_INFO_GET; + + ret = do_dom0_op(xc_handle, &op); + + *period = p->period; + *slice = p->slice; + return ret; +} diff -Nru a/tools/python/xen/lowlevel/xc/xc.c b/tools/python/xen/lowlevel/xc/xc.c --- a/tools/python/xen/lowlevel/xc/xc.c 2005-05-09 14:03:41 -04:00 +++ b/tools/python/xen/lowlevel/xc/xc.c 2005-05-09 14:03:41 -04:00 @@ -758,6 +758,50 @@ return zero; } +static PyObject *pyxc_sedf_domain_set(PyObject *self, + PyObject *args, + PyObject *kwds) +{ + XcObject *xc = (XcObject *)self; + u32 domid; + u64 period, slice; + + static char *kwd_list[] = { "dom", "period", "slice", NULL }; + + if( !PyArg_ParseTupleAndKeywords(args, kwds, "iLL", kwd_list, &domid, + &period, &slice) ) + return NULL; + + if ( xc_sedf_domain_set(xc->xc_handle, domid, period, slice) != 0 ) + return PyErr_SetFromErrno(xc_error); + + Py_INCREF(zero); + return zero; +} + +static PyObject *pyxc_sedf_domain_get(PyObject *self, + PyObject *args, + PyObject *kwds) +{ + XcObject *xc = (XcObject *)self; + u32 domid; + u64 period, slice; + + static char *kwd_list[] = { "dom", NULL }; + + if( !PyArg_ParseTupleAndKeywords(args, kwds, "i", kwd_list, &domid) ) + return NULL; + + if ( xc_sedf_domain_get( xc->xc_handle, domid, &period, + &slice) ) + return PyErr_SetFromErrno(xc_error); + + return Py_BuildValue("{s:i,s:L,s:L}", + "domain", domid, + "period", period, + "slice", slice); +} + static PyObject *pyxc_shadow_control(PyObject *self, PyObject *args, PyObject *kwds) @@ -984,6 +1028,26 @@ "Get Round Robin scheduler settings\n" "Returns [dict]:\n" " slice [long]: Scheduler time slice.\n" }, + + { "sedf_domain_set", + (PyCFunction)pyxc_sedf_domain_set, + METH_KEYWORDS, "\n" + "Set the scheduling parameters for a domain when running with Atropos.\n" + " dom [int]: domain to set\n" + " period [long]: domain's scheduling period\n" + " slice [long]: domain's slice per period\n" + "Returns: [int] 0 on success; -1 on error.\n" }, + + { "sedf_domain_get", + (PyCFunction)pyxc_sedf_domain_get, + METH_KEYWORDS, "\n" + "Get the current scheduling parameters for a domain when running with\n" + "the Atropos scheduler." + " dom [int]: domain to query\n" + "Returns: [dict]\n" + " domain [int]: domain ID\n" + " period [long]: scheduler period\n" + " slice [long]: CPU reservation per period\n"}, { "evtchn_alloc_unbound", (PyCFunction)pyxc_evtchn_alloc_unbound, diff -Nru a/tools/python/xen/xend/XendClient.py b/tools/python/xen/xend/XendClient.py --- a/tools/python/xen/xend/XendClient.py 2005-05-09 14:03:41 -04:00 +++ b/tools/python/xen/xend/XendClient.py 2005-05-09 14:03:41 -04:00 @@ -272,6 +272,12 @@ 'latency' : latency, 'xtratime': xtratime }) + def xend_domain_cpu_sedf_set(self, id, period, slice): + return self.xendPost(self.domainurl(id), + {'op' : 'cpu_sedf_set', + 'period' : period, + 'slice' : slice }) + def xend_domain_maxmem_set(self, id, memory): return self.xendPost(self.domainurl(id), { 'op' : 'maxmem_set', diff -Nru a/tools/python/xen/xend/XendDomain.py b/tools/python/xen/xend/XendDomain.py --- a/tools/python/xen/xend/XendDomain.py 2005-05-09 14:03:41 -04:00 +++ b/tools/python/xen/xend/XendDomain.py 2005-05-09 14:03:41 -04:00 @@ -659,6 +659,24 @@ return xc.atropos_domain_get(dominfo.dom) except Exception, ex: raise XendError(str(ex)) + + def domain_cpu_sedf_set(self, id, period, slice): + """Set Atropos scheduler parameters for a domain. + """ + dominfo = self.domain_lookup(id) + try: + return xc.sedf_domain_set(dominfo.dom, period, slice) + except Exception, ex: + raise XendError(str(ex)) + + def domain_cpu_sedf_get(self, id): + """Get Atropos scheduler parameters for a domain. + """ + dominfo = self.domain_lookup(id) + try: + return xc.sedf_domain_get(dominfo.dom) + except Exception, ex: + raise XendError(str(ex)) def domain_device_create(self, id, devconfig): """Create a new device for a domain. diff -Nru a/tools/python/xen/xend/server/SrvDomain.py b/tools/python/xen/xend/server/SrvDomain.py --- a/tools/python/xen/xend/server/SrvDomain.py 2005-05-09 14:03:41 -04:00 +++ b/tools/python/xen/xend/server/SrvDomain.py 2005-05-09 14:03:41 -04:00 @@ -132,6 +132,14 @@ ['xtratime', 'int']]) val = fn(req.args, {'dom': self.dom.id}) return val + + def op_cpu_sedf_set(self, op, req): + fn = FormFn(self.xd.domain_cpu_sedf_set, + [['dom', 'str'], + ['period', 'int'], + ['slice', 'int']]) + val = fn(req.args, {'dom': self.dom.id}) + return val def op_maxmem_set(self, op, req): fn = FormFn(self.xd.domain_maxmem_set, diff -Nru a/tools/python/xen/xm/main.py b/tools/python/xen/xm/main.py --- a/tools/python/xen/xm/main.py 2005-05-09 14:03:41 -04:00 +++ b/tools/python/xen/xm/main.py 2005-05-09 14:03:41 -04:00 @@ -587,6 +587,23 @@ xm.prog(ProgRrobin) +class ProgSedf(Prog): + group = 'scheduler' + name= "sedf" + info = """Set simple EDF parameters.""" + + def help(self, args): + print args[0], "DOM PERIOD SLICE" + print "\nSet simple EDF parameters." + + def main(self, args): + if len(args) != 4: self.err("%s: Invalid argument(s)" % args[0]) + dom = args[1] + v = map(int, args[2:4]) + server.xend_domain_cpu_sedf_set(dom, *v) + +xm.prog(ProgSedf) + class ProgInfo(Prog): group = 'host' name = "info" diff -Nru a/xen/common/sched_sedf.c b/xen/common/sched_sedf.c --- /dev/null Wed Dec 31 16:00:00 196900 _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |