From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf0-f198.google.com (mail-pf0-f198.google.com [209.85.192.198]) by kanga.kvack.org (Postfix) with ESMTP id 7BE586B031A for ; Tue, 5 Dec 2017 21:25:23 -0500 (EST) Received: by mail-pf0-f198.google.com with SMTP id j3so1829724pfh.16 for ; Tue, 05 Dec 2017 18:25:23 -0800 (PST) Received: from bombadil.infradead.org (bombadil.infradead.org. [65.50.211.133]) by mx.google.com with ESMTPS id q127si995274pga.753.2017.12.05.18.25.22 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Dec 2017 18:25:22 -0800 (PST) Received: from willy by bombadil.infradead.org with local (Exim 4.87 #1 (Red Hat Linux)) id 1eMPOj-0001Ks-Eh for linux-mm@kvack.org; Wed, 06 Dec 2017 02:25:21 +0000 Date: Tue, 5 Dec 2017 18:25:21 -0800 From: Matthew Wilcox Subject: [PATCH] Get 7% more pages in a pagevec Message-ID: <20171206022521.GM26021@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Sender: owner-linux-mm@kvack.org List-ID: To: linux-mm@kvack.org 7% sounds so much more impressive than one more, right? I just noticed that we *could* do this when I was looking at pagevec.h. I have no idea how much this will affect performance. Probably minimally, but I'm hoping to see a report from 0day as a result of posting this patch ;-) --- 8< --- From: Matthew Wilcox We don't have to use an entire 'long' for the number of elements in the pagevec; we know it's a number between 0 and 14 (now 15). So we can store it in a char, and then the bool packs next to it and we still have two or six bytes of padding for more elements in the header. That gives us space to cram in an extra page. Signed-off-by: Matthew Wilcox diff --git a/include/linux/pagevec.h b/include/linux/pagevec.h index 5fb6580f7f23..6dc456ac6136 100644 --- a/include/linux/pagevec.h +++ b/include/linux/pagevec.h @@ -9,14 +9,14 @@ #ifndef _LINUX_PAGEVEC_H #define _LINUX_PAGEVEC_H -/* 14 pointers + two long's align the pagevec structure to a power of two */ -#define PAGEVEC_SIZE 14 +/* 15 pointers + header align the pagevec structure to a power of two */ +#define PAGEVEC_SIZE 15 struct page; struct address_space; struct pagevec { - unsigned long nr; + unsigned char nr; bool percpu_pvec_drained; struct page *pages[PAGEVEC_SIZE]; }; -- 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 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr0-f200.google.com (mail-wr0-f200.google.com [209.85.128.200]) by kanga.kvack.org (Postfix) with ESMTP id CBAA16B026B for ; Wed, 6 Dec 2017 07:38:52 -0500 (EST) Received: by mail-wr0-f200.google.com with SMTP id v69so2039629wrb.3 for ; Wed, 06 Dec 2017 04:38:52 -0800 (PST) Received: from mx2.suse.de (mx2.suse.de. [195.135.220.15]) by mx.google.com with ESMTPS id o63si1647289edb.23.2017.12.06.04.38.43 for (version=TLS1 cipher=AES128-SHA bits=128/128); Wed, 06 Dec 2017 04:38:43 -0800 (PST) Date: Wed, 6 Dec 2017 13:38:42 +0100 From: Michal Hocko Subject: Re: [PATCH] Get 7% more pages in a pagevec Message-ID: <20171206123842.GB7515@dhcp22.suse.cz> References: <20171206022521.GM26021@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20171206022521.GM26021@bombadil.infradead.org> Sender: owner-linux-mm@kvack.org List-ID: To: Matthew Wilcox Cc: linux-mm@kvack.org On Tue 05-12-17 18:25:21, Matthew Wilcox wrote: [...] > From: Matthew Wilcox > > We don't have to use an entire 'long' for the number of elements in the > pagevec; we know it's a number between 0 and 14 (now 15). So we can > store it in a char, and then the bool packs next to it and we still have > two or six bytes of padding for more elements in the header. That gives > us space to cram in an extra page. > > Signed-off-by: Matthew Wilcox > > diff --git a/include/linux/pagevec.h b/include/linux/pagevec.h > index 5fb6580f7f23..6dc456ac6136 100644 > --- a/include/linux/pagevec.h > +++ b/include/linux/pagevec.h > @@ -9,14 +9,14 @@ > #ifndef _LINUX_PAGEVEC_H > #define _LINUX_PAGEVEC_H > > -/* 14 pointers + two long's align the pagevec structure to a power of two */ > -#define PAGEVEC_SIZE 14 > +/* 15 pointers + header align the pagevec structure to a power of two */ > +#define PAGEVEC_SIZE 15 And now you have ruined the ultimate constant of the whole MM :p But seriously, I have completely missed that pagevec has such a bad layout. > struct page; > struct address_space; > > struct pagevec { > - unsigned long nr; > + unsigned char nr; > bool percpu_pvec_drained; > struct page *pages[PAGEVEC_SIZE]; > }; Anyway the change looks good to me. Acked-by: Michal Hocko -- Michal Hocko 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 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf0-f198.google.com (mail-pf0-f198.google.com [209.85.192.198]) by kanga.kvack.org (Postfix) with ESMTP id BB9FC6B0069 for ; Wed, 6 Dec 2017 09:15:37 -0500 (EST) Received: by mail-pf0-f198.google.com with SMTP id m9so2875600pff.0 for ; Wed, 06 Dec 2017 06:15:37 -0800 (PST) Received: from bombadil.infradead.org (bombadil.infradead.org. [65.50.211.133]) by mx.google.com with ESMTPS id e9si647494plk.690.2017.12.06.06.15.36 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 06 Dec 2017 06:15:36 -0800 (PST) Date: Wed, 6 Dec 2017 06:15:35 -0800 From: Matthew Wilcox Subject: Re: [PATCH] Get 7% more pages in a pagevec Message-ID: <20171206141535.GC32044@bombadil.infradead.org> References: <20171206022521.GM26021@bombadil.infradead.org> <20171206123842.GB7515@dhcp22.suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20171206123842.GB7515@dhcp22.suse.cz> Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko Cc: linux-mm@kvack.org On Wed, Dec 06, 2017 at 01:38:42PM +0100, Michal Hocko wrote: > On Tue 05-12-17 18:25:21, Matthew Wilcox wrote: > > -/* 14 pointers + two long's align the pagevec structure to a power of two */ > > -#define PAGEVEC_SIZE 14 > > +/* 15 pointers + header align the pagevec structure to a power of two */ > > +#define PAGEVEC_SIZE 15 > > And now you have ruined the ultimate constant of the whole MM :p > But seriously, I have completely missed that pagevec has such a bad > layout. It's fun to go back into the historical tree and see why. First it was two 'int's and an array of 16 pointers. Marcelo noticed that was three cachelines instead of two, so he shrank it to two shorts and an array of 15 pointers: https://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.git/commit/include/linux/pagevec.h?id=afead7df5a05118052a238c54285e7119da65831 But then he found out that Pentium 2 and Pentium Pro sucked at 16-bit loads, so he changed it to two longs and an array of 14 pointers: https://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.git/commit/include/linux/pagevec.h?id=6140f8a54db42320b1d05ce2680b5619210b88ad I wonder what would have happened if he had benchmarked it with 'char' instead of 'short'. I think I have a Pentium 2 in the basement somewhere; perhaps I'll drag it out and fire it up. > Acked-by: Michal Hocko Thanks! -- 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 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f69.google.com (mail-wm0-f69.google.com [74.125.82.69]) by kanga.kvack.org (Postfix) with ESMTP id E73296B025E for ; Wed, 6 Dec 2017 09:23:30 -0500 (EST) Received: by mail-wm0-f69.google.com with SMTP id c82so1956551wme.8 for ; Wed, 06 Dec 2017 06:23:30 -0800 (PST) Received: from mx2.suse.de (mx2.suse.de. [195.135.220.15]) by mx.google.com with ESMTPS id a56si2383696edd.224.2017.12.06.06.23.29 for (version=TLS1 cipher=AES128-SHA bits=128/128); Wed, 06 Dec 2017 06:23:29 -0800 (PST) Date: Wed, 6 Dec 2017 15:23:29 +0100 From: Michal Hocko Subject: Re: [PATCH] Get 7% more pages in a pagevec Message-ID: <20171206142329.GF7515@dhcp22.suse.cz> References: <20171206022521.GM26021@bombadil.infradead.org> <20171206123842.GB7515@dhcp22.suse.cz> <20171206141535.GC32044@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20171206141535.GC32044@bombadil.infradead.org> Sender: owner-linux-mm@kvack.org List-ID: To: Matthew Wilcox Cc: linux-mm@kvack.org On Wed 06-12-17 06:15:35, Matthew Wilcox wrote: > On Wed, Dec 06, 2017 at 01:38:42PM +0100, Michal Hocko wrote: > > On Tue 05-12-17 18:25:21, Matthew Wilcox wrote: > > > -/* 14 pointers + two long's align the pagevec structure to a power of two */ > > > -#define PAGEVEC_SIZE 14 > > > +/* 15 pointers + header align the pagevec structure to a power of two */ > > > +#define PAGEVEC_SIZE 15 > > > > And now you have ruined the ultimate constant of the whole MM :p > > But seriously, I have completely missed that pagevec has such a bad > > layout. > > It's fun to go back into the historical tree and see why. > > First it was two 'int's and an array of 16 pointers. Marcelo noticed that > was three cachelines instead of two, so he shrank it to two shorts and > an array of 15 pointers: > > https://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.git/commit/include/linux/pagevec.h?id=afead7df5a05118052a238c54285e7119da65831 > > But then he found out that Pentium 2 and Pentium Pro sucked at 16-bit loads, > so he changed it to two longs and an array of 14 pointers: > > https://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.git/commit/include/linux/pagevec.h?id=6140f8a54db42320b1d05ce2680b5619210b88ad Yeah, i've done that exercise several times because 14 is just _strange_. I always had that feeling that we were trying to be too clever for minor things while larger ones just got unnotices... > I wonder what would have happened if he had benchmarked it with 'char' > instead of 'short'. I think I have a Pentium 2 in the basement somewhere; > perhaps I'll drag it out and fire it up. > > > Acked-by: Michal Hocko > > Thanks! -- Michal Hocko 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