From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753507AbbDOMQE (ORCPT ); Wed, 15 Apr 2015 08:16:04 -0400 Received: from cantor2.suse.de ([195.135.220.15]:48477 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752261AbbDOMP7 (ORCPT ); Wed, 15 Apr 2015 08:15:59 -0400 Date: Wed, 15 Apr 2015 13:15:53 +0100 From: Mel Gorman To: Peter Zijlstra Cc: Linux-MM , Rik van Riel , Johannes Weiner , Dave Hansen , Andi Kleen , LKML Subject: Re: [PATCH 3/4] mm: Gather more PFNs before sending a TLB to flush unmapped pages Message-ID: <20150415121553.GD14842@suse.de> References: <1429094576-5877-1-git-send-email-mgorman@suse.de> <1429094576-5877-4-git-send-email-mgorman@suse.de> <20150415114220.GG17717@twins.programming.kicks-ass.net> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Disposition: inline In-Reply-To: <20150415114220.GG17717@twins.programming.kicks-ass.net> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Apr 15, 2015 at 01:42:20PM +0200, Peter Zijlstra wrote: > On Wed, Apr 15, 2015 at 11:42:55AM +0100, Mel Gorman wrote: > > +/* > > + * Use a page to store as many PFNs as possible for batch unmapping. Adjusting > > + * this trades memory usage for number of IPIs sent > > + */ > > +#define BATCH_TLBFLUSH_SIZE \ > > + ((PAGE_SIZE - sizeof(struct cpumask) - sizeof(unsigned long)) / sizeof(unsigned long)) > > > > /* Track pages that require TLB flushes */ > > struct unmap_batch { > > + /* Update BATCH_TLBFLUSH_SIZE when adjusting this structure */ > > struct cpumask cpumask; > > unsigned long nr_pages; > > unsigned long pfns[BATCH_TLBFLUSH_SIZE]; > > The alternative is something like: > > struct unmap_batch { > struct cpumask cpumask; > unsigned long nr_pages; > unsigned long pfnsp[0]; > }; > > #define BATCH_TLBFLUSH_SIZE ((PAGE_SIZE - sizeof(struct unmap_batch)) / sizeof(unsigned long)) > > and unconditionally allocate 1 page. This saves you from having to worry > about the layout of struct unmap_batch. True but then I need to calculate the size of the real array so it's similar in terms of readability. The plus would be that if the structure changes then the size calculation is not changed but then the allocation site and the size calculation must be kept in sync. I did not see a clear win of one approach over the other so flipped a coin. -- Mel Gorman SUSE Labs From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wi0-f175.google.com (mail-wi0-f175.google.com [209.85.212.175]) by kanga.kvack.org (Postfix) with ESMTP id D894A6B0038 for ; Wed, 15 Apr 2015 08:16:00 -0400 (EDT) Received: by widdi4 with SMTP id di4so152035053wid.0 for ; Wed, 15 Apr 2015 05:16:00 -0700 (PDT) Received: from mx2.suse.de (cantor2.suse.de. [195.135.220.15]) by mx.google.com with ESMTPS id y5si9668174wix.98.2015.04.15.05.15.58 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 15 Apr 2015 05:15:59 -0700 (PDT) Date: Wed, 15 Apr 2015 13:15:53 +0100 From: Mel Gorman Subject: Re: [PATCH 3/4] mm: Gather more PFNs before sending a TLB to flush unmapped pages Message-ID: <20150415121553.GD14842@suse.de> References: <1429094576-5877-1-git-send-email-mgorman@suse.de> <1429094576-5877-4-git-send-email-mgorman@suse.de> <20150415114220.GG17717@twins.programming.kicks-ass.net> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Disposition: inline In-Reply-To: <20150415114220.GG17717@twins.programming.kicks-ass.net> Sender: owner-linux-mm@kvack.org List-ID: To: Peter Zijlstra Cc: Linux-MM , Rik van Riel , Johannes Weiner , Dave Hansen , Andi Kleen , LKML On Wed, Apr 15, 2015 at 01:42:20PM +0200, Peter Zijlstra wrote: > On Wed, Apr 15, 2015 at 11:42:55AM +0100, Mel Gorman wrote: > > +/* > > + * Use a page to store as many PFNs as possible for batch unmapping. Adjusting > > + * this trades memory usage for number of IPIs sent > > + */ > > +#define BATCH_TLBFLUSH_SIZE \ > > + ((PAGE_SIZE - sizeof(struct cpumask) - sizeof(unsigned long)) / sizeof(unsigned long)) > > > > /* Track pages that require TLB flushes */ > > struct unmap_batch { > > + /* Update BATCH_TLBFLUSH_SIZE when adjusting this structure */ > > struct cpumask cpumask; > > unsigned long nr_pages; > > unsigned long pfns[BATCH_TLBFLUSH_SIZE]; > > The alternative is something like: > > struct unmap_batch { > struct cpumask cpumask; > unsigned long nr_pages; > unsigned long pfnsp[0]; > }; > > #define BATCH_TLBFLUSH_SIZE ((PAGE_SIZE - sizeof(struct unmap_batch)) / sizeof(unsigned long)) > > and unconditionally allocate 1 page. This saves you from having to worry > about the layout of struct unmap_batch. True but then I need to calculate the size of the real array so it's similar in terms of readability. The plus would be that if the structure changes then the size calculation is not changed but then the allocation site and the size calculation must be kept in sync. I did not see a clear win of one approach over the other so flipped a coin. -- Mel Gorman SUSE Labs -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org