[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] Enhanced SEDF scheduler



ChangeSet 1.1159.170.102, 2005/01/28 11:51:45+00:00, sd386@xxxxxxxxxxxxxxxxx

        Enhanced SEDF scheduler



 tools/libxc/xc.h                          |    4 
 tools/libxc/xc_sedf.c                     |   18 -
 tools/python/xen/lowlevel/xc/xc.c         |   50 +--
 tools/python/xen/xend/XendClient.py       |   11 
 tools/python/xen/xend/XendDomain.py       |    8 
 tools/python/xen/xend/server/SrvDomain.py |    5 
 tools/python/xen/xm/main.py               |   10 
 xen/common/sched_sedf.c                   |  494 +++++++++++++++++++++++-------
 xen/include/public/sched_ctl.h            |    5 
 9 files changed, 446 insertions(+), 159 deletions(-)


diff -Nru a/tools/libxc/xc.h b/tools/libxc/xc.h
--- a/tools/libxc/xc.h  2005-05-09 14:04:00 -04:00
+++ b/tools/libxc/xc.h  2005-05-09 14:04:00 -04:00
@@ -243,11 +243,11 @@
 
 int xc_sedf_domain_set(int xc_handle,
                           u32 domid,
-                          u64 period, u64 slice);
+                          u64 period, u64 slice, u64 latency, u16 extratime, 
u16 weight);
 
 int xc_sedf_domain_get(int xc_handle,
                           u32 domid,
-                          u64* period, u64 *slice);
+                          u64* period, u64 *slice, u64 *latency, u16 
*extratime, u16* weight);
 
 typedef evtchn_status_t xc_evtchn_status_t;
 
diff -Nru a/tools/libxc/xc_sedf.c b/tools/libxc/xc_sedf.c
--- a/tools/libxc/xc_sedf.c     2005-05-09 14:04:00 -04:00
+++ b/tools/libxc/xc_sedf.c     2005-05-09 14:04:00 -04:00
@@ -11,7 +11,7 @@
 #include "xc_private.h"
 
 int xc_sedf_domain_set(int xc_handle,
-                          u32 domid, u64 period, u64 slice)
+                          u32 domid, u64 period, u64 slice,u64 latency, u16 
extratime,u16 weight)
 {
     dom0_op_t op;
     struct sedf_adjdom *p = &op.u.adjustdom.u.sedf;
@@ -21,12 +21,15 @@
     op.u.adjustdom.sched_id = SCHED_SEDF;
     op.u.adjustdom.direction = SCHED_INFO_PUT;
 
-    p->period   = period;
-    p->slice    = slice;
+    p->period    = period;
+    p->slice     = slice;
+    p->latency   = latency;
+    p->extratime = extratime;
+    p->weight    = weight;
     return do_dom0_op(xc_handle, &op);
 }
 
-int xc_sedf_domain_get(int xc_handle, u32 domid, u64 *period, u64 *slice)
+int xc_sedf_domain_get(int xc_handle, u32 domid, u64 *period, u64 *slice, u64* 
latency, u16* extratime, u16* weight)
 {
     dom0_op_t op;
     int ret;
@@ -39,7 +42,10 @@
 
     ret = do_dom0_op(xc_handle, &op);
 
-    *period   = p->period;
-    *slice    = p->slice;
+    *period    = p->period;
+    *slice     = p->slice;
+    *latency   = p->latency;
+    *extratime = p->extratime;
+    *weight    = p->weight;
     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:04:00 -04:00
+++ b/tools/python/xen/lowlevel/xc/xc.c 2005-05-09 14:04:00 -04:00
@@ -791,15 +791,14 @@
 {
     XcObject *xc = (XcObject *)self;
     u32 domid;
-    u64 period, slice;
+    u64 period, slice, latency;
+    u16 extratime, weight;
+    static char *kwd_list[] = { "dom", "period", "slice", "latency", 
"extratime", "weight",NULL };
     
-    static char *kwd_list[] = { "dom", "period", "slice", NULL };
-    
-    if( !PyArg_ParseTupleAndKeywords(args, kwds, "iLL", kwd_list, &domid,
-                                     &period, &slice) )
+    if( !PyArg_ParseTupleAndKeywords(args, kwds, "iLLLhh", kwd_list, &domid,
+                                     &period, &slice, &latency, &extratime, 
&weight) )
         return NULL;
-   
-    if ( xc_sedf_domain_set(xc->xc_handle, domid, period, slice) != 0 )
+   if ( xc_sedf_domain_set(xc->xc_handle, domid, period, slice, latency, 
extratime,weight) != 0 )
         return PyErr_SetFromErrno(xc_error);
 
     Py_INCREF(zero);
@@ -812,21 +811,24 @@
 {
     XcObject *xc = (XcObject *)self;
     u32 domid;
-    u64 period, slice;
-        
+    u64 period, slice,latency;
+    u16 weight, extratime;
+    
     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) )
+                                &slice,&latency,&extratime,&weight) )
         return PyErr_SetFromErrno(xc_error);
 
