Hi,
This patch adds a "sched-list" command to xm which lists information about each domains scheduling parameters. It should apply cleanly to the latest xen-unstable.
Cheers
Ross
# HG changeset patch
# User rcmcilro@xxxxxxxxxxxxxxxxxxxxx
# Node ID c7b543a60886305dfb2623321b2dca60da482568
# Parent 08326a54975aca7c204877fa368020bd840436c7
Add sched-list command to xm
diff -r 08326a54975a -r c7b543a60886 tools/python/xen/lowlevel/xc/xc.c
--- a/tools/python/xen/lowlevel/xc/xc.c Tue Aug 16 10:52:30 2005
+++ b/tools/python/xen/lowlevel/xc/xc.c Wed Aug 17 12:13:45 2005
@@ -372,6 +372,23 @@
return Py_BuildValue("{s:i}", "store_mfn", store_mfn);
}
+static PyObject *pyxc_sched_id_get(PyObject *self,
+ PyObject *args,
+ PyObject *kwds)
+{
+ XcObject *xc = (XcObject *)self;
+
+ int sched_id;
+
+ if ( !PyArg_ParseTuple(args, "") )
+ return NULL;
+
+ if ( xc_sched_id(xc->xc_handle, &sched_id) != 0 )
+ return PyErr_SetFromErrno(xc_error);
+
+ return Py_BuildValue("s:i", "sched_id", sched_id);
+}
+
static PyObject *pyxc_bvtsched_global_set(PyObject *self,
PyObject *args,
PyObject *kwds)
@@ -459,13 +476,13 @@
&warpvalue, &warpl, &warpu) != 0 )
return PyErr_SetFromErrno(xc_error);
- return Py_BuildValue("{s:i,s:l,s:l,s:l,s:l}",
- "domain", dom,
- "mcuadv", mcuadv,
- "warpback", warpback,
+ return Py_BuildValue("{s:i,s:i,s:i,s:l,s:l,s:i}",
+ "domain", dom,
+ "mcuadv", mcuadv,
+ "warpback", warpback,
"warpvalue", warpvalue,
- "warpl", warpl,
- "warpu", warpu);
+ "warpl", (long)warpl,
+ "warpu", (long)warpu);
}
static PyObject *pyxc_evtchn_alloc_unbound(PyObject *self,
@@ -739,12 +756,13 @@
&slice,&latency,&extratime,&weight) )
return PyErr_SetFromErrno(xc_error);
- return Py_BuildValue("{s:i,s:L,s:L,s:L,s:i}",
+ return Py_BuildValue("{s:i,s:L,s:L,s:L,s:i,s:i}",
"domain", domid,
"period", period,
"slice", slice,
- "latency", latency,
- "extratime", extratime);
+ "latency", latency,
+ "extratime", extratime,
+ "weight", weight);
}
static PyObject *pyxc_shadow_control(PyObject *self,
@@ -938,6 +956,12 @@
" cmdline [str, n/a]: Kernel parameters, if any.\n\n"
"Returns: [int] 0 on success; -1 on error.\n" },
+ { "sched_id_get",
+ (PyCFunction)pyxc_sched_id_get,
+ METH_VARARGS | METH_KEYWORDS, "\n"
+ "Get the id of the Xen domain scheduler.\n"
+ "Returns: [dict]:\n" },
+
{ "bvtsched_global_set",
(PyCFunction)pyxc_bvtsched_global_set,
METH_VARARGS | METH_KEYWORDS, "\n"
diff -r 08326a54975a -r c7b543a60886 tools/python/xen/xend/XendClient.py
--- a/tools/python/xen/xend/XendClient.py Tue Aug 16 10:52:30 2005
+++ b/tools/python/xen/xend/XendClient.py Wed Aug 17 12:13:45 2005
@@ -190,6 +190,16 @@
def xend_node_log(self):
return self.xendGet(self.nodeurl('log'))
+ # Scheduler Types, from sched_ctl.h
+ """BVT (Borrowed Virtual Time)"""
+ SCHED_BVT = 0
+ """SEDF (Simple Earliest Deadline First)"""
+ SCHED_SEDF = 4
+
+ def xend_sched_id_get(self):
+ return self.xendPost(self.nodeurl(),
+ {'op' : 'sched_id_get'})
+
def xend_node_cpu_bvt_slice_set(self, ctx_allow):
return self.xendPost(self.nodeurl(),
{'op' : 'cpu_bvt_slice_set',
@@ -266,6 +276,10 @@
'warpl' : warpl,
'warpu' : warpu })
+ def xend_domain_cpu_bvt_get(self, id):
+ return self.xendPost(self.domainurl(id),
+ {'op' : 'cpu_bvt_get'})
+
def xend_domain_cpu_sedf_set(self, id, period, slice, latency, extratime, weight):
return self.xendPost(self.domainurl(id),
{'op' : 'cpu_sedf_set',
@@ -274,6 +288,10 @@
'latency' : latency,
'extratime' : extratime,
'weight' : weight })
+
+ def xend_domain_cpu_sedf_get(self, id):
+ return self.xendPost(self.domainurl(id),
+ {'op' : 'cpu_sedf_get'})
def xend_domain_maxmem_set(self, id, memory):
return self.xendPost(self.domainurl(id),
diff -r 08326a54975a -r c7b543a60886 tools/python/xen/xend/XendNode.py
--- a/tools/python/xen/xend/XendNode.py Tue Aug 16 10:52:30 2005
+++ b/tools/python/xen/xend/XendNode.py Wed Aug 17 12:13:45 2005
@@ -39,6 +39,9 @@
def notify(self, uri):
return 0
+ def sched_id_get(self):
+ return self.xc.sched_id_get()
+
def cpu_bvt_slice_set(self, ctx_allow):
return self.xc.bvtsched_global_set(ctx_allow=ctx_allow)
diff -r 08326a54975a -r c7b543a60886 tools/python/xen/xend/server/SrvDomain.py
--- a/tools/python/xen/xend/server/SrvDomain.py Tue Aug 16 10:52:30 2005
+++ b/tools/python/xen/xend/server/SrvDomain.py Wed Aug 17 12:13:45 2005
@@ -117,6 +117,11 @@
val = fn(req.args, {'dom': self.dom.id})
return val
+ def op_cpu_bvt_get(self, op, req):
+ fn = FormFn(self.xd.domain_cpu_bvt_get,
+ [['dom', '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,
@@ -126,6 +131,12 @@
['latency', 'int'],
['extratime', 'int'],
['weight', 'int']])
+ val = fn(req.args, {'dom': self.dom.id})
+ return val
+
+ def op_cpu_sedf_get(self, op, req):
+ fn = FormFn(self.xd.domain_cpu_sedf_get,
+ [['dom', 'int']])
val = fn(req.args, {'dom': self.dom.id})
return val
diff -r 08326a54975a -r c7b543a60886 tools/python/xen/xend/server/SrvNode.py
--- a/tools/python/xen/xend/server/SrvNode.py Tue Aug 16 10:52:30 2005
+++ b/tools/python/xen/xend/server/SrvNode.py Wed Aug 17 12:13:45 2005
@@ -39,7 +39,10 @@
def op_reboot(self, op, req):
val = self.xn.reboot()
return val
-
+
+ def op_sched_id_get(self, op, req):
+ return self.xn.sched_id_get()
+
def op_cpu_bvt_slice_set(self, op, req):
fn = FormFn(self.xn.cpu_bvt_slice_set,
[['ctx_allow', 'int']])
diff -r 08326a54975a -r c7b543a60886 tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py Tue Aug 16 10:52:30 2005
+++ b/tools/python/xen/xm/main.py Wed Aug 17 12:13:45 2005
@@ -89,6 +89,7 @@
log print the xend log
Scheduler Commands:
+ sched-list list information about scheduler parameters
bvt <options> set BVT scheduler parameters
bvt_ctxallow <Allow> set the BVT scheduler context switch allowance
sedf <options> set simple EDF parameters
@@ -281,6 +282,18 @@
args.insert(0,"-v")
xm_list(args)
+def xm_bvt_info(sched_info):
+ print "Scheduler Type: BVT (Borrowed Virtual Time)"
+ print 'DomId MCU Advance Warp Back(us) Warp Value(us) Warp Limit(us) Unwarp(us)'
+ for dom_sched in sched_info:
+ print ("%(domain)5d %(mcuadv)11d %(warpback)13d %(warpvalue)13d %(warpl)13d %(warpu)13d" % dom_sched)
+
+def xm_sedf_info(sched_info):
+ print "Scheduler Type: SEDF (Simple Earliest Deadline First)"
+ print 'DomId Period(us) Slice(us) Latency(us) Extratime Weight'
+ for dom_sched in sched_info:
+ print ("%(domain)5d %(period)15d %(slice)15d %(latency)13d %(extratime)8d %(weight)6d" % dom_sched)
+
def xm_destroy(args):
arg_check(args,1,"destroy")
@@ -412,6 +425,32 @@
dom = server.xend_domain(name)
print sxp.child_value(dom, 'name')
+def xm_sched_list(args):
+
+ n = len(args)
+
+ sched_info = []
+ from xen.xend.XendClient import server
+ if n == 0:
+ doms = server.xend_domains()
+ doms.sort()
+ else:
+ doms = args
+
+ sched_id = eval(server.xend_sched_id_get())[1]
+ if sched_id == server.SCHED_BVT:
+ for dom in doms:
+ dom_sched_info = server.xend_domain_cpu_bvt_get(dom)
+ sched_info.append(eval(dom_sched_info))
+ xm_bvt_info(sched_info)
+ elif sched_id == server.SCHED_SEDF:
+ for dom in doms:
+ dom_sched_info = server.xend_domain_cpu_sedf_get(dom)
+ sched_info.append(eval(dom_sched_info))
+ xm_sedf_info(sched_info)
+ else:
+ print "Scheduler Type: Unknown"
+
def xm_bvt(args):
arg_check(args, 6, "bvt")
dom = args[0]
@@ -571,6 +610,7 @@
"info": xm_info,
"log": xm_log,
# scheduler
+ "sched-list": xm_sched_list,
"bvt": xm_bvt,
"bvt_ctxallow": xm_bvt_ctxallow,
"sedf": xm_sedf,
_______________________________________________
Xen-tools mailing list
Xen-tools@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-tools
|