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-changelog

[Xen-changelog] Fixed extratime scheduling bug, which caused a prioritis

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] Fixed extratime scheduling bug, which caused a prioritised dom0 to overtake the whole cpu.
From: Xen patchbot -unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Mon, 25 Jul 2005 16:26:09 -0400
Delivery-date: Mon, 25 Jul 2005 20:26:35 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User sd386@xxxxxxxxxxxxxxxxx
# Node ID 460405b4723bc65623e6fe9d61e653709a66c850
# Parent  7627476544b58da7fd4ba909f2991dfe1f2f4109

Fixed extratime scheduling bug, which caused a prioritised dom0 to overtake the 
whole cpu.
Signed-off by: Stephan.Diestelhorst@{cl.cam.ac.uk, inf.tu-dresden.de}

diff -r 7627476544b5 -r 460405b4723b xen/common/sched_sedf.c
--- a/xen/common/sched_sedf.c   Fri Jul 22 14:25:10 2005
+++ b/xen/common/sched_sedf.c   Fri Jul 22 15:32:31 2005
@@ -609,15 +609,16 @@
             inf->score[EXTRA_UTIL_Q] = (inf->period << 10) /
                 inf->slice;
         else
-            /*give a domain w/ exweight = 1 as much as a domain with
-              util = 1/128*/
+            /*conversion between realtime utilisation and extrawieght:
+              full (ie 100%) utilization is equivalent to 128 extraweight*/
             inf->score[EXTRA_UTIL_Q] = (1<<17) / inf->extraweight;
     }
  check_extra_queues:
     /* Adding a runnable domain to the right queue and removing blocked ones*/
     if (sedf_runnable(d)) {
         /*add according to score: weighted round robin*/
-        if (inf->status & (EXTRA_AWARE | EXTRA_WANT_PEN_Q))
+        if (((inf->status & EXTRA_AWARE) && (i == EXTRA_UTIL_Q)) ||
+            ((inf->status & EXTRA_WANT_PEN_Q) && (i == EXTRA_PEN_Q)))
             extraq_add_sort_update(d, i, oldscore);
     }
     else {
@@ -627,12 +628,9 @@
         /*make sure that we remove a blocked domain from the other
           extraq too*/
         if (i == EXTRA_PEN_Q) {
-            if (extraq_on(d, EXTRA_UTIL_Q))
-                extraq_del(d, EXTRA_UTIL_Q);
-        }
-        else {
-            if (extraq_on(d, EXTRA_PEN_Q))
-                extraq_del(d, EXTRA_PEN_Q);
+            if (extraq_on(d, EXTRA_UTIL_Q)) extraq_del(d, EXTRA_UTIL_Q);
+        } else {
+            if (extraq_on(d, EXTRA_PEN_Q)) extraq_del(d, EXTRA_PEN_Q);
         }
 #endif
     }
@@ -668,7 +666,8 @@
         if (!list_empty(extraq[EXTRA_UTIL_Q])) {
             /*use elements from the normal extraqueue*/
             runinf   = list_entry(extraq[EXTRA_UTIL_Q]->next,
-                                  struct sedf_vcpu_info, 
extralist[EXTRA_UTIL_Q]);
+                                  struct sedf_vcpu_info,
+                                  extralist[EXTRA_UTIL_Q]);
             runinf->status |= EXTRA_RUN_UTIL;
             ret.task = runinf->vcpu;
             ret.time = EXTRA_QUANTUM;
@@ -943,8 +942,7 @@
                 inf->status |= EXTRA_WANT_PEN_Q;
    
             /*(re-)add domain to the penalty extraq*/
-            extraq_add_sort_update(inf->vcpu,
-                                   EXTRA_PEN_Q, 0);
+            extraq_add_sort_update(inf->vcpu, EXTRA_PEN_Q, 0);
         }
     }
     /*give it a fresh slice in the next period!*/
@@ -1119,7 +1117,8 @@
     s_time_t              now = NOW();
     struct sedf_vcpu_info* inf = EDOM_INFO(d);
  
-    PRINT(3, "sedf_wake was called, domain-id %i.%i\n",d->domain->domain_id, 
d->vcpu_id);
+    PRINT(3, "sedf_wake was called, domain-id %i.%i\n",d->domain->domain_id,
+          d->vcpu_id);
  
     if (unlikely(is_idle_task(d->domain)))
         return;
@@ -1145,7 +1144,7 @@
     inf->block_tot++;
 #endif
     if (unlikely(now < PERIOD_BEGIN(inf))) {
-        PRINT(4,"extratime unblock\n");
+       PRINT(4,"extratime unblock\n");
         /* unblocking in extra-time! */
 #if (EXTRA == EXTRA_BLOCK_WEIGHT)
         if (inf->status & EXTRA_WANT_PEN_Q) {

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Fixed extratime scheduling bug, which caused a prioritised dom0 to overtake the whole cpu., Xen patchbot -unstable <=