Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Skip to content
Commit 8f898fbb authored by Rik van Riel's avatar Rik van Riel Committed by Ingo Molnar
Browse files

sched/x86: Optimize switch_mm() for multi-threaded workloads



Dick Fowles, Don Zickus and Joe Mario have been working on
improvements to perf, and noticed heavy cache line contention
on the mm_cpumask, running linpack on a 60 core / 120 thread
system.

The cause turned out to be unnecessary atomic accesses to the
mm_cpumask. When in lazy TLB mode, the CPU is only removed from
the mm_cpumask if there is a TLB flush event.

Most of the time, no such TLB flush happens, and the kernel
skips the TLB reload. It can also skip the atomic memory
set & test.

Here is a summary of Joe's test results:

 * The __schedule function dropped from 24% of all program cycles down
   to 5.5%.

 * The cacheline contention/hotness for accesses to that bitmask went
   from being the 1st/2nd hottest - down to the 84th hottest (0.3% of
   all shared misses which is now quite cold)

 * The average load latency for the bit-test-n-set instruction in
   __schedule dropped from 10k-15k cycles down to an average of 600 cycles.

 * The linpack program results improved from 133 GFlops to 144 GFlops.
   Peak GFlops rose from 133 to 153.

Reported-by: default avatarDon Zickus <dzickus@redhat.com>
Reported-by: default avatarJoe Mario <jmario@redhat.com>
Tested-by: default avatarJoe Mario <jmario@redhat.com>
Signed-off-by: default avatarRik van Riel <riel@redhat.com>
Reviewed-by: default avatarPaul Turner <pjt@google.com>
Acked-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
Link: http://lkml.kernel.org/r/20130731221421.616d3d20@annuminas.surriel.com


[ Made the comments consistent around the modified code. ]
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parent 46591962
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment