From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753667AbXDFNWt (ORCPT ); Fri, 6 Apr 2007 09:22:49 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1753669AbXDFNWs (ORCPT ); Fri, 6 Apr 2007 09:22:48 -0400 Received: from amsfep16-int.chello.nl ([62.179.120.11]:39204 "EHLO amsfep16-int.chello.nl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753667AbXDFNWs (ORCPT ); Fri, 6 Apr 2007 09:22:48 -0400 Subject: Re: Shared futexes (was [PATCH] FUTEX : new PRIVATE futexes) From: Peter Zijlstra To: Nick Piggin Cc: Hugh Dickins , Eric Dumazet , Ulrich Drepper , Andrew Morton , Dave Jones , Ingo Molnar , Andi Kleen , Ravikiran G Thirumalai , "Shai Fultheim (Shai@scalex86.org)" , pravin b shelar , linux-kernel@vger.kernel.org, "Pierre.Peiffer" In-Reply-To: <461647F5.5040206@yahoo.com.au> References: <20060808070708.GA3931@localhost.localdomain> <200608090826.28249.dada1@cosmosbay.com> <200608090843.52893.dada1@cosmosbay.com> <200703152010.35614.dada1@cosmosbay.com> <20070405194942.1414c030.dada1@cosmosbay.com> <1175862369.6483.173.camel@twins> <461647F5.5040206@yahoo.com.au> Content-Type: text/plain Date: Fri, 06 Apr 2007 15:22:44 +0200 Message-Id: <1175865764.6483.190.camel@twins> Mime-Version: 1.0 X-Mailer: Evolution 2.10.0 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org On Fri, 2007-04-06 at 23:15 +1000, Nick Piggin wrote: > Hugh Dickins wrote: > > On Fri, 6 Apr 2007, Peter Zijlstra wrote: > > > >>some thoughts on shared futexes; > >> > >>Could we get rid of the mmap_sem on the shared futexes in the following > >>manner: > > I'd imagine shared futexes would be much less common than private for > threaded programs... I'd say we should reevaluate things once we have > private futexes, and malloc/free stop hammering mmap_sem so hard... Indeed, private futexes are by far the most common. > >> - get a page using pfn_to_page (skipping VM_PFNMAP) > >> - get the futex key from page->mapping->host and page->index > >> and offset from addr % PAGE_SIZE. > >> > >>or given a key: > >> > >> - lookup the page from key.shared.inode->i_mapping by key.shared.pgoff > >> possibly loading the page using mapping->a_ops->readpage(). > > For shared futexes, wouldn't i_mapping be worse, because you'd be > ping-ponging the tree_lock between processes, rather than have each > use their own mmap_sem? Your lockless pagecache work would solve most of that, no? > That also only helps for the wakeup case too, doesn't it? You have > to use the vmas to find out which inode to use to do the wait, I think? > (unless you introduce a new shared futex API). one could do something like this: struct address_space *mapping = page_mapping(page); if (!mapping || mapping == &swapper_space) do_private_futex(); else do_shared_futex(mapping->host, page->index, addr % PAGE_SIZE); But alas, it seems I overlooked that the mmap_sem also protects the page tables as pointed out by Hugh, so this is all in fain it seems. A well.