mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH RFC 0/7] x86: convert ticketlocks to C and remove duplicate code
@ 2011-06-16 21:40 Jeremy Fitzhardinge
  2011-06-16 21:40 ` [PATCH 1/7] x86/ticketlock: clean up types and accessors Jeremy Fitzhardinge
                   ` (12 more replies)
  0 siblings, 13 replies; 50+ messages in thread
From: Jeremy Fitzhardinge @ 2011-06-16 21:40 UTC (permalink / raw)
  To: Peter Zijlstra
  Cc: H. Peter Anvin, Ingo Molnar, the arch/x86 maintainers,
	Linux Kernel Mailing List, Nick Piggin, Jeremy Fitzhardinge

From: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>

Hi all,

I'm proposing this series for 3[.0].1.

This is a repost of a series to clean up the x86 ticket lock
code by converting it to a mostly C implementation and removing
lots of duplicate code relating to the ticket size.

The last time I posted this series, the only significant comments
were from Nick Piggin, specifically relating to:

 1. A wrongly placed barrier on unlock (which may have allowed the
    compiler to move things out of the locked region.  I went
    belt-and-suspenders by having two barriers to prevent motion
    into or out of the locked region.

 2. With NR_CPUS < 256 the ticket size is 8 bits.  The compiler doesn't
    use the same trick as the hand-coded asm to directly compare the high
    and low bytes in the word, but does a bit of extra shuffling around.
    However, the Intel optimisation guide and several x86 experts have
    opined that its best to avoid the high-byte operations anyway, since
    they will cause a partial word stall, and the gcc-generated code should
    be better.

    Overall the compiler-generated code is very similar to the hand-coded
    versions, with the partial byte operations being the only significant
    difference. (Curiously, gcc does generate a high-byte compare for me
    in trylock, so it can if it wants to.)

I've been running with this code in place for several months on 4 core
systems without any problems.

I couldn't measure a consistent performance difference between the two
implemenations; there seemed to be +/- ~1% +/-, which is the level of
variation I see from simply recompiling the kernel with slightly
different code alignment.

Overall, I think the large reduction in code size is a big win.

Thanks,
	J

Jeremy Fitzhardinge (7):
  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/ticketlock: prevent memory accesses from reordered out of lock
    region

 arch/x86/include/asm/spinlock.h       |  147 ++++++++++++---------------------
 arch/x86/include/asm/spinlock_types.h |   22 +++++-
 2 files changed, 74 insertions(+), 95 deletions(-)

-- 
1.7.5.4


^ permalink raw reply	[flat|nested] 50+ messages in thread
* [GIT PULL] ticketlock + cmpxchg cleanups
@ 2011-08-29 17:28 Jeremy Fitzhardinge
  2011-08-30  5:25 ` [tip:x86/spinlocks] x86, ticketlock: Clean up types and accessors tip-bot for Jeremy Fitzhardinge
  0 siblings, 1 reply; 50+ messages in thread
From: Jeremy Fitzhardinge @ 2011-08-29 17:28 UTC (permalink / raw)
  To: H. Peter Anvin; +Cc: Linux Kernel Mailing List, xen-devel

Hi,

This is the final version of the ticketlock+cmpxchg series.  I dropped
the cmpxchg_flag() stuff, since it is not a clear win and not really
germane to the rest of the series.

Thanks,
    J

The following changes since commit 61c4f2c81c61f73549928dfd9f3e8f26aa36a8cf:

  Linux 2.6.39 (2011-05-18 21:06:34 -0700)

are available in the git repository at:
  git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen.git upstream/ticketlock-cleanup

Jeremy Fitzhardinge (10):
      x86/cmpxchg: linux/alternative.h has LOCK_PREFIX
      x86/cmpxchg: move 32-bit __cmpxchg_wrong_size to match 64 bit.
      x86/cmpxchg: move 64-bit set64_bit() to match 32-bit
      x86/cmpxchg: unify cmpxchg into cmpxchg.h
      x86: add xadd helper macro
      x86: use xadd helper more widely
      x86/ticketlock: clean up types and accessors
      x86/ticketlock: convert spin loop to C
      x86/ticketlock: convert __ticket_spin_lock to use xadd()
      x86/ticketlock: make __ticket_spin_trylock common

 arch/x86/include/asm/atomic.h         |    8 +-
 arch/x86/include/asm/atomic64_64.h    |    6 +-
 arch/x86/include/asm/cmpxchg.h        |  198 +++++++++++++++++++++++++++++++++
 arch/x86/include/asm/cmpxchg_32.h     |  114 -------------------
 arch/x86/include/asm/cmpxchg_64.h     |  131 ----------------------
 arch/x86/include/asm/rwsem.h          |    8 +-
 arch/x86/include/asm/spinlock.h       |  110 +++++--------------
 arch/x86/include/asm/spinlock_types.h |   22 ++++-
 arch/x86/include/asm/uv/uv_bau.h      |    6 +-
 9 files changed, 250 insertions(+), 353 deletions(-)



^ permalink raw reply	[flat|nested] 50+ messages in thread

end of thread, other threads:[~2011-09-07 23:25 UTC | newest]

Thread overview: 50+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-06-16 21:40 [PATCH RFC 0/7] x86: convert ticketlocks to C and remove duplicate code Jeremy Fitzhardinge
2011-06-16 21:40 ` [PATCH 1/7] x86/ticketlock: clean up types and accessors Jeremy Fitzhardinge
2011-06-16 21:40 ` [PATCH 2/7] x86/ticketlock: convert spin loop to C Jeremy Fitzhardinge
2011-06-16 21:40 ` [PATCH 3/7] x86/ticketlock: Use C for __ticket_spin_unlock Jeremy Fitzhardinge
2011-06-16 21:40 ` [PATCH 4/7] x86/ticketlock: make large and small ticket versions of spin_lock the same Jeremy Fitzhardinge
2011-06-16 21:40 ` [PATCH 5/7] x86/ticketlock: make __ticket_spin_lock common Jeremy Fitzhardinge
2011-06-16 21:40 ` [PATCH 6/7] x86/ticketlock: make __ticket_spin_trylock common Jeremy Fitzhardinge
2011-06-16 21:40 ` [PATCH 7/7] x86/ticketlock: prevent memory accesses from reordered out of lock region Jeremy Fitzhardinge
2011-06-21 14:01 ` [PATCH RFC 0/7] x86: convert ticketlocks to C and remove duplicate code Peter Zijlstra
2011-06-21 17:54   ` Jeremy Fitzhardinge
2011-06-22 19:21   ` Jeremy Fitzhardinge
2011-06-22 20:19     ` H. Peter Anvin
2011-06-22 20:59       ` Jeremy Fitzhardinge
2011-06-22 21:07         ` H. Peter Anvin
2011-06-22 21:35           ` Jeremy Fitzhardinge
2011-06-22 23:16             ` H. Peter Anvin
2011-06-21 14:18 ` Konrad Rzeszutek Wilk
2011-06-24  1:19 ` [PATCH 1/8] x86/ticketlock: clean up types and accessors Jeremy Fitzhardinge
2011-06-24  1:19   ` [PATCH 2/8] x86/ticketlock: convert spin loop to C Jeremy Fitzhardinge
2011-07-22 19:55     ` [tip:x86/spinlocks] x86, ticketlock: Convert " tip-bot for Jeremy Fitzhardinge
2011-06-24  1:19   ` [PATCH 3/8] x86/ticketlock: Use C for __ticket_spin_unlock Jeremy Fitzhardinge
2011-06-24 21:52     ` H. Peter Anvin
2011-06-24 22:41       ` Jeremy Fitzhardinge
2011-07-22 18:32         ` H. Peter Anvin
2011-07-22 19:28           ` Jeremy Fitzhardinge
2011-07-22 19:56       ` [tip:x86/spinlocks] x86, ticketlock: Use asm volatile for __ticket_unlock_release() tip-bot for H. Peter Anvin
2011-07-22 19:56     ` [tip:x86/spinlocks] x86, ticketlock: Use C for __ticket_spin_unlock tip-bot for Jeremy Fitzhardinge
2011-06-24  1:19   ` [PATCH 4/8] x86/ticketlock: make large and small ticket versions of spin_lock the same Jeremy Fitzhardinge
2011-07-22 19:57     ` [tip:x86/spinlocks] x86, ticketlock: Make " tip-bot for Jeremy Fitzhardinge
2011-06-24  1:19   ` [PATCH 5/8] x86/ticketlock: make __ticket_spin_lock common Jeremy Fitzhardinge
2011-07-22 19:57     ` [tip:x86/spinlocks] x86, ticketlock: Make " tip-bot for Jeremy Fitzhardinge
2011-06-24  1:19   ` [PATCH 6/8] x86/ticketlock: make __ticket_spin_trylock common Jeremy Fitzhardinge
2011-07-22 19:57     ` [tip:x86/spinlocks] x86, ticketlock: Make " tip-bot for Jeremy Fitzhardinge
2011-06-24  1:19   ` [PATCH 7/8] x86: add xadd helper macro Jeremy Fitzhardinge
2011-07-22 19:58     ` [tip:x86/spinlocks] x86: Add " tip-bot for Jeremy Fitzhardinge
2011-06-24  1:19   ` [PATCH 8/8] x86/ticketlock: use xadd helper Jeremy Fitzhardinge
2011-07-22 19:58     ` [tip:x86/spinlocks] x86, ticketlock: Use " tip-bot for Jeremy Fitzhardinge
2011-07-22 19:55   ` [tip:x86/spinlocks] x86, ticketlock: Clean up types and accessors tip-bot for Jeremy Fitzhardinge
2011-06-24 21:50 ` [PATCH RFC 0/7] x86: convert ticketlocks to C and remove duplicate code H. Peter Anvin
2011-06-24 22:42   ` Jeremy Fitzhardinge
2011-06-25  3:15     ` H. Peter Anvin
2011-07-15 17:24       ` Jeremy Fitzhardinge
2011-07-15 23:06         ` H. Peter Anvin
2011-07-16  0:14           ` Jeremy Fitzhardinge
2011-06-25 10:11 ` Ingo Molnar
2011-06-29 20:44 ` Andi Kleen
2011-07-21 23:33   ` Jeremy Fitzhardinge
2011-07-22 16:25     ` Andi Kleen
2011-09-07 23:25   ` Jeremy Fitzhardinge
2011-08-29 17:28 [GIT PULL] ticketlock + cmpxchg cleanups Jeremy Fitzhardinge
2011-08-30  5:25 ` [tip:x86/spinlocks] x86, ticketlock: Clean up types and accessors tip-bot for Jeremy Fitzhardinge

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome