[PATCH v3 0/6] powerpc use pv-qpsinlock as the default spinlock implemention
From: Pan Xinhui
Date: Wed May 25 2016 - 04:22:04 EST
change from v2:
__spin_yeild_cpu() will yield slices to lpar if target cpu is running.
remove unnecessary rmb() in __spin_yield/wake_cpu.
__pv_wait() will check the *ptr == val.
some commit message change
change fome v1:
separate into 6 pathes from one patch
some minor code changes.
I do several tests on pseries IBM,8408-E8E with 32cpus, 64GB memory.
benchmark test results are below.
2 perf tests:
perf bench futex hash
perf bench futex lock-pi
_____test________________spinlcok______________pv-qspinlcok_____
|futex hash | 556370 ops | 629634 ops |
|futex lock-pi | 362 ops | 367 ops |
scheduler test:
Test how many loops of schedule() can finish within 10 seconds on all cpus.
_____test________________spinlcok______________pv-qspinlcok_____
|schedule() loops| 322811921 | 311449290 |
kernel compiling test:
build a linux kernel image to see how long it took
_____test________________spinlcok______________pv-qspinlcok_____
| compiling takes| 22m | 22m |
Pan Xinhui (6):
qspinlock: powerpc support qspinlock
powerpc: pseries/Kconfig: Add qspinlock build config
powerpc: lib/locks.c: Add cpu yield/wake helper function
pv-qspinlock: powerpc support pv-qspinlock
pv-qspinlock: use cmpxchg_release in __pv_queued_spin_unlock
powerpc: pseries: Add pv-qspinlock build config/make
arch/powerpc/include/asm/qspinlock.h | 39 +++++++++++++++++++
arch/powerpc/include/asm/qspinlock_paravirt.h | 38 ++++++++++++++++++
.../powerpc/include/asm/qspinlock_paravirt_types.h | 13 +++++++
arch/powerpc/include/asm/spinlock.h | 31 +++++++++------
arch/powerpc/include/asm/spinlock_types.h | 4 ++
arch/powerpc/kernel/Makefile | 1 +
arch/powerpc/kernel/paravirt.c | 45 ++++++++++++++++++++++
arch/powerpc/lib/locks.c | 37 ++++++++++++++++++
arch/powerpc/platforms/pseries/Kconfig | 9 +++++
arch/powerpc/platforms/pseries/setup.c | 5 +++
kernel/locking/qspinlock_paravirt.h | 2 +-
11 files changed, 211 insertions(+), 13 deletions(-)
create mode 100644 arch/powerpc/include/asm/qspinlock.h
create mode 100644 arch/powerpc/include/asm/qspinlock_paravirt.h
create mode 100644 arch/powerpc/include/asm/qspinlock_paravirt_types.h
create mode 100644 arch/powerpc/kernel/paravirt.c
--
1.9.1