Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752744AbbBEEg0 (ORCPT ); Wed, 4 Feb 2015 23:36:26 -0500 Received: from smtp2.provo.novell.com ([137.65.250.81]:34761 "EHLO smtp2.provo.novell.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750923AbbBEEgZ (ORCPT ); Wed, 4 Feb 2015 23:36:25 -0500 Message-ID: <1423110970.6835.18.camel@stgolabs.net> Subject: Re: [PATCH 1/2] mutex: In mutex_spin_on_owner(), return true when owner changes From: Davidlohr Bueso To: Jason Low Cc: Peter Zijlstra , Ingo Molnar , linux-kernel@vger.kernel.org, Tim Chen , "Paul E. McKenney" , Linus Torvalds , tglx@linutronix.de, chegu_vinod@hp.com, Aswin Chandramouleeswaran Date: Wed, 04 Feb 2015 20:36:10 -0800 In-Reply-To: <1422914367-5574-2-git-send-email-jason.low2@hp.com> References: <1422914367-5574-1-git-send-email-jason.low2@hp.com> <1422914367-5574-2-git-send-email-jason.low2@hp.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.12.7 Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2043 Lines: 40 On Mon, 2015-02-02 at 13:59 -0800, Jason Low wrote: > In the mutex_spin_on_owner(), we return true only if lock->owner == NULL. > This was beneficial in situations where there were multiple threads > simultaneously spinning for the mutex. If another thread got the lock > while other spinner(s) were also doing mutex_spin_on_owner(), then the > other spinners would stop spinning. This workaround helped reduce the > chance that many spinners were simultaneously spinning for the mutex > which can help reduce contention in highly contended cases. > > However, recent changes were made to the optimistic spinning code such > that instead of having all spinners simultaneously spin for the mutex, > we queue the spinners with an MCS lock such that only one thread spins > for the mutex at a time. Furthermore, the OSQ optimizations ensure that > spinners in the queue will stop waiting if it needs to reschedule. > > Now, we don't have to worry about multiple threads spinning on owner > at the same time, and if lock->owner is not NULL at this point, it likely > means another thread happens to obtain the lock in the fastpath. In this > case, it would make sense for the spinner to continue spinning as long > as the spinner doesn't need to schedule and the mutex owner is running. > > This patch changes this so that mutex_spin_on_owner() returns true when > the lock owner changes, which means a thread will only stop spinning > if it either needs to reschedule or if the lock owner is not running. > > We saw up to a 5% performance improvement in the fserver workload with > this patch. As pointed out, this fits in nicely with what we're doing with rwsems. Based on our recent discussions: > Signed-off-by: Jason Low Acked-by: Davidlohr Bueso -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/