From: Andreas Herrmann <andreas.herrmann3@amd.com>
To: Peter Zijlstra <peterz@infradead.org>, Ingo Molnar <mingo@elte.hu>
Cc: linux-kernel@vger.kernel.org
Subject: [PATCH 13/15] sched: Detect child domain of NUMA (aka NODE) domain
Date: Thu, 20 Aug 2009 15:43:47 +0200 [thread overview]
Message-ID: <20090820134347.GB29327@alberich.amd.com> (raw)
In-Reply-To: <20090820131243.GO29327@alberich.amd.com>
On multi-node processors a NUMA node might not span a socket.
Instead a socket might span several NUMA nodes.
This patch introduces a check whether NODE domain is parent
of MC domain and sets s_data.numa_child_level accordingly.
(See previous patch for further details.)
Signed-off-by: Andreas Herrmann <andreas.herrmann3@amd.com>
---
kernel/sched.c | 43 +++++++++++++++++++++++++++++++++++++++++--
1 files changed, 41 insertions(+), 2 deletions(-)
diff --git a/kernel/sched.c b/kernel/sched.c
index b03701d..0c950dc 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -8869,6 +8869,45 @@ static void build_sched_groups(struct s_data *d, enum sched_domain_level l,
}
}
+static enum sched_domain_level get_numa_child_domain_level(struct s_data *d,
+ const struct cpumask *cpu_map)
+{
+ enum sched_domain_level dl = SD_LV_NONE;
+#ifdef CONFIG_NUMA
+ int i;
+ int proper_superset = 0;
+ int proper_subset = 0;
+
+ for_each_cpu(i, cpu_map) {
+ cpumask_and(d->tmpmask, cpu_map, topology_cpu_node_cpumask(i));
+ cpumask_and(d->nodemask, cpu_map,
+ cpumask_of_node(cpu_to_node(i)));
+
+ /* NUMA node's CPU set is proper subset of socket's CPU set */
+ if (cpumask_subset(d->nodemask, d->tmpmask) &&
+ !cpumask_subset(d->tmpmask, d->nodemask))
+ proper_subset = 1;
+
+ /* socket's CPU set is proper subset of NUMA node's CPU set */
+ if (!cpumask_subset(d->nodemask, d->tmpmask) &&
+ cpumask_subset(d->tmpmask, d->nodemask))
+ proper_superset = 1;
+ }
+
+ if (proper_subset && proper_superset)
+ printk(KERN_ERR "sched: inconsistent NUMA hierarchy\n");
+ else if (proper_subset) {
+ printk(KERN_DEBUG "sched: NUMA child domain: MC\n");
+ dl = SD_LV_MC;
+ } else {
+ printk(KERN_DEBUG "sched: NUMA child domain: CPU\n");
+ dl = SD_LV_CPU;
+ }
+
+#endif
+ return dl;
+}
+
/*
* Build sched domains for a given set of cpus and attach the sched domains
* to the individual cpus
@@ -8881,13 +8920,13 @@ static int __build_sched_domains(const struct cpumask *cpu_map,
struct sched_domain *sd;
int i;
- d.numa_child_level = SD_LV_NONE;
-
alloc_state = __visit_domain_allocation_hell(&d, cpu_map);
if (alloc_state != sa_rootdomain)
goto error;
alloc_state = sa_sched_groups;
+ d.numa_child_level = get_numa_child_domain_level(&d, cpu_map);
+
/*
* Set up domains for cpus specified by the cpu_map.
*/
--
1.6.0.4
next prev parent reply other threads:[~2009-08-20 13:44 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-08-20 13:12 [RFC][PATCH 0/15] sched: Fix scheduling for multi-node processors Andreas Herrmann
2009-08-20 13:15 ` [PATCH 1/15] x86, sched: Add config option for multi-node CPU scheduling Andreas Herrmann
2009-08-21 13:50 ` Valdis.Kletnieks
2009-08-24 8:49 ` Andreas Herrmann
2009-08-20 13:34 ` [PATCH 2/15] sched, x86: Provide initializer for MN scheduling domain, define MN level Andreas Herrmann
2009-08-20 13:34 ` [PATCH 3/15] sched: Add cpumask to be used when building MN domain Andreas Herrmann
2009-08-20 13:35 ` [PATCH 4/15] sched: Define per CPU variables and cpu_to_group function for " Andreas Herrmann
2009-08-20 13:36 ` [PATCH 5/15] sched: Add function to build MN sched domain Andreas Herrmann
2009-08-20 13:37 ` [PATCH 6/15] sched: Add support for MN domain in build_sched_groups Andreas Herrmann
2009-08-20 13:38 ` [PATCH 7/15] sched: Activate build of MN domains Andreas Herrmann
2009-08-20 13:39 ` [PATCH 8/15] sched: Add parameter sched_mn_power_savings to control MN domain sched policy Andreas Herrmann
2009-08-24 14:56 ` Peter Zijlstra
2009-08-24 15:32 ` Vaidyanathan Srinivasan
2009-08-24 15:45 ` Peter Zijlstra
2009-08-25 7:52 ` Andreas Herrmann
2009-08-25 7:50 ` Andreas Herrmann
2009-08-25 6:24 ` Andreas Herrmann
2009-08-25 6:41 ` Peter Zijlstra
2009-08-25 8:38 ` Andreas Herrmann
2009-08-26 9:30 ` Gautham R Shenoy
2009-08-27 12:47 ` Andreas Herrmann
2009-08-20 13:40 ` [PATCH 9/15] sched: Check sched_mn_power_savings when setting flags for CPU and MN domains Andreas Herrmann
2009-08-24 14:57 ` Peter Zijlstra
2009-08-25 9:34 ` Gautham R Shenoy
2009-08-26 10:01 ` Gautham R Shenoy
2009-08-20 13:41 ` [PATCH 10/15] sched: Check for sched_mn_power_savings when doing load balancing Andreas Herrmann
2009-08-24 15:03 ` Peter Zijlstra
2009-08-24 15:40 ` Vaidyanathan Srinivasan
2009-08-25 8:00 ` Andreas Herrmann
2009-08-20 13:41 ` [PATCH 11/15] sched: Pass unlimited __cpu_power information to upper domain level groups Andreas Herrmann
2009-08-24 15:21 ` Peter Zijlstra
2009-08-24 16:44 ` Balbir Singh
2009-08-24 17:26 ` Peter Zijlstra
2009-08-24 18:19 ` Balbir Singh
2009-08-25 7:11 ` Peter Zijlstra
2009-08-25 8:04 ` Balbir Singh
2009-08-25 8:30 ` Peter Zijlstra
2009-08-25 8:51 ` Andreas Herrmann
2009-08-20 13:42 ` [PATCH 12/15] sched: Allow NODE domain to be parent of MC instead of CPU domain Andreas Herrmann
2009-08-24 15:32 ` Peter Zijlstra
2009-08-25 8:55 ` Andreas Herrmann
2009-08-20 13:43 ` Andreas Herrmann [this message]
2009-08-24 15:34 ` [PATCH 13/15] sched: Detect child domain of NUMA (aka NODE) domain Peter Zijlstra
2009-08-25 9:13 ` Andreas Herrmann
2009-08-20 13:45 ` [PATCH 14/15] sched: Conditionally limit __cpu_power when child sched domain has type NODE Andreas Herrmann
2009-08-24 15:35 ` Peter Zijlstra
2009-08-25 9:19 ` Andreas Herrmann
2009-08-20 13:46 ` [PATCH 15/15] x86: Fix cpu_coregroup_mask to return correct cpumask on multi-node processors Andreas Herrmann
2009-08-24 15:36 ` Peter Zijlstra
2009-08-24 18:21 ` Ingo Molnar
2009-08-25 10:13 ` Andreas Herrmann
2009-08-25 10:36 ` Ingo Molnar
2009-08-27 13:18 ` Andreas Herrmann
2009-08-25 9:31 ` Andreas Herrmann
2009-08-25 9:55 ` Peter Zijlstra
2009-08-25 10:20 ` Ingo Molnar
2009-08-25 10:24 ` Andreas Herrmann
2009-08-25 10:28 ` Ingo Molnar
2009-08-25 10:35 ` Peter Zijlstra
2009-08-27 15:42 ` Andreas Herrmann
2009-08-27 15:25 ` Andreas Herrmann
2009-08-28 10:39 ` Peter Zijlstra
2009-08-28 12:03 ` Andreas Herrmann
2009-08-28 12:50 ` Peter Zijlstra
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090820134347.GB29327@alberich.amd.com \
--to=andreas.herrmann3@amd.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=peterz@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.