scheduler fixes
Linus,
Please pull the latest sched-urgent-for-linus git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.git sched-urgent-for-linus
Thanks,
Ingo
------------------>
Peter Zijlstra (3):
sched: Break out cpu_power from the sched_group structure
sched: Allow for overlapping sched_domain spans
sched: Avoid creating superfluous NUMA domains on non-NUMA systems
include/linux/sched.h | 14 +++- kernel/sched.c | 189 ++++++++++++++++++++++++++++++++++++++--------- kernel/sched_fair.c | 46 ++++++------ kernel/sched_features.h | 2 + 4 files changed, 190 insertions(+), 61 deletions(-)
include/linux/sched.h +10 -4
@@ -844,6 +844,7 @@ enum cpu_idle_type {#define SD_SERIALIZE 0x0400/* Only a single load balancing instance */ #define SD_ASYM_PACKING 0x0800/* Place busy groups earlier in the domain */ #define SD_PREFER_SIBLING 0x1000/* Prefer to place tasks in a sibling domain */ +#define SD_OVERLAP 0x2000/* sched_domains of this level overlap */ enum powersavings_balance_level {POWERSAVINGS_BALANCE_NONE =0 ,/* No power saving load balance */
@@ -893,16 +894,21 @@ static inline int sd_power_saving_flags(void)return 0 ; } -struct sched_group { -struct sched_group *next;/* Must be a circular list */ +struct sched_group_power {atomic_t ref; -/* * CPU power of this group, SCHED_LOAD_SCALE being max power for a * single CPU. */ -unsigned int cpu_power, cpu_power_orig; +unsigned int power, power_orig; +}; + +struct sched_group { +struct sched_group *next;/* Must be a circular list */ +atomic_t ref; +unsigned int group_weight; +struct sched_group_power *sgp;/* * The CPUs this group covers.
kernel/sched.c +155 -34
327 lines not on this page · raw message
kernel/sched_fair.c +23 -23
140 lines not on this page · raw message
kernel/sched_features.h +2 -0
@@ -70,3 +70,5 @@ SCHED_FEAT(NONIRQ_POWER, 1)* using the scheduler IPI. Reduces rq->lock contention/bounces. */ SCHED_FEAT(TTWU_QUEUE, 1) + +SCHED_FEAT (FORCE_SD_OVERLAP ,0 )