2005-04-17 05:20:36 +07:00
|
|
|
#ifndef _ASM_SH_TOPOLOGY_H
|
|
|
|
#define _ASM_SH_TOPOLOGY_H
|
|
|
|
|
2007-06-06 15:52:19 +07:00
|
|
|
#ifdef CONFIG_NUMA
|
|
|
|
|
|
|
|
/* sched_domains SD_NODE_INIT for sh machines */
|
|
|
|
#define SD_NODE_INIT (struct sched_domain) { \
|
|
|
|
.parent = NULL, \
|
|
|
|
.child = NULL, \
|
|
|
|
.groups = NULL, \
|
|
|
|
.min_interval = 8, \
|
|
|
|
.max_interval = 32, \
|
|
|
|
.busy_factor = 32, \
|
|
|
|
.imbalance_pct = 125, \
|
|
|
|
.cache_nice_tries = 2, \
|
|
|
|
.busy_idx = 3, \
|
|
|
|
.idle_idx = 2, \
|
sched: Improve latencies and throughput
Make the idle balancer more agressive, to improve a
x264 encoding workload provided by Jason Garrett-Glaser:
NEXT_BUDDY NO_LB_BIAS
encoded 600 frames, 252.82 fps, 22096.60 kb/s
encoded 600 frames, 250.69 fps, 22096.60 kb/s
encoded 600 frames, 245.76 fps, 22096.60 kb/s
NO_NEXT_BUDDY LB_BIAS
encoded 600 frames, 344.44 fps, 22096.60 kb/s
encoded 600 frames, 346.66 fps, 22096.60 kb/s
encoded 600 frames, 352.59 fps, 22096.60 kb/s
NO_NEXT_BUDDY NO_LB_BIAS
encoded 600 frames, 425.75 fps, 22096.60 kb/s
encoded 600 frames, 425.45 fps, 22096.60 kb/s
encoded 600 frames, 422.49 fps, 22096.60 kb/s
Peter pointed out that this is better done via newidle_idx,
not via LB_BIAS, newidle balancing should look for where
there is load _now_, not where there was load 2 ticks ago.
Worst-case latencies are improved as well as no buddies
means less vruntime spread. (as per prior lkml discussions)
This change improves kbuild-peak parallelism as well.
Reported-by: Jason Garrett-Glaser <darkshikari@gmail.com>
Signed-off-by: Mike Galbraith <efault@gmx.de>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <1253011667.9128.16.camel@marge.simson.net>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2009-09-15 20:07:03 +07:00
|
|
|
.newidle_idx = 0, \
|
2009-09-03 18:16:51 +07:00
|
|
|
.wake_idx = 0, \
|
2009-09-15 20:22:03 +07:00
|
|
|
.forkexec_idx = 0, \
|
2007-06-06 15:52:19 +07:00
|
|
|
.flags = SD_LOAD_BALANCE \
|
|
|
|
| SD_BALANCE_FORK \
|
|
|
|
| SD_BALANCE_EXEC \
|
sched: Improve latencies and throughput
Make the idle balancer more agressive, to improve a
x264 encoding workload provided by Jason Garrett-Glaser:
NEXT_BUDDY NO_LB_BIAS
encoded 600 frames, 252.82 fps, 22096.60 kb/s
encoded 600 frames, 250.69 fps, 22096.60 kb/s
encoded 600 frames, 245.76 fps, 22096.60 kb/s
NO_NEXT_BUDDY LB_BIAS
encoded 600 frames, 344.44 fps, 22096.60 kb/s
encoded 600 frames, 346.66 fps, 22096.60 kb/s
encoded 600 frames, 352.59 fps, 22096.60 kb/s
NO_NEXT_BUDDY NO_LB_BIAS
encoded 600 frames, 425.75 fps, 22096.60 kb/s
encoded 600 frames, 425.45 fps, 22096.60 kb/s
encoded 600 frames, 422.49 fps, 22096.60 kb/s
Peter pointed out that this is better done via newidle_idx,
not via LB_BIAS, newidle balancing should look for where
there is load _now_, not where there was load 2 ticks ago.
Worst-case latencies are improved as well as no buddies
means less vruntime spread. (as per prior lkml discussions)
This change improves kbuild-peak parallelism as well.
Reported-by: Jason Garrett-Glaser <darkshikari@gmail.com>
Signed-off-by: Mike Galbraith <efault@gmx.de>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <1253011667.9128.16.camel@marge.simson.net>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2009-09-15 20:07:03 +07:00
|
|
|
| SD_BALANCE_NEWIDLE \
|
sched: Merge select_task_rq_fair() and sched_balance_self()
The problem with wake_idle() is that is doesn't respect things like
cpu_power, which means it doesn't deal well with SMT nor the recent
RT interaction.
To cure this, it needs to do what sched_balance_self() does, which
leads to the possibility of merging select_task_rq_fair() and
sched_balance_self().
Modify sched_balance_self() to:
- update_shares() when walking up the domain tree,
(it only called it for the top domain, but it should
have done this anyway), which allows us to remove
this ugly bit from try_to_wake_up().
- do wake_affine() on the smallest domain that contains
both this (the waking) and the prev (the wakee) cpu for
WAKE invocations.
Then use the top-down balance steps it had to replace wake_idle().
This leads to the dissapearance of SD_WAKE_BALANCE and
SD_WAKE_IDLE_FAR, with SD_WAKE_IDLE replaced with SD_BALANCE_WAKE.
SD_WAKE_AFFINE needs SD_BALANCE_WAKE to be effective.
Touch all topology bits to replace the old with new SD flags --
platforms might need re-tuning, enabling SD_BALANCE_WAKE
conditionally on a NUMA distance seems like a good additional
feature, magny-core and small nehalem systems would want this
enabled, systems with slow interconnects would not.
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <new-submission>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2009-09-10 18:50:02 +07:00
|
|
|
| SD_SERIALIZE, \
|
2007-06-06 15:52:19 +07:00
|
|
|
.last_balance = jiffies, \
|
|
|
|
.balance_interval = 1, \
|
|
|
|
.nr_balance_failed = 0, \
|
|
|
|
}
|
|
|
|
|
2008-05-08 11:40:17 +07:00
|
|
|
#define cpu_to_node(cpu) ((void)(cpu),0)
|
|
|
|
#define parent_node(node) ((void)(node),0)
|
|
|
|
|
2008-12-26 18:53:39 +07:00
|
|
|
#define cpumask_of_node(node) ((void)node, cpu_online_mask)
|
2008-05-08 11:40:17 +07:00
|
|
|
|
|
|
|
#define pcibus_to_node(bus) ((void)(bus), -1)
|
2009-04-08 07:11:15 +07:00
|
|
|
#define cpumask_of_pcibus(bus) (pcibus_to_node(bus) == -1 ? \
|
|
|
|
CPU_MASK_ALL_PTR : \
|
|
|
|
cpumask_of_node(pcibus_to_node(bus)))
|
|
|
|
|
2007-06-06 15:52:19 +07:00
|
|
|
#endif
|
|
|
|
|
2009-10-16 16:00:02 +07:00
|
|
|
#define mc_capable() (1)
|
|
|
|
|
|
|
|
const struct cpumask *cpu_coregroup_mask(unsigned int cpu);
|
|
|
|
|
|
|
|
extern cpumask_t cpu_core_map[NR_CPUS];
|
|
|
|
|
|
|
|
#define topology_core_cpumask(cpu) (&cpu_core_map[cpu])
|
|
|
|
|
2005-04-17 05:20:36 +07:00
|
|
|
#include <asm-generic/topology.h>
|
|
|
|
|
|
|
|
#endif /* _ASM_SH_TOPOLOGY_H */
|