From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.suse.de (mx2.suse.de [195.135.220.15]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id CF2152117FD4E for ; Mon, 29 Oct 2018 23:29:21 -0700 (PDT) Date: Tue, 30 Oct 2018 07:29:15 +0100 From: Michal Hocko Subject: Re: [PATCH v5 4/4] mm: Defer ZONE_DEVICE page initialization to the point where we init pgmap Message-ID: <20181030062915.GT32673@dhcp22.suse.cz> References: <20181017075257.GF18839@dhcp22.suse.cz> <971729e6-bcfe-a386-361b-d662951e69a7@linux.intel.com> <20181029141210.GJ32673@dhcp22.suse.cz> <84f09883c16608ddd2ba88103f43ec6a1c649e97.camel@linux.intel.com> <20181029163528.GL32673@dhcp22.suse.cz> <18dfc5a0db11650ff31433311da32c95e19944d9.camel@linux.intel.com> <20181029172415.GM32673@dhcp22.suse.cz> <8e7a4311a240b241822945c0bb4095c9ffe5a14d.camel@linux.intel.com> <20181029181827.GO32673@dhcp22.suse.cz> <3281f3044fa231bbc1b02d5c5efca3502a0d05a8.camel@linux.intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <3281f3044fa231bbc1b02d5c5efca3502a0d05a8.camel@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: linux-nvdimm-bounces@lists.01.org Sender: "Linux-nvdimm" To: Alexander Duyck Cc: Pasha Tatashin , osalvador@techadventures.net, linux-nvdimm , Dave Hansen , Linux Kernel Mailing List , Ingo Molnar , Linux MM , =?iso-8859-1?B?Suly9G1l?= Glisse , rppt@linux.vnet.ibm.com, Andrew Morton , "Kirill A. Shutemov" List-ID: On Mon 29-10-18 12:59:11, Alexander Duyck wrote: > On Mon, 2018-10-29 at 19:18 +0100, Michal Hocko wrote: [...] I will try to get to your other points later. > > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > > index 89d2a2ab3fe6..048e4cc72fdf 100644 > > --- a/mm/page_alloc.c > > +++ b/mm/page_alloc.c > > @@ -5474,8 +5474,8 @@ void __meminit memmap_init_zone(unsigned long size, int nid, unsigned long zone, > > * Honor reservation requested by the driver for this ZONE_DEVICE > > * memory > > */ > > - if (altmap && start_pfn == altmap->base_pfn) > > - start_pfn += altmap->reserve; > > + if (pgmap && pgmap->get_memmap) > > + start_pfn = pgmap->get_memmap(pgmap, start_pfn); > > > > for (pfn = start_pfn; pfn < end_pfn; pfn++) { > > /* > > > > [...] > > The only reason why I hadn't bothered with these bits is that I was > actually trying to leave this generic since I thought I had seen other > discussions about hotplug scenerios where memory may want to change > where the vmmemmap is initialized other than just the case of > ZONE_DEVICE pages. So I was thinking at some point we may see altmap > without the pgmap. I wanted to abuse altmap to allocate struct pages from the physical range to be added. In that case I would abstract the allocation/initialization part of pgmap into a more abstract type. Something trivially to be done without affecting end users of the hotplug API. [...] > > Anyway we have gone into details while the primary problem here was that > > the hotplug lock doesn't scale AFAIR. And my question was why cannot we > > pull move_pfn_range_to_zone and what has to be done to achieve that. > > That is a fundamental thing to address first. Then you can microptimize > > on top. > > Yes, the hotplug lock was part of the original issue. However that > starts to drift into the area I believe Oscar was working on as a part > of his patch set in encapsulating the move_pfn_range_to_zone and other > calls that were contained in the hotplug lock into their own functions. Well, I would really love to keep the external API as simple as possible. That means that we need arch_add_memory/add_pages and move_pfn_range_to_zone to associate pages with a zone. The hotplug lock should be preferably hidden from callers of those two and ideally it shouldn't be a global lock. We should be good with a range lock. > The patches Andrew pushed addressed the immediate issue so that now > systems with nvdimm/DAX memory can at least initialize quick enough > that systemd doesn't refuse to mount the root file system due to a > timeout. This is about the first time you actually mention that. I have re-read the cover letter and all changelogs of patches in this serious. Unless I have missed something there is nothing about real users hitting issues out there. nvdimm is still considered a toy because there is no real HW users can play with. And hence my complains about half baked solutions rushed in just to fix a performance regression. I can certainly understand that a pressing problem might justify to rush things a bit but this should be always carefuly justified. > The next patch set I have refactors things to reduce code and > allow us to reuse some of the hotplug code for the deferred page init, > https://lore.kernel.org/lkml/20181017235043.17213.92459.stgit@localhost.localdomain/ > . After that I was planning to work on dealing with the PageReserved > flag and trying to get that sorted out. > > I was hoping to wait until after Dan's HMM patches and Oscar's changes > had been sorted before I get into any further refactor of this specific > code. Yes there is quite a lot going on here. I would really appreciate if we all sit and actually try to come up with something robust rather than hack here and there. I haven't yet seen your follow up series completely so maybe you are indeed heading the correct direction. -- Michal Hocko SUSE Labs _______________________________________________ Linux-nvdimm mailing list Linux-nvdimm@lists.01.org https://lists.01.org/mailman/listinfo/linux-nvdimm