futex: Force hot variables into a single cache line
authorRasmus Villemoes <linux@rasmusvillemoes.dk>
Wed, 9 Sep 2015 21:36:40 +0000 (23:36 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Tue, 22 Sep 2015 14:23:15 +0000 (16:23 +0200)
commitac742d37180bee83bc433be087b66a17af2883b9
tree8607e1aa1dd65d5229c921a62fc97c99319cd7f3
parent93edc8bd7750ff3cae088bfca453ea73dc9004a4
futex: Force hot variables into a single cache line

futex_hash() references two global variables: the base pointer
futex_queues and the size of the array futex_hashsize. The latter is
marked __read_mostly, while the former is not, so they are likely to
end up very far from each other. This means that futex_hash() is
likely to encounter two cache misses.

We could mark futex_queues as __read_mostly as well, but that doesn't
guarantee they'll end up next to each other (and even if they do, they
may still end up in different cache lines). So put the two variables
in a small singleton struct with sufficient alignment and mark that as
__read_mostly.

Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Davidlohr Bueso <dave@stgolabs.net>
Cc: kbuild test robot <fengguang.wu@intel.com>
Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Link: http://lkml.kernel.org/r/1441834601-13633-1-git-send-email-linux@rasmusvillemoes.dk
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
kernel/futex.c