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] [xen-unstable] [XEN] Cleanup and improve accuracy of cre

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [XEN] Cleanup and improve accuracy of credit scheduler accounting code
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Mon, 30 Oct 2006 22:10:16 +0000
Delivery-date: Thu, 02 Nov 2006 13:34:51 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
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 Emmanuel Ackaouy <ack@xxxxxxxxxxxxx>
# Node ID b21246720fde43b11835d814e9755f1f3888f9e4
# Parent  d6802cfaf5f8abb7bec33e65425f41d2086d4b04
[XEN] Cleanup and improve accuracy of credit scheduler accounting code
Signed-off-by: Emmanuel Ackaouy <ack@xxxxxxxxxxxxx>
---
 xen/common/sched_credit.c |   60 +++++++++++++++++++++++++++-------------------
 1 files changed, 36 insertions(+), 24 deletions(-)

diff -r d6802cfaf5f8 -r b21246720fde xen/common/sched_credit.c
--- a/xen/common/sched_credit.c Mon Oct 30 14:28:29 2006 +0000
+++ b/xen/common/sched_credit.c Mon Oct 30 17:35:11 2006 +0000
@@ -36,11 +36,17 @@
 /*
  * Basic constants
  */
-#define CSCHED_TICK             10      /* milliseconds */
-#define CSCHED_TSLICE           30      /* milliseconds */
-#define CSCHED_ACCT_NTICKS      3
-#define CSCHED_ACCT_PERIOD      (CSCHED_ACCT_NTICKS * CSCHED_TICK)
-#define CSCHED_DEFAULT_WEIGHT   256
+#define CSCHED_DEFAULT_WEIGHT       256
+#define CSCHED_TICKS_PER_TSLICE     3
+#define CSCHED_TICKS_PER_ACCT       3
+#define CSCHED_MSECS_PER_TICK       10
+#define CSCHED_MSECS_PER_TSLICE     \
+    (CSCHED_MSECS_PER_TICK * CSCHED_TICKS_PER_TSLICE)
+#define CSCHED_CREDITS_PER_TICK     100
+#define CSCHED_CREDITS_PER_TSLICE   \
+    (CSCHED_CREDITS_PER_TICK * CSCHED_TICKS_PER_TSLICE)
+#define CSCHED_CREDITS_PER_ACCT     \
+    (CSCHED_CREDITS_PER_TICK * CSCHED_TICKS_PER_ACCT)
 
 
 /*
@@ -314,7 +320,7 @@ csched_pcpu_init(int cpu)
     spin_lock_irqsave(&csched_priv.lock, flags);
 
     /* Initialize/update system-wide config */
-    csched_priv.credit += CSCHED_ACCT_PERIOD;
+    csched_priv.credit += CSCHED_CREDITS_PER_ACCT;
     if ( csched_priv.ncpus <= cpu )
         csched_priv.ncpus = cpu + 1;
     if ( csched_priv.master >= csched_priv.ncpus )
@@ -439,8 +445,6 @@ __csched_vcpu_acct_idle_locked(struct cs
         list_del_init(&sdom->active_sdom_elem);
         csched_priv.weight -= sdom->weight;
     }
-
-    atomic_set(&svc->credit, 0);
 }
 
 static int
@@ -767,7 +771,7 @@ csched_acct(void)
          * for one full accounting period. We allow a domain to earn more
          * only when the system-wide credit balance is negative.
          */
