linux/arch
Tim Chen 66558b730f sched: Add cluster scheduler level for x86
There are x86 CPU architectures (e.g. Jacobsville) where L2 cahce is
shared among a cluster of cores instead of being exclusive to one
single core.

To prevent oversubscription of L2 cache, load should be balanced
between such L2 clusters, especially for tasks with no shared data.
On benchmark such as SPECrate mcf test, this change provides a boost
to performance especially on medium load system on Jacobsville.  on a
Jacobsville that has 24 Atom cores, arranged into 6 clusters of 4
cores each, the benchmark number is as follow:

 Improvement over baseline kernel for mcf_r
 copies		run time	base rate
 1		-0.1%		-0.2%
 6		25.1%		25.1%
 12		18.8%		19.0%
 24		0.3%		0.3%

So this looks pretty good. In terms of the system's task distribution,
some pretty bad clumping can be seen for the vanilla kernel without
the L2 cluster domain for the 6 and 12 copies case. With the extra
domain for cluster, the load does get evened out between the clusters.

Note this patch isn't an universal win as spreading isn't necessarily
a win, particually for those workload who can benefit from packing.

Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com>
Signed-off-by: Barry Song <song.bao.hua@hisilicon.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lore.kernel.org/r/20210924085104.44806-4-21cnbao@gmail.com
2021-10-15 11:25:16 +02:00
..
alpha sched: Add wrapper for get_wchan() to keep task blocked 2021-10-15 11:25:14 +02:00
arc sched: Add wrapper for get_wchan() to keep task blocked 2021-10-15 11:25:14 +02:00
arm sched: Add wrapper for get_wchan() to keep task blocked 2021-10-15 11:25:14 +02:00
arm64 sched: Add cluster scheduler level in core and related Kconfig for ARM64 2021-10-15 11:25:16 +02:00
csky sched: Add wrapper for get_wchan() to keep task blocked 2021-10-15 11:25:14 +02:00
h8300 sched: Add wrapper for get_wchan() to keep task blocked 2021-10-15 11:25:14 +02:00
hexagon sched: Add wrapper for get_wchan() to keep task blocked 2021-10-15 11:25:14 +02:00
ia64 sched: Add wrapper for get_wchan() to keep task blocked 2021-10-15 11:25:14 +02:00
m68k sched: Add wrapper for get_wchan() to keep task blocked 2021-10-15 11:25:14 +02:00
microblaze sched: Add wrapper for get_wchan() to keep task blocked 2021-10-15 11:25:14 +02:00
mips sched: Add wrapper for get_wchan() to keep task blocked 2021-10-15 11:25:14 +02:00
nds32 sched: Add wrapper for get_wchan() to keep task blocked 2021-10-15 11:25:14 +02:00
nios2 sched: Add wrapper for get_wchan() to keep task blocked 2021-10-15 11:25:14 +02:00
openrisc sched: Add wrapper for get_wchan() to keep task blocked 2021-10-15 11:25:14 +02:00
parisc sched: Add wrapper for get_wchan() to keep task blocked 2021-10-15 11:25:14 +02:00
powerpc sched: Add wrapper for get_wchan() to keep task blocked 2021-10-15 11:25:14 +02:00
riscv sched: Add wrapper for get_wchan() to keep task blocked 2021-10-15 11:25:14 +02:00
s390 sched: Add wrapper for get_wchan() to keep task blocked 2021-10-15 11:25:14 +02:00
sh sched: Add wrapper for get_wchan() to keep task blocked 2021-10-15 11:25:14 +02:00
sparc sched: Add wrapper for get_wchan() to keep task blocked 2021-10-15 11:25:14 +02:00
um sched: Add wrapper for get_wchan() to keep task blocked 2021-10-15 11:25:14 +02:00
x86 sched: Add cluster scheduler level for x86 2021-10-15 11:25:16 +02:00
xtensa sched: Add wrapper for get_wchan() to keep task blocked 2021-10-15 11:25:14 +02:00
.gitignore
Kconfig Merge branch 'akpm' (patches from Andrew) 2021-09-08 12:55:35 -07:00