On Thu, Oct 12, 2023 at 05:53:22PM +0800, Yajun Deng wrote: > > On 2023/10/12 17:23, David Hildenbrand wrote: > > On 10.10.23 04:31, Yajun Deng wrote: > > > > > > On 2023/10/8 16:57, Yajun Deng wrote: > > > > > > > > > > That looks wrong. if the page count would by pure luck be 0 > > > > > already for hotplugged memory, you wouldn't clear the reserved > > > > > flag. > > > > > > > > > > These changes make me a bit nervous. > > > > > > > > Is 'if (page_count(page) || PageReserved(page))' be safer? Or do I > > > > need to do something else? > > > > > > > > > > How about the following if statement? But it needs to add more patch > > > like v1 ([PATCH 2/4] mm: Introduce MEMINIT_LATE context). > > > > > > It'll be safer, but more complex. Please comment... > > > > > > if (context != MEMINIT_EARLY || (page_count(page) || > > > PageReserved(page)) { > > > > > > > Ideally we could make initialization only depend on the context, and not > > check for count or the reserved flag. > > > > This link is v1, > https://lore.kernel.org/all/20230922070923.355656-1-yajun.deng@xxxxxxxxx/ > > If we could make initialization only depend on the context, I'll modify it > based on v1. Although ~20% improvement looks impressive, this is only optimization of a fraction of the boot time, and realistically, how much 56 msec saves from the total boot time when you boot a machine with 190G of RAM? I still think the improvement does not justify the churn, added complexity and special casing of different code paths of initialization of struct pages. > @Mike, By the way, this code will cost more time: > > if (context == MEMINIT_HOTPLUG) > flags = INIT_PAGE_COUNT | INIT_PAGE_RESERVED; > __init_single_page(page, pfn, zone, nid, flags); > > > [ 0.014999] On node 0, zone DMA32: 31679 pages in unavailable ranges > [ 0.311560] ACPI: PM-Timer IO Port: 0x508 > > > This code will cost less time: > > __init_single_page(page, pfn, zone, nid, 0); > if (context == MEMINIT_HOTPLUG) { > init_page_count(page); > __SetPageReserved(page); > > [ 0.014299] On node 0, zone DMA32: 31679 pages in unavailable ranges > [ 0.250223] ACPI: PM-Timer IO Port: 0x508 > -- Sincerely yours, Mike.