aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorSiddha, Suresh B <suresh.b.siddha@intel.com>2006-06-27 05:54:42 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-06-27 20:32:45 -0400
commit5c45bf279d378d436ce45825c0f136696c7b6109 (patch)
tree80e2fcf4866b84fccb787562e1a83b16f4bc8850 /include/linux
parent369381694ddcf03f1de403501c8b97099b5109ec (diff)
[PATCH] sched: mc/smt power savings sched policy
sysfs entries 'sched_mc_power_savings' and 'sched_smt_power_savings' in /sys/devices/system/cpu/ control the MC/SMT power savings policy for the scheduler. Based on the values (1-enable, 0-disable) for these controls, sched groups cpu power will be determined for different domains. When power savings policy is enabled and under light load conditions, scheduler will minimize the physical packages/cpu cores carrying the load and thus conserving power(with a perf impact based on the workload characteristics... see OLS 2005 CMP kernel scheduler paper for more details..) Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Nick Piggin <nickpiggin@yahoo.com.au> Cc: Con Kolivas <kernel@kolivas.org> Cc: "Chen, Kenneth W" <kenneth.w.chen@intel.com> Cc: "David S. Miller" <davem@davemloft.net> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/sched.h10
-rw-r--r--include/linux/topology.h3
2 files changed, 12 insertions, 1 deletions
diff --git a/include/linux/sched.h b/include/linux/sched.h
index ab8ffc54423a..0bc81a151e50 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -570,6 +570,11 @@ enum idle_type
570#define SD_WAKE_AFFINE 32 /* Wake task to waking CPU */ 570#define SD_WAKE_AFFINE 32 /* Wake task to waking CPU */
571#define SD_WAKE_BALANCE 64 /* Perform balancing at task wakeup */ 571#define SD_WAKE_BALANCE 64 /* Perform balancing at task wakeup */
572#define SD_SHARE_CPUPOWER 128 /* Domain members share cpu power */ 572#define SD_SHARE_CPUPOWER 128 /* Domain members share cpu power */
573#define SD_POWERSAVINGS_BALANCE 256 /* Balance for power savings */
574
575#define BALANCE_FOR_POWER ((sched_mc_power_savings || sched_smt_power_savings) \
576 ? SD_POWERSAVINGS_BALANCE : 0)
577
573 578
574struct sched_group { 579struct sched_group {
575 struct sched_group *next; /* Must be a circular list */ 580 struct sched_group *next; /* Must be a circular list */
@@ -1412,6 +1417,11 @@ static inline void arch_pick_mmap_layout(struct mm_struct *mm)
1412extern long sched_setaffinity(pid_t pid, cpumask_t new_mask); 1417extern long sched_setaffinity(pid_t pid, cpumask_t new_mask);
1413extern long sched_getaffinity(pid_t pid, cpumask_t *mask); 1418extern long sched_getaffinity(pid_t pid, cpumask_t *mask);
1414 1419
1420#include <linux/sysdev.h>
1421extern int sched_mc_power_savings, sched_smt_power_savings;
1422extern struct sysdev_attribute attr_sched_mc_power_savings, attr_sched_smt_power_savings;
1423extern int sched_create_sysfs_power_savings_entries(struct sysdev_class *cls);
1424
1415extern void normalize_rt_tasks(void); 1425extern void normalize_rt_tasks(void);
1416 1426
1417#ifdef CONFIG_PM 1427#ifdef CONFIG_PM
diff --git a/include/linux/topology.h b/include/linux/topology.h
index a305ae2e44b6..ec1eca85290a 100644
--- a/include/linux/topology.h
+++ b/include/linux/topology.h
@@ -134,7 +134,8 @@
134 .flags = SD_LOAD_BALANCE \ 134 .flags = SD_LOAD_BALANCE \
135 | SD_BALANCE_NEWIDLE \ 135 | SD_BALANCE_NEWIDLE \
136 | SD_BALANCE_EXEC \ 136 | SD_BALANCE_EXEC \
137 | SD_WAKE_AFFINE, \ 137 | SD_WAKE_AFFINE \
138 | BALANCE_FOR_POWER, \
138 .last_balance = jiffies, \ 139 .last_balance = jiffies, \
139 .balance_interval = 1, \ 140 .balance_interval = 1, \
140 .nr_balance_failed = 0, \ 141 .nr_balance_failed = 0, \