-    return Py_BuildValue("{s:i,s:L,s:L}",
-                         "domain",  domid,
-                         "period",  period,
-                         "slice",   slice);
+    return Py_BuildValue("{s:i,s:L,s:L,s:L,s:i}",
+                         "domain",    domid,
+                         "period",    period,
+                         "slice",     slice,
+                        "latency",   latency,
+                        "extratime", extratime);
 }
 
 static PyObject *pyxc_shadow_control(PyObject *self,
@@ -1068,9 +1070,11 @@
       (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"
+      " dom       [int]:  domain to set\n"
+      " period    [long]: domain's scheduling period\n"
+      " slice     [long]: domain's slice per period\n"
+      " latency   [long]: domain's wakeup latency hint\n"
+      " extratime [int]:  domain aware of extratime?\n"
       "Returns: [int] 0 on success; -1 on error.\n" },
 
     { "sedf_domain_get",
@@ -1078,11 +1082,13 @@
       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"},
+      " 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"
+      " latency   [long]: domain's wakeup latency hint\n"
+      " extratime [int]:  domain aware of extratime?\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:04:00 -04:00
+++ b/tools/python/xen/xend/XendClient.py       2005-05-09 14:04:00 -04:00
@@ -273,11 +273,14 @@
                               'latency' : latency,
                               'xtratime': xtratime })
 
-    def xend_domain_cpu_sedf_set(self, id, period, slice):
+    def xend_domain_cpu_sedf_set(self, id, period, slice, latency, extratime, 
weight):
         return self.xendPost(self.domainurl(id),
-                             {'op'      : 'cpu_sedf_set',
-                              'period'  : period,
-                              'slice'   : slice })
+                             {'op'        : 'cpu_sedf_set',
+                              'period'    : period,
+                              'slice'     : slice,
+                             'latency'   : latency,
+                             'extratime' : extratime,
+                             'weight'    : weight })
 
     def xend_domain_maxmem_set(self, id, memory):
         return self.xendPost(self.domainurl(id),
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:04:00 -04:00
+++ b/tools/python/xen/xend/XendDomain.py       2005-05-09 14:04:00 -04:00
@@ -660,12 +660,12 @@
         except Exception, ex:
             raise XendError(str(ex))
     
-    def domain_cpu_sedf_set(self, id, period, slice):
-        """Set Atropos scheduler parameters for a domain.
+    def domain_cpu_sedf_set(self, id, period, slice, latency, extratime, 
weight):
+        """Set Simple EDF scheduler parameters for a domain.
         """
-        dominfo = self.domain_lookup(id)
+       dominfo = self.domain_lookup(id)
         try:
-            return xc.sedf_domain_set(dominfo.dom, period, slice)
+            return xc.sedf_domain_set(dominfo.dom, period, slice, latency, 
extratime, weight)
         except Exception, ex:
             raise XendError(str(ex))
 
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:04:00 -04:00
+++ b/tools/python/xen/xend/server/SrvDomain.py 2005-05-09 14:04:00 -04:00
@@ -138,7 +138,10 @@
         fn = FormFn(self.xd.domain_cpu_sedf_set,
                     [['dom', 'str'],
                      ['period', 'int'],
-                     ['slice', 'int']])
+                     ['slice', 'int'],
+                    ['latency', 'int'],
+                    ['extratime', 'int'],
+                    ['weight', 'int']])
         val = fn(req.args, {'dom': self.dom.id})
         return val
 
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:04:00 -04:00
+++ b/tools/python/xen/xm/main.py       2005-05-09 14:04:00 -04:00
@@ -606,14 +606,14 @@
     info = """Set simple EDF parameters."""
 
     def help(self, args):
-        print args[0], "DOM PERIOD SLICE"
+        print args[0], "DOM PERIOD SLICE LATENCY EXTRATIME WEIGHT"
         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)
+       if len(args) != 7: self.err("%s: Invalid argument(s)" % args[0])
+       dom = args[1]
+       v = map(int, args[2:7])
+       server.xend_domain_cpu_sedf_set(dom, *v)
 
 xm.prog(ProgSedf)
 
diff -Nru a/xen/common/sched_sedf.c b/xen/common/sched_sedf.c
--- a/xen/common/sched_sedf.c   2005-05-09 14:04:00 -04:00
+++ b/xen/common/sched_sedf.c   2005-05-09 14:04:00 -04:00
@@ -13,7 +13,7 @@
 #include <xen/time.h>
 #include <xen/slab.h>
 
-#define SEDFLEVEL 0
+#define SEDFLEVEL 2
 #define PRINT(_f, _a...)  \
 if ((_f)<=SEDFLEVEL) printk(_a );
 
@@ -26,50 +26,104 @@
 
 
 #define TRC_SEDF 0xBEEF0000
+#define EXTRA_NONE (0)
+#define EXTRA_AWARE (1)

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.