Blame view

include/linux/topology.h 5.67 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
  /*
   * include/linux/topology.h
   *
   * Written by: Matthew Dobson, IBM Corporation
   *
   * Copyright (C) 2002, IBM Corp.
   *
   * All rights reserved.          
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as published by
   * the Free Software Foundation; either version 2 of the License, or
   * (at your option) any later version.
   *
   * This program is distributed in the hope that it will be useful, but
   * WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
   * NON INFRINGEMENT.  See the GNU General Public License for more
   * details.
   *
   * You should have received a copy of the GNU General Public License
   * along with this program; if not, write to the Free Software
   * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
   *
   * Send feedback to <colpatch@us.ibm.com>
   */
  #ifndef _LINUX_TOPOLOGY_H
  #define _LINUX_TOPOLOGY_H
  
  #include <linux/cpumask.h>
  #include <linux/bitops.h>
  #include <linux/mmzone.h>
  #include <linux/smp.h>
  #include <asm/topology.h>
  
  #ifndef node_has_online_mem
  #define node_has_online_mem(nid) (1)
  #endif
  
  #ifndef nr_cpus_node
  #define nr_cpus_node(node)							\
  	({									\
  		cpumask_t __tmp__;						\
  		__tmp__ = node_to_cpumask(node);				\
  		cpus_weight(__tmp__);						\
  	})
  #endif
  
  #define for_each_node_with_cpus(node)						\
  	for_each_online_node(node)						\
  		if (nr_cpus_node(node))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
52
53
54
  /* Conform to ACPI 2.0 SLIT distance definitions */
  #define LOCAL_DISTANCE		10
  #define REMOTE_DISTANCE		20
f787a5030   Ingo Molnar   [PATCH] sched: sm...
55
  #ifndef node_distance
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
56
57
  #define node_distance(from,to)	((from) == (to) ? LOCAL_DISTANCE : REMOTE_DISTANCE)
  #endif
9eeff2395   Christoph Lameter   [PATCH] Zone recl...
58
59
60
61
62
63
64
65
  #ifndef RECLAIM_DISTANCE
  /*
   * If the distance between nodes in a system is larger than RECLAIM_DISTANCE
   * (in whatever arch specific measurement units returned by node_distance())
   * then switch on zone reclaim on boot.
   */
  #define RECLAIM_DISTANCE 20
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
  #ifndef PENALTY_FOR_NODE_WITH_CPUS
  #define PENALTY_FOR_NODE_WITH_CPUS	(1)
  #endif
  
  /*
   * Below are the 3 major initializers used in building sched_domains:
   * SD_SIBLING_INIT, for SMT domains
   * SD_CPU_INIT, for SMP domains
   * SD_NODE_INIT, for NUMA domains
   *
   * Any architecture that cares to do any tuning to these values should do so
   * by defining their own arch-specific initializer in include/asm/topology.h.
   * A definition there will automagically override these default initializers
   * and allow arch-specific performance tuning of sched_domains.
   */
  #ifdef CONFIG_SCHED_SMT
  /* MCD - Do we really need this?  It is always on if CONFIG_SCHED_SMT is,
   * so can't we drop this in favor of CONFIG_SCHED_SMT?
   */
  #define ARCH_HAS_SCHED_WAKE_IDLE
  /* Common values for SMT siblings */
  #ifndef SD_SIBLING_INIT
  #define SD_SIBLING_INIT (struct sched_domain) {		\
  	.span			= CPU_MASK_NONE,	\
  	.parent			= NULL,			\
1a8488708   Siddha, Suresh B   [PATCH] sched: in...
91
  	.child			= NULL,			\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
92
93
94
  	.groups			= NULL,			\
  	.min_interval		= 1,			\
  	.max_interval		= 2,			\
ac7d55049   Siddha, Suresh B   [PATCH] sched dom...
95
  	.busy_factor		= 64,			\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
96
  	.imbalance_pct		= 110,			\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
97
  	.cache_nice_tries	= 0,			\
7897986ba   Nick Piggin   [PATCH] sched: ba...
98
99
  	.busy_idx		= 0,			\
  	.idle_idx		= 0,			\
9c4801ceb   Ingo Molnar   sched: more agres...
100
  	.newidle_idx		= 0,			\
7897986ba   Nick Piggin   [PATCH] sched: ba...
101
  	.wake_idx		= 0,			\
147cbb4bb   Nick Piggin   [PATCH] sched: ba...
102
  	.forkexec_idx		= 0,			\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
103
104
105
106
107
108
109
110
111
112
113
114
  	.flags			= SD_LOAD_BALANCE	\
  				| SD_BALANCE_NEWIDLE	\
  				| SD_BALANCE_EXEC	\
  				| SD_WAKE_AFFINE	\
  				| SD_WAKE_IDLE		\
  				| SD_SHARE_CPUPOWER,	\
  	.last_balance		= jiffies,		\
  	.balance_interval	= 1,			\
  	.nr_balance_failed	= 0,			\
  }
  #endif
  #endif /* CONFIG_SCHED_SMT */
