From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1161171AbbBCVEg (ORCPT ); Tue, 3 Feb 2015 16:04:36 -0500 Received: from g4t3427.houston.hp.com ([15.201.208.55]:46705 "EHLO g4t3427.houston.hp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1161026AbbBCVEf (ORCPT ); Tue, 3 Feb 2015 16:04:35 -0500 Message-ID: <1422997472.2368.10.camel@j-VirtualBox> Subject: Re: [PATCH 4/5] locking/rwsem: Avoid deceiving lock spinners From: Jason Low To: Tim Chen Cc: Davidlohr Bueso , Peter Zijlstra , Ingo Molnar , "Paul E. McKenney" , Michel Lespinasse , linux-kernel@vger.kernel.org, jason.low2@hp.com Date: Tue, 03 Feb 2015 13:04:32 -0800 In-Reply-To: <1422992616.9530.78.camel@schen9-desk2.jf.intel.com> References: <1422609267-15102-1-git-send-email-dave@stgolabs.net> <1422609267-15102-5-git-send-email-dave@stgolabs.net> <1422669098.9530.33.camel@schen9-desk2.jf.intel.com> <1422671289.28351.1.camel@stgolabs.net> <1422983812.9530.43.camel@schen9-desk2.jf.intel.com> <1422986041.2368.3.camel@j-VirtualBox> <1422992616.9530.78.camel@schen9-desk2.jf.intel.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.2.3-0ubuntu6 Content-Transfer-Encoding: 7bit Mime-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 2015-02-03 at 11:43 -0800, Tim Chen wrote: > On Tue, 2015-02-03 at 09:54 -0800, Jason Low wrote: > > On Tue, 2015-02-03 at 09:16 -0800, Tim Chen wrote: > > > > > > > > > > > > + if (READ_ONCE(sem->owner)) > > > > > > + return true; /* new owner, continue spinning */ > > > > > > + > > > > > > > > > > Do you have some comparison data of whether it is more advantageous > > > > > to continue spinning when owner changes? After the above change, > > > > > rwsem will behave more like a spin lock for write lock and > > > > > will keep spinning when the lock changes ownership. > > > > > > > > But recall we still abort when need_resched, so the spinning isn't > > > > infinite. Never has been. > > > > > > > > > Now during heavy > > > > > lock contention, if we don't continue spinning and sleep, we may use the > > > > > clock cycles for actually running other threads. > > > > > > > > Under heavy contention, time spinning will force us to ultimately block > > > > anyway. > > > > > > The question is under heavy contention, if we are going to block anyway, > > > won't it be more advantageous not to continue spinning so we can use > > > the cycles for useful task? > > > > Hi Tim, > > > > Now that we have the OSQ logic, under heavy contention, there will still > > only be 1 thread that is spinning on owner at a time. > > That's true. We cannot have the lock grabbed by a new write > contender as any new writer contender of the lock will be > queued by the OSQ logic. Only the > thread doing the optimistic spin is attempting write lock. > In other word, switching of write owner of the rwsem to a new > owner cannot happen. Another thread can still obtain the write lock in the fast path though right? We try to obtain the write lock once before calling rwsem_down_write_failed().