Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756970Ab3IAIcm (ORCPT ); Sun, 1 Sep 2013 04:32:42 -0400 Received: from mail-qa0-f42.google.com ([209.85.216.42]:46411 "EHLO mail-qa0-f42.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755664Ab3IAIch (ORCPT ); Sun, 1 Sep 2013 04:32:37 -0400 MIME-Version: 1.0 In-Reply-To: <1377872041-390-1-git-send-email-jbacik@fusionio.com> References: <1377872041-390-1-git-send-email-jbacik@fusionio.com> Date: Sun, 1 Sep 2013 01:32:36 -0700 Message-ID: Subject: Re: [PATCH] rwsem: add rwsem_is_contended From: Michel Lespinasse To: Josef Bacik Cc: linux-btrfs@vger.kernel.org, mingo@elte.hu, akpm@linux-foundation.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset=ISO-8859-1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2081 Lines: 43 Hi Josef, On Fri, Aug 30, 2013 at 7:14 AM, Josef Bacik wrote: > Btrfs uses an rwsem to control access to its extent tree. Threads will hold a > read lock on this rwsem while they scan the extent tree, and if need_resched() > they will drop the lock and schedule. The transaction commit needs to take a > write lock for this rwsem for a very short period to switch out the commit > roots. If there are a lot of threads doing this caching operation we can starve > out the committers which slows everybody out. To address this we want to add > this functionality to see if our rwsem has anybody waiting to take a write lock > so we can drop it and schedule for a bit to allow the commit to continue. > Thanks, > > Signed-off-by: Josef Bacik FYI, I once tried to introduce something like this before, but my use case was pretty weak so it was not accepted at the time. I don't think there were any objections to the API itself though, and I think it's potentially a good idea if you use case justifies it. Two comments: - Note that there are two rwsem implementations - if you are going to add functionality to rwsem.h you want to add the same functionality in rwsem-spinlock.h as well. - I would prefer if you could avoid taking the wait_lock in your rwsem.h implementation. In your use case (read lock is known to be held), checking for sem->count < 0 would be sufficient to indicate a writer is queued (or getting onto the queue). In the general case, some architectures have the various values set up so that RWSEM_WAITING_BIAS != RWSEM_ACTIVE_WRITE_BIAS - for these architectures at least, you can check for waiters by looking if the lowest bit of RWSEM_WAITING_BIAS is set in sem->count. -- Michel "Walken" Lespinasse A program is never fully debugged until the last user dies. -- 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/