WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-tools

[Xen-tools] [PATCH] add sched-list command to xm

To: <xen-tools@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-tools] [PATCH] add sched-list command to xm
From: "Ross C Mcilroy" <mcilrorc@xxxxxxxxxxxxx>
Date: Wed, 17 Aug 2005 14:24:54 +0100
Delivery-date: Wed, 17 Aug 2005 13:27:23 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-tools-request@lists.xensource.com?subject=help>
List-id: Xen control tools developers <xen-tools.lists.xensource.com>
List-post: <mailto:xen-tools@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-tools>, <mailto:xen-tools-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-tools>, <mailto:xen-tools-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-tools-bounces@xxxxxxxxxxxxxxxxxxx
Thread-index: AcWjLlaruw5TzMwST3WUmz7a0aHDag==
Thread-topic: [PATCH] add sched-list command to xm

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
<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-tools] [PATCH] add sched-list command to xm, Ross C Mcilroy <=