RFC X86 ticket lock cleanups and improvements
Get series with b4
b4 am [email protected]Versions newest first
- v1 RFC Latest12 patches 19 repliesIn review
Patches in v1 No applies recorded yet
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/12 | x86/ticketlock: clean up types and accessorsarch/ arch/ | +28 | 0 replies | |
| 2/12 | x86/ticketlock: convert spin loop to Carch/ | +30 | 8 replies | |
| 3/12 | x86/ticketlock: Use C for __ticket_spin_unlockarch/ | +18 | 4 replies | |
| 4/12 | x86/ticketlock: make large and small ticket versions of spin_lock the samearch/ | +8 | 0 replies | |
| 5/12 | x86/ticketlock: make __ticket_spin_lock commonarch/ | +20 | 0 replies | |
| 6/12 | x86/ticketlock: make __ticket_spin_trylock commonarch/ arch/ | +19 | 0 replies | |
| 7/12 | x86/spinlocks: replace pv spinlocks with pv ticketlocksarch/ arch/ arch/ +2 more | +50 | 0 replies | |
| 8/12 | x86/ticketlock: collapse a layer of functionsarch/ | +5 | 0 replies | |
| 9/12 | xen/pvticketlock: Xen implementation for PV ticket locksarch/ | +36 | 4 replies | |
| 10/12 | x86/pvticketlock: keep count of blocked cpusarch/ arch/ arch/ | +33 | 3 replies | |
| 11/12 | x86/pvticketlock: use callee-save for lock_spinningarch/ arch/ arch/ +1 more | +5 | 0 replies | |
| 12/12 | x86/pvticketlock: use callee-save for unlock_kick as wellarch/ arch/ arch/ +1 more | +5 | 0 replies |
Reviews trailers per patch
No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.
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(-)