Skip to content

RFC X86 ticket lock cleanups and improvements

Jeremy Fitzhardinge lkml xen-devel 1 version In review

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 RFC Latest12 patches 19 repliesIn review

Patches in v1 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/12x86/ticketlock: clean up types and accessorsarch/x86/include/asm/spinlock.h arch/x86/include/asm/spinlock_types.h+28 -160 replies
2/12x86/ticketlock: convert spin loop to Carch/x86/include/asm/spinlock.h+30 -308 replies
3/12x86/ticketlock: Use C for __ticket_spin_unlockarch/x86/include/asm/spinlock.h+18 -154 replies
4/12x86/ticketlock: make large and small ticket versions of spin_lock the samearch/x86/include/asm/spinlock.h+8 -150 replies
5/12x86/ticketlock: make __ticket_spin_lock commonarch/x86/include/asm/spinlock.h+20 -220 replies
6/12x86/ticketlock: make __ticket_spin_trylock commonarch/x86/include/asm/spinlock.h arch/x86/include/asm/spinlock_types.h+19 -390 replies
7/12x86/spinlocks: replace pv spinlocks with pv ticketlocksarch/x86/include/asm/paravirt.h arch/x86/include/asm/paravirt_types.h arch/x86/include/asm/spinlock.h +2 more+50 -540 replies
8/12x86/ticketlock: collapse a layer of functionsarch/x86/include/asm/spinlock.h+5 -300 replies
9/12xen/pvticketlock: Xen implementation for PV ticket locksarch/x86/xen/spinlock.c+36 -2454 replies
10/12x86/pvticketlock: keep count of blocked cpusarch/x86/include/asm/spinlock.h arch/x86/include/asm/spinlock_types.h arch/x86/xen/spinlock.c+33 -13 replies
11/12x86/pvticketlock: use callee-save for lock_spinningarch/x86/include/asm/paravirt.h arch/x86/include/asm/paravirt_types.h arch/x86/kernel/paravirt-spinlocks.c +1 more+5 -40 replies
12/12x86/pvticketlock: use callee-save for unlock_kick as wellarch/x86/include/asm/paravirt.h arch/x86/include/asm/paravirt_types.h arch/x86/kernel/paravirt-spinlocks.c +1 more+5 -40 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.

Read the v1 thread

Cover letter [PATCH RFC 00/12] X86 ticket lock cleanups and improvements

[ Sorry, resent with sensible threading and Nick's email corrected ]

Hi all,

This series does three things:

- A general cleanup of the ticketlock implementation, including moving most of it into C, removing a pile of inline asm and ifdefs.

- Convert the PV spinlock mechanism (enabled with CONFIG_PARAVIRT_SPINLOCKS) to a PV ticketlock mechanism. The old way completely replaced the spinlock implementation, changing all the spinlock calls into indirect ones via paravirt-ops. This was overkill, and caused noticable performance regressions on some microarchitectures.

The new scheme keeps the ticketlock algorithm, and uses the standard ticketlock code for both native and PV uses. But it adds a couple of pvops hooks for the slow paths: one when we've been waiting a long time on a lock, and one when we're unlocking a lock which has people waiting on it.

- A Xen implementation of these new pvop hooks, which shows how much simpler they make the backend code.

I've benchmarked these changes with lmbench lat_mmap, which shows that
- at worst - these changes have no detremental effect to performance when run native. In some cases there are surprising improvements (running native with the pvop hooks enabled was noticably faster than without, for example). (I tried also using mmap-perf, but it seems to hang indefinitely when I run it on 4 threads.)

The patches are against v2.6.33, but merge cleanly with current linux-2.6.git.

Thanks,
J

Jeremy Fitzhardinge (12):
x86/ticketlock: clean up types and accessors x86/ticketlock: convert spin loop to C
x86/ticketlock: Use C for __ticket_spin_unlock x86/ticketlock: make large and small ticket versions of spin_lock the
same
x86/ticketlock: make __ticket_spin_lock common x86/ticketlock: make __ticket_spin_trylock common x86/spinlocks: replace pv spinlocks with pv ticketlocks x86/ticketlock: collapse a layer of functions xen/pvticketlock: Xen implementation for PV ticket locks x86/pvticketlock: keep count of blocked cpus x86/pvticketlock: use callee-save for lock_spinning x86/pvticketlock: use callee-save for unlock_kick as well

 arch/x86/include/asm/paravirt.h       |   30 +---
 arch/x86/include/asm/paravirt_types.h |    8 +-
 arch/x86/include/asm/spinlock.h       |  241 ++++++++++++++--------------
 arch/x86/include/asm/spinlock_types.h |   26 +++-
 arch/x86/kernel/paravirt-spinlocks.c  |   15 +--
 arch/x86/xen/spinlock.c               |  282 +++++----------------------------
 6 files changed, 192 insertions(+), 410 deletions(-)