Messages in this thread | | | Subject | Re: [PATCH] rwsem: reduce spinlock contention in wakeup code path | From | Tim Chen <> | Date | Fri, 27 Sep 2013 14:49:18 -0700 |
| |
On Fri, 2013-09-27 at 12:39 -0700, Davidlohr Bueso wrote: > On Fri, 2013-09-27 at 12:28 -0700, Linus Torvalds wrote: > > On Fri, Sep 27, 2013 at 12:00 PM, Waiman Long <Waiman.Long@hp.com> wrote: > > > > > > On a large NUMA machine, it is entirely possible that a fairly large > > > number of threads are queuing up in the ticket spinlock queue to do > > > the wakeup operation. In fact, only one will be needed. This patch > > > tries to reduce spinlock contention by doing just that. > > > > > > A new wakeup field is added to the rwsem structure. This field is > > > set on entry to rwsem_wake() and __rwsem_do_wake() to mark that a > > > thread is pending to do the wakeup call. It is cleared on exit from > > > those functions. > > > > Ok, this is *much* simpler than adding the new MCS spinlock, so I'm > > wondering what the performance difference between the two are. > > Both approaches should be complementary. The idea of optimistic spinning > in rwsems is to avoid putting putting the writer on the wait queue - > reducing contention and giving a greater chance for the rwsem > to get acquired. Waiman's approach is once the blocking actually occurs, > and at this point I'm not sure how this will affect writer stealing > logic. >
I agree with the view that the two approaches are complementary to each other. They address different bottleneck areas in the rwsem. Here're the performance numbers for exim workload compared to a vanilla kernel.
Waimain's patch: +2.0% Alex+Tim's patchset: +4.8% Waiman+Alex+Tim: +5.3%
Tim
| |