This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCHv3] powerpc: Spinlock optimization and cleanup
- From: "Tulio Magno Quites Machado Filho" <tuliom at linux dot vnet dot ibm dot com>
- To: "Paul E. Murphy" <murphyp at linux dot vnet dot ibm dot com>
- Cc: "libc-alpha\ at sourceware dot org" <libc-alpha at sourceware dot org>, Torvald Riegel <triegel at redhat dot com>, "munroesj\ at linux dot vnet dot ibm dot com" <munroesj at linux dot vnet dot ibm dot com>, dalias at libc dot org
- Cc:
- Date: Thu, 19 Nov 2015 18:11:10 -0200
- Subject: Re: [PATCHv3] powerpc: Spinlock optimization and cleanup
- Authentication-results: sourceware.org; auth=none
- References: <5632862F dot 4000806 at linux dot vnet dot ibm dot com>
"Paul E. Murphy" <murphyp@linux.vnet.ibm.com> writes:
> Changes from V2:
>
> * Cleanup whitespace
> * Apply similar changes to pthread_mutex_trylock
> * Remove initial test as it doesn't impact P8 performance,
> and degrades P7 performance.
> * Remove out of date comments, someone cleaned up the
> declarations in the meantime.
>
> I'm still working on getting the benchmark utility in shape
> for initial submission.
>
> ---8<---
> This patch optimizes powerpc spinlock implementation by:
>
> * Use the correct EH hint bit on the larx for supported ISA. For lock
> acquisition, the thread that acquired the lock with a successful stcx
> does not want to give away the write ownership on the cacheline. The
> idea is to make the load reservation "sticky" about retaining write
> authority to the line. That way, the store that must inevitably come
> to release the lock can succeed quickly and not contend with other
> threads issuing lwarx. If another thread does a store to the line
> (false sharing), the winning thread must give up write authority to
> the proper value of EH for the larx for a lock acquisition is 1.
>
> * Increase contented lock performance by up to 40%, and no measurable
> impact on uncontended locks on P8.
>
> Thanks to Adhemerval Zanella who did most of the work. I've run some
> tests, and addressed some minor feedback.
>
> 2015-10-28 Adhemeval Zanella <azanella@linux.vnet.ibm.com>
> Paul E. Murphy <murphyp@linux.vnet.ibm.com>
>
> * sysdeps/powerpc/nptl/pthread_spin_lock.c (pthread_spin_lock):
> Add lwarx hint, and use macro for acquire instruction.
> * sysdeps/powerpc/nptl/pthread_spin_trylock.c (pthread_spin_trylock):
> Likewise.
> * sysdep/unix/sysv/linux/powerpc/pthread_spin_unlock.c: Move to ...
> * sysdeps/powerpc/nptl/pthread_spin_unlock.c: ... here, and
> update to use new atomic macros.
LGTM.
I'm pushing it.
Thanks!
--
Tulio Magno