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

[Xen-devel] [Patch 2/2]xen/sched_credit2.c : Runqueue per core



This patch inserts runqueue_per_core code.
And also makes generic selection for runqueue by using boot paarmeter.

Signed-off-by: Uma Sharma <uma.sharma523@xxxxxxxxx>
---

diff --git a/xen/common/sched_credit2.c b/xen/common/sched_credit2.c
index ad0a5d4..2075e70 100644
--- a/xen/common/sched_credit2.c
+++ b/xen/common/sched_credit2.c
@@ -165,6 +165,8 @@
 
 int opt_migrate_resist=500;
 integer_param("sched_credit2_migrate_resist", opt_migrate_resist);
+static char __initdata opt_credit2_runqueue[10] = "socket";
+string_param("credit2_runqueue", opt_credit2_runqueue);
 
 /*
  * Useful macros
@@ -1921,6 +1923,7 @@ static void deactivate_runqueue(struct csched2_private 
*prv, int rqi)
 static void init_pcpu(const struct scheduler *ops, int cpu)
 {
     int rqi;
+    char rq;
     unsigned long flags;
     struct csched2_private *prv = CSCHED2_PRIV(ops);
     struct csched2_runqueue_data *rqd;
@@ -1935,15 +1938,36 @@ static void init_pcpu(const struct scheduler *ops, int 
cpu)
         return;
     }
 
+    /*Figure out which type of runqueue are to be created */
+    if (!strcmp(opt_credit2_runquque, "socket")) {
+        rq = 's';
+    } else if (!strcmp(opt_credit2_runquque, "core")) {
+        rq = 'c';
+    } else {
+        rq = 's';
+    }
+
     /* Figure out which runqueue to put it in */
     rqi = 0;
 
-    /* Figure out which runqueue to put it in */
-    /* NB: cpu 0 doesn't get a STARTING callback, so we hard-code it to 
runqueue 0. */
-    if ( cpu == 0 )
-        rqi = 0;
-    else
-        rqi = cpu_to_socket(cpu);
+    /* cpu 0 doesn't get a STARTING callback, so use boot CPU data for it */
+    if ( cpu == 0 ) {
+        switch (rq) {
+            case 's' : rqi = boot_cpu_to_socket();
+                       break;
+            case 'c' : rqi = boot_cpu_to_core();
+                       break;
+            default : rqi = boot_cpu_to_socket();
+        }
+    } else {
+        switch (rq) {
+            case 's' : rqi = cpu_to_socket(cpu);
+                       break;
+            case 'c' : rqi = cpu_to_core(cpu);
+                       break;
+            default : rqi = cpu_to_socket(cpu);
+        }
+    }
 
     if ( rqi < 0 )
     {
@@ -1988,7 +2012,7 @@ csched2_alloc_pdata(const struct scheduler *ops, int cpu)
 {
     /* Check to see if the cpu is online yet */
     /* Note: cpu 0 doesn't get a STARTING callback */
-    if ( cpu == 0 || cpu_to_socket(cpu) >= 0 )
+    if ( cpu == 0 || cpu_to_socket(cpu) >= 0 || cpu_to_core(cpu))
         init_pcpu(ops, cpu);
     else
         printk("%s: cpu %d not online yet, deferring initializatgion\n",

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

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