[Mesa-dev] [RFC 1/3] mesa: Add new fast mtx_t mutex type for basic use cases

Dylan Baker dylan at pnwbakers.com
Tue Oct 10 18:17:57 UTC 2017


Quoting Nicolai Hähnle (2017-10-10 09:30:31)
> On 10.10.2017 04:45, Timothy Arceri wrote:
> > While modern pthread mutexes are very fast, they still incur a call to an
> > external DSO and overhead of the generality and features of pthread mutexes.
> > Most mutexes in mesa only needs lock/unlock, and the idea here is that we can
> > inline the atomic operation and make the fast case just two intructions.
> > Mutexes are subtle and finicky to implement, so we carefully copy the
> > implementation from Ulrich Dreppers well-written and well-reviewed paper:
> > 
> >    "Futexes Are Tricky"
> >    http://www.akkadia.org/drepper/futex.pdf
> > 
> > We implement "mutex3", which gives us a mutex that has no syscalls on
> > uncontended lock or unlock.  Further, the uncontended case boils down to a
> > cmpxchg and an untaken branch and the uncontended unlock is just a locked decr
> > and an untaken branch.  We use __builtin_expect() to indicate that contention
> > is unlikely so that gcc will put the contention code out of the main code
> > flow.
> > 
> > A fast mutex only supports lock/unlock, can't be recursive or used with
> > condition variables.  We keep the pthread mutex implementation around as
> > full_mtx_t for the few places where we use condition variables or recursive
> > locking.  For platforms or compilers where futex and atomics aren't available,
> > mtx_t falls back to the pthread mutex.
> > 
> > The pthread mutex lock/unlock overhead shows up on benchmarks for CPU bound
> > applications.  Most CPU bound cases are helped and some of our internal
> > bind_buffer_object heavy benchmarks gain up to 10%.
> > 
> > Signed-off-by: Kristian Høgsberg <krh at bitplanet.net>
> > Signed-off-by: Timothy Arceri <tarceri at itsqueeze.com>
> > ---
> >   configure.ac          |   3 ++
> >   src/util/simple_mtx.h | 146 ++++++++++++++++++++++++++++++++++++++++++++++++++
> 
> Add to util/Makefile.sources

Also add to util/meson.build

Dylan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: signature
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20171010/35b1e7f4/attachment.sig>


More information about the mesa-dev mailing list