Received: by 2002:a05:6a10:6744:0:0:0:0 with SMTP id w4csp4895541pxu; Tue, 13 Oct 2020 09:33:51 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzL0MuImlgV9VQ+JowWnvPHa2Meo0jyy2ZPQZDv4EQoFosKzJwL29lUoUKHRGYbeHTxrvSM X-Received: by 2002:a17:906:f118:: with SMTP id gv24mr612917ejb.174.1602606831665; Tue, 13 Oct 2020 09:33:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1602606831; cv=none; d=google.com; s=arc-20160816; b=Mah3t69aFkkPr5sZwu2bzEfCCwGc5kzWSwZZLFmjiuEQOvwdqrPQhNu9FNombRH2wD 0UWiCdemzPzsY9MwceIbHG5pdiTH4wouDWGBj0V15Fk26yhb/2evL04c+18P5lqQIRAA ghxRlgN8STFY1txn45HA61cAUHGUQBX6t3KWPrjOyrmM+jKZ3RVNoiWomZEOLMX556oL 9TWr56ekb+0THoP4/MzJtdlzXT29z7RhVfydIfO/2ZBDndikQOu7YuYa7TVEiq5zqGiX Cn9s/RRurq+e/MrnfTloN5cwSjgU+uTm+mjnDRI5qedPXsDpeVA8db1KcrklBOEUVhrD HD+w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:user-agent:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :dkim-signature; bh=akz97Nl+IxgVygciBQstiiS9v+v6tNAa1jQ97vPRDuI=; b=meV/To6LLWQS/L2Tse1UnRBWFIuxzzqd69Uz9YqItL1hYsIB82Y86TcZOrLPKajWap mrLyHw9okF29RDqYkzb9BzqdepA3itToax25YX62pVSADYc8xYx1+UqoPKMjNrQntzLk tHjvjr0EnXug+JGJa0rhOAOStA4NZEblGLonM7a9WYjnNKiic702fWgvUSu7UYyDync+ 2UGpSzkDyPhA/acScumV6z0C12JYYIerDK0tAqnaxaSRmtQB4iMEQl6E+vwUg76aokxG m8VzR4Obo5d34uSUwCeHBBJW9EB/BeQS8qMC4W9ZwKTHbgo0JCBqZjo9A17Hzi2nKM5L f4Aw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=OpVE4nZc; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id b11si130378edq.410.2020.10.13.09.33.28; Tue, 13 Oct 2020 09:33:51 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=OpVE4nZc; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728456AbgJMNRq (ORCPT + 99 others); Tue, 13 Oct 2020 09:17:46 -0400 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:53924 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726951AbgJMNRp (ORCPT ); Tue, 13 Oct 2020 09:17:45 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1602595063; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=akz97Nl+IxgVygciBQstiiS9v+v6tNAa1jQ97vPRDuI=; b=OpVE4nZccjYk7jNp8jmHxrJndwJN24NjPdQu3QcTvb6lhjCwFVBIf3Oy26MVBcr1Hquj2m 0gJqZOq+m9mdHgUNxpiKbqhypLDngfkquTfgZ1ImswWSf1D/p0JjWLVna78SoQUrqLPyeW N2gSYmMS1z4PMgSGdeRFlNn3d9m5FTo= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-408-jSpVPhPkP9m3OhnZ_viipA-1; Tue, 13 Oct 2020 09:17:42 -0400 X-MC-Unique: jSpVPhPkP9m3OhnZ_viipA-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 129936408B; Tue, 13 Oct 2020 13:17:40 +0000 (UTC) Received: from localhost (ovpn-12-47.pek2.redhat.com [10.72.12.47]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C85DD1002C00; Tue, 13 Oct 2020 13:17:38 +0000 (UTC) Date: Tue, 13 Oct 2020 21:17:35 +0800 From: "bhe@redhat.com" To: Rahul Gopakumar Cc: "linux-mm@kvack.org" , "linux-kernel@vger.kernel.org" , "akpm@linux-foundation.org" , "natechancellor@gmail.com" , "ndesaulniers@google.com" , "clang-built-linux@googlegroups.com" , "rostedt@goodmis.org" , Rajender M , Yiu Cho Lau , Peter Jonasson , Venkatesh Rajaram Subject: Re: Performance regressions in "boot_time" tests in Linux 5.8 Kernel Message-ID: <20201013131735.GL25604@MiWiFi-R3L-srv> References: <20201010061124.GE25604@MiWiFi-R3L-srv> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.10.1 (2018-07-13) X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Rahul, On 10/12/20 at 05:21pm, Rahul Gopakumar wrote: > Hi Baoquan, > > Attached collected dmesg logs for with and without > commit after adding memblock=debug to kernel cmdline. Can you test below draft patch and see if it works for you? From a2ea6caef3c73ad9efb2dd2b48039065fe430bb2 Mon Sep 17 00:00:00 2001 From: Baoquan He Date: Tue, 13 Oct 2020 20:05:30 +0800 Subject: [PATCH] mm: make memmap defer init only take effect per zone Deferred struct page init is designed to work per zone. However since commit 73a6e474cb376 ("mm: memmap_init: iterate over memblock regions rather that check each PFN"), the handling is mistakenly done in all memory ranges inside one zone. Especially in those unmovable zones of multiple nodes, memblock reservation split them into many memory ranges. This makes initialized struct page more than expected in early stage, then increases much boot time. Let's fix it to make the memmap defer init handled in zone wide, but not in memory range of one zone. Signed-off-by: Baoquan He --- arch/ia64/mm/init.c | 4 ++-- include/linux/mm.h | 5 +++-- mm/memory_hotplug.c | 2 +- mm/page_alloc.c | 6 +++--- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c index ef12e097f318..27ca549ff47e 100644 --- a/arch/ia64/mm/init.c +++ b/arch/ia64/mm/init.c @@ -536,7 +536,7 @@ virtual_memmap_init(u64 start, u64 end, void *arg) if (map_start < map_end) memmap_init_zone((unsigned long)(map_end - map_start), - args->nid, args->zone, page_to_pfn(map_start), + args->nid, args->zone, page_to_pfn(map_start), page_to_pfn(map_end), MEMINIT_EARLY, NULL, MIGRATE_MOVABLE); return 0; } @@ -546,7 +546,7 @@ memmap_init (unsigned long size, int nid, unsigned long zone, unsigned long start_pfn) { if (!vmem_map) { - memmap_init_zone(size, nid, zone, start_pfn, + memmap_init_zone(size, nid, zone, start_pfn, start_pfn + size, MEMINIT_EARLY, NULL, MIGRATE_MOVABLE); } else { struct page *start; diff --git a/include/linux/mm.h b/include/linux/mm.h index ef360fe70aaf..5f9fc61d5be2 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -2439,8 +2439,9 @@ extern int __meminit __early_pfn_to_nid(unsigned long pfn, #endif extern void set_dma_reserve(unsigned long new_dma_reserve); -extern void memmap_init_zone(unsigned long, int, unsigned long, unsigned long, - enum meminit_context, struct vmem_altmap *, int migratetype); +extern void memmap_init_zone(unsigned long, int, unsigned long, + unsigned long, unsigned long, enum meminit_context, + struct vmem_altmap *, int migratetype); extern void setup_per_zone_wmarks(void); extern int __meminit init_per_zone_wmark_min(void); extern void mem_init(void); diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index b44d4c7ba73b..f9a37e6abc1c 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -732,7 +732,7 @@ void __ref move_pfn_range_to_zone(struct zone *zone, unsigned long start_pfn, * expects the zone spans the pfn range. All the pages in the range * are reserved so nobody should be touching them so we should be safe */ - memmap_init_zone(nr_pages, nid, zone_idx(zone), start_pfn, + memmap_init_zone(nr_pages, nid, zone_idx(zone), start_pfn, 0, MEMINIT_HOTPLUG, altmap, migratetype); set_zone_contiguous(zone); diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 2ebf9ddafa3a..e8b19fdd18ec 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -6044,7 +6044,7 @@ overlap_memmap_init(unsigned long zone, unsigned long *pfn) * zone stats (e.g., nr_isolate_pageblock) are touched. */ void __meminit memmap_init_zone(unsigned long size, int nid, unsigned long zone, - unsigned long start_pfn, + unsigned long start_pfn, unsigned long zone_end_pfn, enum meminit_context context, struct vmem_altmap *altmap, int migratetype) { @@ -6080,7 +6080,7 @@ void __meminit memmap_init_zone(unsigned long size, int nid, unsigned long zone, if (context == MEMINIT_EARLY) { if (overlap_memmap_init(zone, &pfn)) continue; - if (defer_init(nid, pfn, end_pfn)) + if (defer_init(nid, pfn, zone_end_pfn)) break; } @@ -6194,7 +6194,7 @@ void __meminit __weak memmap_init(unsigned long size, int nid, if (end_pfn > start_pfn) { size = end_pfn - start_pfn; - memmap_init_zone(size, nid, zone, start_pfn, + memmap_init_zone(size, nid, zone, start_pfn, range_end_pfn, MEMINIT_EARLY, NULL, MIGRATE_MOVABLE); } } -- 2.17.2