89c4710ee   Siddha, Suresh B   [PATCH] sched: cl...
115
116
117
118
119
120
121
122
123
124
125
126
127
  #ifdef CONFIG_SCHED_MC
  /* Common values for MC siblings. for now mostly derived from SD_CPU_INIT */
  #ifndef SD_MC_INIT
  #define SD_MC_INIT (struct sched_domain) {		\
  	.span			= CPU_MASK_NONE,	\
  	.parent			= NULL,			\
  	.child			= NULL,			\
  	.groups			= NULL,			\
  	.min_interval		= 1,			\
  	.max_interval		= 4,			\
  	.busy_factor		= 64,			\
  	.imbalance_pct		= 125,			\
  	.cache_nice_tries	= 1,			\
89c4710ee   Siddha, Suresh B   [PATCH] sched: cl...
128
  	.busy_idx		= 2,			\
9c4801ceb   Ingo Molnar   sched: more agres...
129
130
  	.idle_idx		= 0,			\
  	.newidle_idx		= 0,			\
89c4710ee   Siddha, Suresh B   [PATCH] sched: cl...
131
132
133
134
135
136
  	.wake_idx		= 1,			\
  	.forkexec_idx		= 1,			\
  	.flags			= SD_LOAD_BALANCE	\
  				| SD_BALANCE_NEWIDLE	\
  				| SD_BALANCE_EXEC	\
  				| SD_WAKE_AFFINE	\
9c4801ceb   Ingo Molnar   sched: more agres...
137
  				| SD_WAKE_IDLE		\
89c4710ee   Siddha, Suresh B   [PATCH] sched: cl...
138
139
140
141
142
143
144
145
  				| SD_SHARE_PKG_RESOURCES\
  				| BALANCE_FOR_MC_POWER,	\
  	.last_balance		= jiffies,		\
  	.balance_interval	= 1,			\
  	.nr_balance_failed	= 0,			\
  }
  #endif
  #endif /* CONFIG_SCHED_MC */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
146
147
148
149
150
  /* Common values for CPUs */
  #ifndef SD_CPU_INIT
  #define SD_CPU_INIT (struct sched_domain) {		\
  	.span			= CPU_MASK_NONE,	\
  	.parent			= NULL,			\
1a8488708   Siddha, Suresh B   [PATCH] sched: in...
151
  	.child			= NULL,			\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
152
153
154
155
156
  	.groups			= NULL,			\
  	.min_interval		= 1,			\
  	.max_interval		= 4,			\
  	.busy_factor		= 64,			\
  	.imbalance_pct		= 125,			\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
157
  	.cache_nice_tries	= 1,			\
7897986ba   Nick Piggin   [PATCH] sched: ba...
158
  	.busy_idx		= 2,			\
9c4801ceb   Ingo Molnar   sched: more agres...
159
160
  	.idle_idx		= 0,			\
  	.newidle_idx		= 0,			\
7897986ba   Nick Piggin   [PATCH] sched: ba...
161
  	.wake_idx		= 1,			\
687f1661d   Nick Piggin   [PATCH] sched: sc...
162
  	.forkexec_idx		= 1,			\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
163
164
165
  	.flags			= SD_LOAD_BALANCE	\
  				| SD_BALANCE_NEWIDLE	\
  				| SD_BALANCE_EXEC	\
5c45bf279   Siddha, Suresh B   [PATCH] sched: mc...
166
  				| SD_WAKE_AFFINE	\
9c4801ceb   Ingo Molnar   sched: more agres...
167
  				| SD_WAKE_IDLE		\
89c4710ee   Siddha, Suresh B   [PATCH] sched: cl...
168
  				| BALANCE_FOR_PKG_POWER,\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
169
170
171
172
173
  	.last_balance		= jiffies,		\
  	.balance_interval	= 1,			\
  	.nr_balance_failed	= 0,			\
  }
  #endif
9c1cfda20   John Hawkes   [PATCH] cpusets: ...
174
175
176
177
  /* sched_domains SD_ALLNODES_INIT for NUMA machines */
  #define SD_ALLNODES_INIT (struct sched_domain) {	\
  	.span			= CPU_MASK_NONE,	\
  	.parent			= NULL,			\
1a8488708   Siddha, Suresh B   [PATCH] sched: in...
178
  	.child			= NULL,			\
9c1cfda20   John Hawkes   [PATCH] cpusets: ...
179
180
181
182
183
184
185
186
187
188
189
190
  	.groups			= NULL,			\
  	.min_interval		= 64,			\
  	.max_interval		= 64*num_online_cpus(),	\
  	.busy_factor		= 128,			\
  	.imbalance_pct		= 133,			\
  	.cache_hot_time		= (10*1000000),		\
  	.cache_nice_tries	= 1,			\
  	.busy_idx		= 3,			\
  	.idle_idx		= 3,			\
  	.newidle_idx		= 0, /* unused */	\
  	.wake_idx		= 0, /* unused */	\
  	.forkexec_idx		= 0, /* unused */	\
08c183f31   Christoph Lameter   [PATCH] sched: ad...
191
192
  	.flags			= SD_LOAD_BALANCE	\
  				| SD_SERIALIZE,	\
9c1cfda20   John Hawkes   [PATCH] cpusets: ...
193
194
195
196
  	.last_balance		= jiffies,		\
  	.balance_interval	= 64,			\
  	.nr_balance_failed	= 0,			\
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
197
198
199
200
201
202
203
  #ifdef CONFIG_NUMA
  #ifndef SD_NODE_INIT
  #error Please define an appropriate SD_NODE_INIT in include/asm/topology.h!!!
  #endif
  #endif /* CONFIG_NUMA */
  
  #endif /* _LINUX_TOPOLOGY_H */