Blame view
include/linux/topology.h
5.67 KB
1da177e4c
|
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
|
52 53 54 |
/* Conform to ACPI 2.0 SLIT distance definitions */ #define LOCAL_DISTANCE 10 #define REMOTE_DISTANCE 20 |
f787a5030
|
55 |
#ifndef node_distance |
1da177e4c
|
56 57 |
#define node_distance(from,to) ((from) == (to) ? LOCAL_DISTANCE : REMOTE_DISTANCE) #endif |
9eeff2395
|
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
|
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
|
91 |
.child = NULL, \ |
1da177e4c
|
92 93 94 |
.groups = NULL, \ .min_interval = 1, \ .max_interval = 2, \ |
ac7d55049
|
95 |
.busy_factor = 64, \ |
1da177e4c
|
96 |
.imbalance_pct = 110, \ |
1da177e4c
|
97 |
.cache_nice_tries = 0, \ |
7897986ba
|
98 99 |
.busy_idx = 0, \ .idle_idx = 0, \ |
9c4801ceb
|
100 |
.newidle_idx = 0, \ |
7897986ba
|
101 |
.wake_idx = 0, \ |
147cbb4bb
|
102 |
.forkexec_idx = 0, \ |
1da177e4c
|
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
|
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
|
128 |
.busy_idx = 2, \ |
9c4801ceb
|
129 130 |
.idle_idx = 0, \ .newidle_idx = 0, \ |
89c4710ee
|
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
|
137 |
| SD_WAKE_IDLE \ |
89c4710ee
|
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
|
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
|
151 |
.child = NULL, \ |
1da177e4c
|
152 153 154 155 156 |
.groups = NULL, \ .min_interval = 1, \ .max_interval = 4, \ .busy_factor = 64, \ .imbalance_pct = 125, \ |
1da177e4c
|
157 |
.cache_nice_tries = 1, \ |
7897986ba
|
158 |
.busy_idx = 2, \ |
9c4801ceb
|
159 160 |
.idle_idx = 0, \ .newidle_idx = 0, \ |
7897986ba
|
161 |
.wake_idx = 1, \ |
687f1661d
|
162 |
.forkexec_idx = 1, \ |
1da177e4c
|
163 164 165 |
.flags = SD_LOAD_BALANCE \ | SD_BALANCE_NEWIDLE \ | SD_BALANCE_EXEC \ |
5c45bf279
|
166 |
| SD_WAKE_AFFINE \ |
9c4801ceb
|
167 |
| SD_WAKE_IDLE \ |
89c4710ee
|
168 |
| BALANCE_FOR_PKG_POWER,\ |
1da177e4c
|
169 170 171 172 173 |
.last_balance = jiffies, \ .balance_interval = 1, \ .nr_balance_failed = 0, \ } #endif |
9c1cfda20
|
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
|
178 |
.child = NULL, \ |
9c1cfda20
|
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
|
191 192 |
.flags = SD_LOAD_BALANCE \ | SD_SERIALIZE, \ |
9c1cfda20
|
193 194 195 196 |
.last_balance = jiffies, \ .balance_interval = 64, \ .nr_balance_failed = 0, \ } |
1da177e4c
|
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 */ |