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

[Xen-changelog] Manual merge.



ChangeSet 1.1460, 2005/05/09 18:37:25+01:00, kaf24@xxxxxxxxxxxxxxxxxxxx

        Manual merge.



 tools/libxc/Makefile                |    1 
 tools/libxc/xc.h                    |    8 ++++
 tools/python/xen/lowlevel/xc/xc.c   |   70 ++++++++++++++++++++++++++++++++++++
 tools/python/xen/xend/XendDomain.py |   18 +++++++++
 xen/common/schedule.c               |   56 +++++++++++++++-------------
 5 files changed, 128 insertions(+), 25 deletions(-)


diff -Nru a/tools/libxc/Makefile b/tools/libxc/Makefile
--- a/tools/libxc/Makefile      2005-05-09 14:08:46 -04:00
+++ b/tools/libxc/Makefile      2005-05-09 14:08:46 -04:00
@@ -16,6 +16,7 @@
 INCLUDES += -I $(XEN_LIBXUTIL)
 
 SRCS     :=
+SRCS     += xc_sedf.c
 SRCS     += xc_bvtsched.c
 SRCS     += xc_core.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:08:46 -04:00
+++ b/tools/libxc/xc.h  2005-05-09 14:08:46 -04:00
@@ -296,6 +296,14 @@
                            long long *warpl,
                            long long *warpu);
 
+int xc_sedf_domain_set(int xc_handle,
+                          u32 domid,
+                          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 *latency, u16 
*extratime, u16* weight);
+
 typedef evtchn_status_t xc_evtchn_status_t;
 
 /*
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:08:46 -04:00
+++ b/tools/python/xen/lowlevel/xc/xc.c 2005-05-09 14:08:46 -04:00
@@ -827,6 +827,52 @@
                          "cpu_khz",     info.cpu_khz);
 }
 
+static PyObject *pyxc_sedf_domain_set(PyObject *self,
+                                         PyObject *args,
+                                         PyObject *kwds)
+{
+    XcObject *xc = (XcObject *)self;
+    u32 domid;
+    u64 period, slice, latency;
+    u16 extratime, weight;
+    static char *kwd_list[] = { "dom", "period", "slice", "latency", 
"extratime", "weight",NULL };
+    
+    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, latency, 
extratime,weight) != 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,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,&latency,&extratime,&weight) )
+        return PyErr_SetFromErrno(xc_error);
+
+    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,
                                      PyObject *args,
                                      PyObject *kwds)
@@ -1027,6 +1073,30 @@
       " warpu  [long]: Unwarp requirement.\n"
       " warpl  [long]: Warp limit,\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"
+      " 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",
+      (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"
+      " 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/XendDomain.py 
b/tools/python/xen/xend/XendDomain.py
--- a/tools/python/xen/xend/XendDomain.py       2005-05-09 14:08:46 -04:00
+++ b/tools/python/xen/xend/XendDomain.py       2005-05-09 14:08:46 -04:00
@@ -644,6 +644,24 @@
         except Exception, ex:
             raise XendError(str(ex))
     
+    
+    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)
+        try:
+            return xc.sedf_domain_set(dominfo.dom, period, slice, latency, 
extratime, weight)
+        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/xen/common/schedule.c b/xen/common/schedule.c
--- a/xen/common/schedule.c     2005-05-09 14:08:46 -04:00
+++ b/xen/common/schedule.c     2005-05-09 14:08:46 -04:00
@@ -106,24 +106,27 @@
 
     d->exec_domain[vcpu] = ed;
     ed->domain = d;
-    ed->eid = vcpu;
+    ed->id = vcpu;
 
     if ( SCHED_OP(alloc_task, ed) < 0 )
         goto out;
 
-    if (vcpu != 0) {
-        ed->vcpu_info = &d->shared_info->vcpu_data[ed->eid];
+    if ( vcpu != 0 )
+    {
+        ed->vcpu_info = &d->shared_info->vcpu_data[ed->id];
 
-        for_each_exec_domain(d, edc) {
-            if (edc->ed_next_list == NULL || edc->ed_next_list->eid > vcpu)
+        for_each_exec_domain( d, edc )
+        {
+            if ( (edc->next_in_list == NULL) ||
+                 (edc->next_in_list->id > vcpu) )
                 break;
         }
-        ed->ed_next_list = edc->ed_next_list;
-        edc->ed_next_list = ed;
+        ed->next_in_list  = edc->next_in_list;
+        edc->next_in_list = ed;
 
-        if (test_bit(EDF_CPUPINNED, &edc->ed_flags)) {
+        if (test_bit(EDF_CPUPINNED, &edc->flags)) {
             ed->processor = (edc->processor + 1) % smp_num_cpus;
-            set_bit(EDF_CPUPINNED, &ed->ed_flags);
+            set_bit(EDF_CPUPINNED, &ed->flags);
         } else {
             ed->processor = (edc->processor + 1) % smp_num_cpus;  /* XXX */
         }
