sched: When disabling SMT, turn off the odd cores
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 13 Dec 2017 18:02:28 +0000 (13:02 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 13 Dec 2017 20:22:08 +0000 (15:22 -0500)
Previously, we were turning off the even cores, but that gave out core 1,
which was hyperthreaded with core 0.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/src/corealloc_fcfs.c
kern/src/corealloc_packed.c

index af4ab7c..d250af9 100644 (file)
@@ -25,18 +25,16 @@ void corealloc_init(void)
        /* init the idlecore list.  if they turned off hyperthreading, give them the
         * odds from 1..max-1.  otherwise, give them everything by 0 (default mgmt
         * core).  TODO: (CG/LL) better LL/CG mgmt */
        /* init the idlecore list.  if they turned off hyperthreading, give them the
         * odds from 1..max-1.  otherwise, give them everything by 0 (default mgmt
         * core).  TODO: (CG/LL) better LL/CG mgmt */
-#ifndef CONFIG_DISABLE_SMT
-       for (int i = 0; i < num_cores; i++)
-               if (!is_ll_core(i))
-                       TAILQ_INSERT_TAIL(&idlecores, pcoreid2spc(i), alloc_next);
-#else
-       assert(!(num_cores % 2));
-       /* TODO: rethink starting at 1 here. If SMT is really disabled, the entire
-        * core of an "ll" core shouldn't be available. */
-       for (int i = 1; i < num_cores; i += 2)
-               if (!is_ll_core(i))
-                       TAILQ_INSERT_TAIL(&idlecores, pcoreid2spc(i), alloc_next);
+       for (int i = 0; i < num_cores; i++) {
+               if (is_ll_core(i))
+                       continue;
+#ifdef CONFIG_DISABLE_SMT
+               /* Remove all odd cores from consideration for allocation. */
+               if (i % 2 == 1)
+                       continue;
 #endif /* CONFIG_DISABLE_SMT */
 #endif /* CONFIG_DISABLE_SMT */
+               TAILQ_INSERT_TAIL(&idlecores, pcoreid2spc(i), alloc_next);
+       }
 }
 
 /* Initialize any data associated with allocating cores to a process. */
 }
 
 /* Initialize any data associated with allocating cores to a process. */
index 32b2e95..bd1957d 100644 (file)
@@ -190,8 +190,8 @@ void corealloc_init(void)
                        continue;
                }
 #ifdef CONFIG_DISABLE_SMT
                        continue;
                }
 #ifdef CONFIG_DISABLE_SMT
-               /* Remove all even cores from consideration for allocation. */
-               if (i % 2 == 0) {
+               /* Remove all odd cores from consideration for allocation. */
+               if (i % 2 == 1) {
                        incref_nodes(all_pcores[i].sched_pnode);
                        continue;
                }
                        incref_nodes(all_pcores[i].sched_pnode);
                        continue;
                }