-        credit_peak = sdom->active_vcpu_count * CSCHED_ACCT_PERIOD;
+        credit_peak = sdom->active_vcpu_count * CSCHED_CREDITS_PER_ACCT;
         if ( csched_priv.credit_balance < 0 )
         {
             credit_peak += ( ( -csched_priv.credit_balance * sdom->weight) +
@@ -776,7 +780,9 @@ csched_acct(void)
         }
         if ( sdom->cap != 0U )
         {
-            uint32_t credit_cap = ((sdom->cap * CSCHED_ACCT_PERIOD) + 99) / 
100;
+            uint32_t credit_cap;
+            
+            credit_cap = ((sdom->cap * CSCHED_CREDITS_PER_ACCT) + 99) / 100;
             if ( credit_cap < credit_peak )
                 credit_peak = credit_cap;
         }
@@ -839,10 +845,10 @@ csched_acct(void)
                 else
                     svc->pri = CSCHED_PRI_TS_PARKED;
 
-                if ( credit < -CSCHED_TSLICE )
+                if ( credit < -CSCHED_CREDITS_PER_TSLICE )
                 {
                     CSCHED_STAT_CRANK(acct_min_credit);
-                    credit = -CSCHED_TSLICE;
+                    credit = -CSCHED_CREDITS_PER_TSLICE;
                     atomic_set(&svc->credit, credit);
                 }
             }
@@ -850,8 +856,12 @@ csched_acct(void)
             {
                 svc->pri = CSCHED_PRI_TS_UNDER;
 
-                if ( credit > CSCHED_TSLICE )
+                if ( credit > CSCHED_CREDITS_PER_TSLICE )
+                {
                     __csched_vcpu_acct_idle_locked(svc);
+                    credit = 0;
+                    atomic_set(&svc->credit, credit);
+                }
             }
 
             svc->credit_last = credit;
@@ -881,7 +891,7 @@ csched_tick(unsigned int cpu)
      */
     if ( likely(sdom != NULL) )
     {
-        csched_vcpu_acct(svc, CSCHED_TICK);
+        csched_vcpu_acct(svc, CSCHED_CREDITS_PER_TICK);
     }
 
     /*
@@ -891,7 +901,7 @@ csched_tick(unsigned int cpu)
      * we could distribute or at the very least cycle the duty.
      */
     if ( (csched_priv.master == cpu) &&
-         (per_cpu(schedule_data, cpu).tick % CSCHED_ACCT_NTICKS) == 0 )
+         (per_cpu(schedule_data, cpu).tick % CSCHED_TICKS_PER_ACCT) == 0 )
     {
         csched_acct();
     }
@@ -1069,7 +1079,7 @@ csched_schedule(s_time_t now)
     /*
      * Return task to run next...
      */
-    ret.time = MILLISECS(CSCHED_TSLICE);
+    ret.time = MILLISECS(CSCHED_MSECS_PER_TSLICE);
     ret.task = snext->vcpu;
 
     CSCHED_VCPU_CHECK(ret.task);
@@ -1150,20 +1160,22 @@ csched_dump(void)
            "\tcredit balance     = %d\n"
            "\tweight             = %u\n"
            "\trunq_sort          = %u\n"
-           "\ttick               = %dms\n"
-           "\ttslice             = %dms\n"
-           "\taccounting period  = %dms\n"
-           "\tdefault-weight     = %d\n",
+           "\tdefault-weight     = %d\n"
+           "\tmsecs per tick     = %dms\n"
+           "\tcredits per tick   = %d\n"
+           "\tticks per tslice   = %d\n"
+           "\tticks per acct     = %d\n",
            csched_priv.ncpus,
            csched_priv.master,
            csched_priv.credit,
            csched_priv.credit_balance,
            csched_priv.weight,
            csched_priv.runq_sort,
-           CSCHED_TICK,
-           CSCHED_TSLICE,
-           CSCHED_ACCT_PERIOD,
-           CSCHED_DEFAULT_WEIGHT);
+           CSCHED_DEFAULT_WEIGHT,
+           CSCHED_MSECS_PER_TICK,
+           CSCHED_CREDITS_PER_TICK,
+           CSCHED_TICKS_PER_TSLICE,
+           CSCHED_TICKS_PER_ACCT);
 
     printk("idlers: 0x%lx\n", csched_priv.idlers.bits[0]);
 

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] [XEN] Cleanup and improve accuracy of credit scheduler accounting code, Xen patchbot-unstable <=