@@ -165,7 +168,7 @@
     struct domain *d = ed->domain;
 
     /* Must be unpaused by control software to start execution. */
-    set_bit(EDF_CTRLPAUSE, &ed->ed_flags);
+    set_bit(EDF_CTRLPAUSE, &ed->flags);
 
     if ( d->id != IDLE_DOMAIN_ID )
     {
@@ -181,14 +184,14 @@
     }
 
     SCHED_OP(add_task, ed);
-    TRACE_2D(TRC_SCHED_DOM_ADD, d->id, ed->eid);
+    TRACE_2D(TRC_SCHED_DOM_ADD, d->id, ed->id);
 }
 
 void sched_rem_domain(struct exec_domain *ed) 
 {
     rem_ac_timer(&ed->timer);
     SCHED_OP(rem_task, ed);
-    TRACE_2D(TRC_SCHED_DOM_REM, ed->domain->id, ed->eid);
+    TRACE_2D(TRC_SCHED_DOM_REM, ed->domain->id, ed->id);
 }
 
 void init_idle_task(void)
@@ -206,10 +209,10 @@
         SCHED_OP(sleep, ed);
     spin_unlock_irqrestore(&schedule_data[ed->processor].schedule_lock, flags);
 
-    TRACE_2D(TRC_SCHED_SLEEP, ed->domain->id, ed->eid);
+    TRACE_2D(TRC_SCHED_SLEEP, ed->domain->id, ed->id);
  
     /* Synchronous. */
-    while ( test_bit(EDF_RUNNING, &ed->ed_flags) && !domain_runnable(ed) )
+    while ( test_bit(EDF_RUNNING, &ed->flags) && !domain_runnable(ed) )
         cpu_relax();
 }
 
@@ -225,10 +228,10 @@
         ed->wokenup = NOW();
 #endif
     }
-    clear_bit(EDF_MIGRATED, &ed->ed_flags);
+    clear_bit(EDF_MIGRATED, &ed->flags);
     spin_unlock_irqrestore(&schedule_data[ed->processor].schedule_lock, flags);
 
-    TRACE_2D(TRC_SCHED_WAKE, ed->domain->id, ed->eid);
+    TRACE_2D(TRC_SCHED_WAKE, ed->domain->id, ed->id);
 }
 
 /* Block the currently-executing domain until a pertinent event occurs. */
@@ -241,14 +244,16 @@
 #endif
 
     ed->vcpu_info->evtchn_upcall_mask = 0;
-    set_bit(EDF_BLOCKED, &ed->ed_flags);
+    set_bit(EDF_BLOCKED, &ed->flags);
 
     /* Check for events /after/ blocking: avoids wakeup waiting race. */
     if ( event_pending(ed) )
-        clear_bit(EDF_BLOCKED, &ed->ed_flags);
+    {
+        clear_bit(EDF_BLOCKED, &ed->flags);
+    }
     else

_______________________________________________
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®.