From: Nick Piggin <nickpiggin@yahoo.com.au>
To: linux-ia64@vger.kernel.org
Subject: [PATCH] random ia64 sched-domains values
Date: Fri, 25 Feb 2005 08:14:40 +0000 [thread overview]
Message-ID: <421EDE70.3010501@yahoo.com.au> (raw)
[-- Attachment #1: Type: text/plain, Size: 1041 bytes --]
Hi,
These are some values I just found from thin-air that should
hopefully make ia64 work after the latest sched patches.
Though it did look like there may have been some problems with
the old values, which I tried to fix up too:
- SD_ALLNODES_INIT had .balance_interval set a specific way -
this field is internal to the scheduler and will end up
sitting between min_interval and max_interval and not do what
was intended, so tweak max_interval instead.
- SD_ALLNODES_INIT had SD_BALANCE_EXEC set. The scheduler
doesn't cope _really_ well with doing balance-on-exec over the
top level of a multi-level NUMA setup like this. It will tend
to fill up the first CPUs in each high level group (cluster of
6 nodes) rather than spreading the load on a per-node basis.
This could be improved if we really need it, but for now remove
the flag from the top level.
- Increase SD_NODES_PER_DOMAIN in the low level NUMA domain so we
still push tasks out a reasonable distance. Set SD_BALANCE_FORK
in this domain too.
Not compiled or tested, sorry.
[-- Attachment #2: sched-tune-ia64.patch --]
[-- Type: text/plain, Size: 3409 bytes --]
---
linux-2.6-npiggin/arch/ia64/kernel/domain.c | 2
linux-2.6-npiggin/include/asm-ia64/topology.h | 62 ++++++++++++++++++++------
2 files changed, 49 insertions(+), 15 deletions(-)
diff -puN include/asm-ia64/topology.h~sched-tune-ia64 include/asm-ia64/topology.h
--- linux-2.6/include/asm-ia64/topology.h~sched-tune-ia64 2005-02-25 18:18:43.000000000 +1100
+++ linux-2.6-npiggin/include/asm-ia64/topology.h 2005-02-25 18:56:50.000000000 +1100
@@ -42,25 +42,55 @@
void build_cpu_to_node_map(void);
+#define SD_CPU_INIT (struct sched_domain) { \
+ .span = CPU_MASK_NONE, \
+ .parent = NULL, \
+ .groups = NULL, \
+ .min_interval = 1, \
+ .max_interval = 4, \
+ .busy_factor = 64, \
+ .imbalance_pct = 125, \
+ .cache_hot_time = (10*1000000), \
+ .cache_nice_tries = 2, \
+ .per_cpu_gain = 100, \
+ .cache_nice_tries = 2, \
+ .busy_idx = 2, \
+ .idle_idx = 1, \
+ .newidle_idx = 2, \
+ .wake_idx = 1, \
+ .forkexec_idx = 1, \
+ .flags = SD_LOAD_BALANCE \
+ | SD_BALANCE_NEWIDLE \
+ | SD_BALANCE_EXEC \
+ | SD_WAKE_AFFINE, \
+ .last_balance = jiffies, \
+ .balance_interval = 1, \
+ .nr_balance_failed = 0, \
+}
+
/* sched_domains SD_NODE_INIT for IA64 NUMA machines */
#define SD_NODE_INIT (struct sched_domain) { \
.span = CPU_MASK_NONE, \
.parent = NULL, \
.groups = NULL, \
- .min_interval = 80, \
- .max_interval = 320, \
- .busy_factor = 320, \
+ .min_interval = 8, \
+ .max_interval = 8*(min(num_online_cpus(), 32)), \
+ .busy_factor = 64, \
.imbalance_pct = 125, \
.cache_hot_time = (10*1000000), \
- .cache_nice_tries = 1, \
+ .cache_nice_tries = 2, \
+ .busy_idx = 3, \
+ .idle_idx = 2, \
+ .newidle_idx = 0, /* unused */ \
+ .wake_idx = 1, \
+ .forkexec_idx = 1, \
.per_cpu_gain = 100, \
.flags = SD_LOAD_BALANCE \
| SD_BALANCE_EXEC \
- | SD_BALANCE_NEWIDLE \
- | SD_WAKE_IDLE \
+ | SD_BALANCE_FORK \
| SD_WAKE_BALANCE, \
.last_balance = jiffies, \
- .balance_interval = 1, \
+ .balance_interval = 64, \
.nr_balance_failed = 0, \
}
@@ -69,17 +99,21 @@ void build_cpu_to_node_map(void);
.span = CPU_MASK_NONE, \
.parent = NULL, \
.groups = NULL, \
- .min_interval = 80, \
- .max_interval = 320, \
- .busy_factor = 320, \
- .imbalance_pct = 125, \
+ .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 */ \
.per_cpu_gain = 100, \
- .flags = SD_LOAD_BALANCE \
- | SD_BALANCE_EXEC, \
+ .flags = SD_LOAD_BALANCE, \
.last_balance = jiffies, \
- .balance_interval = 100*(63+num_online_cpus())/64, \
+ .balance_interval = 64, \
.nr_balance_failed = 0, \
}
diff -puN arch/ia64/kernel/domain.c~sched-tune-ia64 arch/ia64/kernel/domain.c
--- linux-2.6/arch/ia64/kernel/domain.c~sched-tune-ia64 2005-02-25 18:18:48.000000000 +1100
+++ linux-2.6-npiggin/arch/ia64/kernel/domain.c 2005-02-25 18:49:43.000000000 +1100
@@ -14,7 +14,7 @@
#include <linux/topology.h>
#include <linux/nodemask.h>
-#define SD_NODES_PER_DOMAIN 6
+#define SD_NODES_PER_DOMAIN 16
#ifdef CONFIG_NUMA
/**
_
next reply other threads:[~2005-02-25 8:14 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-02-25 8:14 Nick Piggin [this message]
2005-02-25 18:46 ` [PATCH] random ia64 sched-domains values Chen, Kenneth W
2005-02-25 23:41 ` Nick Piggin
2005-02-26 0:25 ` Chen, Kenneth W
2005-02-26 0:40 ` Chen, Kenneth W
2005-02-26 0:48 ` Nick Piggin
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=421EDE70.3010501@yahoo.com.au \
--to=nickpiggin@yahoo.com.au \
--cc=linux-ia64@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox