diff options
author | Peter Zijlstra <a.p.zijlstra@chello.nl> | 2012-04-17 09:49:36 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2012-05-09 09:00:55 -0400 |
commit | cb83b629bae0327cf9f44f096adc38d150ceb913 (patch) | |
tree | 13f7da07ee150a97c21aace57eaa817a30df9539 /arch/powerpc | |
parent | bd939f45da24e25e08a8f5c993c50b1afada0fef (diff) |
sched/numa: Rewrite the CONFIG_NUMA sched domain support
The current code groups up to 16 nodes in a level and then puts an
ALLNODES domain spanning the entire tree on top of that. This doesn't
reflect the numa topology and esp for the smaller not-fully-connected
machines out there today this might make a difference.
Therefore, build a proper numa topology based on node_distance().
Since there's no fixed numa layers anymore, the static SD_NODE_INIT
and SD_ALLNODES_INIT aren't usable anymore, the new code tries to
construct something similar and scales some values either on the
number of cpus in the domain and/or the node_distance() ratio.
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Anton Blanchard <anton@samba.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Chris Metcalf <cmetcalf@tilera.com>
Cc: David Howells <dhowells@redhat.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Fenghua Yu <fenghua.yu@intel.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Cc: linux-alpha@vger.kernel.org
Cc: linux-ia64@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Cc: linux-mips@linux-mips.org
Cc: linuxppc-dev@lists.ozlabs.org
Cc: linux-sh@vger.kernel.org
Cc: Matt Turner <mattst88@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Paul Mundt <lethal@linux-sh.org>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Richard Henderson <rth@twiddle.net>
Cc: sparclinux@vger.kernel.org
Cc: Tony Luck <tony.luck@intel.com>
Cc: x86@kernel.org
Cc: Dimitri Sivanich <sivanich@sgi.com>
Cc: Greg Pearson <greg.pearson@hp.com>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: bob.picco@oracle.com
Cc: chris.mason@oracle.com
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Link: http://lkml.kernel.org/n/tip-r74n3n8hhuc2ynbrnp3vt954@git.kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'arch/powerpc')
-rw-r--r-- | arch/powerpc/include/asm/topology.h | 36 |
1 files changed, 0 insertions, 36 deletions
diff --git a/arch/powerpc/include/asm/topology.h b/arch/powerpc/include/asm/topology.h index c97185885c6d..852ed1b384f6 100644 --- a/arch/powerpc/include/asm/topology.h +++ b/arch/powerpc/include/asm/topology.h | |||
@@ -18,12 +18,6 @@ struct device_node; | |||
18 | */ | 18 | */ |
19 | #define RECLAIM_DISTANCE 10 | 19 | #define RECLAIM_DISTANCE 10 |
20 | 20 | ||
21 | /* | ||
22 | * Avoid creating an extra level of balancing (SD_ALLNODES) on the largest | ||
23 | * POWER7 boxes which have a maximum of 32 nodes. | ||
24 | */ | ||
25 | #define SD_NODES_PER_DOMAIN 32 | ||
26 | |||
27 | #include <asm/mmzone.h> | 21 | #include <asm/mmzone.h> |
28 | 22 | ||
29 | static inline int cpu_to_node(int cpu) | 23 | static inline int cpu_to_node(int cpu) |
@@ -51,36 +45,6 @@ static inline int pcibus_to_node(struct pci_bus *bus) | |||
51 | cpu_all_mask : \ | 45 | cpu_all_mask : \ |
52 | cpumask_of_node(pcibus_to_node(bus))) | 46 | cpumask_of_node(pcibus_to_node(bus))) |
53 | 47 | ||
54 | /* sched_domains SD_NODE_INIT for PPC64 machines */ | ||
55 | #define SD_NODE_INIT (struct sched_domain) { \ | ||
56 | .min_interval = 8, \ | ||
57 | .max_interval = 32, \ | ||
58 | .busy_factor = 32, \ | ||
59 | .imbalance_pct = 125, \ | ||
60 | .cache_nice_tries = 1, \ | ||
61 | .busy_idx = 3, \ | ||
62 | .idle_idx = 1, \ | ||
63 | .newidle_idx = 0, \ | ||
64 | .wake_idx = 0, \ | ||
65 | .forkexec_idx = 0, \ | ||
66 | \ | ||
67 | .flags = 1*SD_LOAD_BALANCE \ | ||
68 | | 0*SD_BALANCE_NEWIDLE \ | ||
69 | | 1*SD_BALANCE_EXEC \ | ||
70 | | 1*SD_BALANCE_FORK \ | ||
71 | | 0*SD_BALANCE_WAKE \ | ||
72 | | 1*SD_WAKE_AFFINE \ | ||
73 | | 0*SD_PREFER_LOCAL \ | ||
74 | | 0*SD_SHARE_CPUPOWER \ | ||
75 | | 0*SD_POWERSAVINGS_BALANCE \ | ||
76 | | 0*SD_SHARE_PKG_RESOURCES \ | ||
77 | | 1*SD_SERIALIZE \ | ||
78 | | 0*SD_PREFER_SIBLING \ | ||
79 | , \ | ||
80 | .last_balance = jiffies, \ | ||
81 | .balance_interval = 1, \ | ||
82 | } | ||
83 | |||
84 | extern int __node_distance(int, int); | 48 | extern int __node_distance(int, int); |
85 | #define node_distance(a, b) __node_distance(a, b) | 49 | #define node_distance(a, b) __node_distance(a, b) |
86 | 50 | ||