From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id D66DBC5478C for ; Mon, 26 Feb 2024 17:04:41 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 52262440184; Mon, 26 Feb 2024 12:04:41 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 4D2B244017F; Mon, 26 Feb 2024 12:04:41 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 39AC2440184; Mon, 26 Feb 2024 12:04:41 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 2AB2D44017F for ; Mon, 26 Feb 2024 12:04:41 -0500 (EST) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id E8B0AC08A9 for ; Mon, 26 Feb 2024 17:04:40 +0000 (UTC) X-FDA: 81834579120.19.9BAA71D Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by imf03.hostedemail.com (Postfix) with ESMTP id BBE072002B for ; Mon, 26 Feb 2024 17:04:36 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf03.hostedemail.com: domain of "SRS0=nkCE=KD=goodmis.org=rostedt@kernel.org" designates 145.40.73.55 as permitted sender) smtp.mailfrom="SRS0=nkCE=KD=goodmis.org=rostedt@kernel.org" ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1708967077; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=GrNF/QzEwUHRlDJPYHfli88FEZZDml/FSO7w8vbl0Uc=; b=IkDLAu/OeSip6Pb1boW9DaGREY5ovJMICwdUcaKyOWBFP/gPdFJQzFjWSx5qQlUTkT4PYs LmUhSx894z/zv/8F1HGCvH5rtszZq2uqzX7imVyzSYPJ+iiOWXeO4FyLsaxOJ4eoOecTlS O0wbYlHvB7xtY3GlPeWFDDCc4QP5nUg= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf03.hostedemail.com: domain of "SRS0=nkCE=KD=goodmis.org=rostedt@kernel.org" designates 145.40.73.55 as permitted sender) smtp.mailfrom="SRS0=nkCE=KD=goodmis.org=rostedt@kernel.org" ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1708967077; a=rsa-sha256; cv=none; b=wGHYO84HDFUDNOIISg4G4ccvJ2sno850wl6MVu7w1cNJ+vwXAuyhl6Re7veQAEzOAIY4LX 2ui013kDtieIxNG1McEUzD9jLTo1I8/WFSyo5lHjOGgoBvk5ZWeis/3pvxRLRIJV0v6HnV NyCWGbYyeNmzmjN5NOF5jiwxRYJTDcE= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id 0CA64CE17B2; Mon, 26 Feb 2024 17:04:32 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2875AC433F1; Mon, 26 Feb 2024 17:04:30 +0000 (UTC) Date: Mon, 26 Feb 2024 12:06:29 -0500 From: Steven Rostedt To: Richard Chang Cc: mhiramat@kernel.org, mathieu.desnoyers@efficios.com, akpm@linux-foundation.org, liumartin@google.com, surenb@google.com, minchan@kernel.org, linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org, linux-mm@kvack.org Subject: Re: [PATCH] mm: add alloc_contig_migrate_range allocation statistics Message-ID: <20240226120629.0c371252@gandalf.local.home> In-Reply-To: <20240226100045.2083962-1-richardycc@google.com> References: <20240226100045.2083962-1-richardycc@google.com> X-Mailer: Claws Mail 3.19.1 (GTK+ 2.24.33; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: BBE072002B X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: 47e7d8xaofyczn8f6a83hzgoi9w1tzi3 X-HE-Tag: 1708967076-498041 X-HE-Meta: U2FsdGVkX18jzNmQ83tceL7x0wQ1pgIQ8dUlkJinUVEaW4dAI2zvQQ+n9vNJSbyctygBwMKVHTE2XA5qXIRYE8TD5abJx27YwOXhDr3bdn/KDAoHAnAFwQfzarspWrsIHTGpMDxsSox0yqA2ptI2NWi5+lUPKqA/ZL+RkZBAfD4AgEWiY/GrYl2uuYrn8h5qnnvOdFEwD0vUnvh/nHXLl+bO74NPAE1TnK1cRRea6v7tR499oA/Id5Aisbtxs5kGvUGajHRRQOD4LIJVn6O6VsHQ5ONWC4J1OA4nbkdcYQH7t89RebdUQiOaowisB/3XsZXVNlLsUMQAYDUgwGKh3yCclRLcB2+1tjRXotxBZ89YVDPdgBaEKuhzxqP/LQ5Z1XqHTwqnaq9Y3GrDIyruqmnfTuVSBODVc3/je0UXL+hebuDrWl32PZjGwh/7nqcNKoOKugQKI3bNF9k5SbSR+/+Rr89HK4Fh9hYwXHO5ITnGKPDiMtJoP8jxwn8I5uGU2udpNOB3mKPIYAp5d7s6xmkVi0aqdR3s4VaJ6sPGMyOcBtdPHuflPp7ffn5CmTKw3AsU6olTNzK8vgSyVYrisU1WEPDPXCOrZNesjytOrjWiKrk2UR0ST6i+KSOZ/jV4kGthlMaqEb5AX4PFUwJF9TTVJjH/RENEqHF6DWetpZeaSMrK5Y89lqk0iHRkJ5DMrRpzmFpdScpAiSOAVUVCllIlkjGqmUSO8S+DhangsWy6IOvMY8e981DuDLJx+Nqd6/jvl02H7yUqCkPZE9STjaQ5QsyJRJ95OSSkJ5PHMnlzq/5fvClGaFZdDBIKWInYDVHeStWDrNHJg8Nstb0hYKKy4jQOkBNU/fCgFMtBdq5aBcDV8STMkFBQO+Gtwx1sAeccyGmXI64I/qFRBRybDqN/3PMDA/YAuYsExDjrFio5ul39+GdmrWg1v2JpacZMY9ooVtOQ9bKmxYietr8 4SLXnBmv HGykPE/qPVRGT6f0kdF9uud4AWfvKnNQtz1ZwjMXrG9YnuaZTyGdcwdDWwJq7ZkWgJnjPHYiRTmIEgvcYJyz+k0Pqb5i3i1SbNl0f7nyiq67gQxm1SON+vjK8jsnYc8FhtUzDg0PB8hZ0RCj+WNX0Y7wi9M7QWg5hKcd5cbR5N6xRYm3BTCjqC7VV8gPi2OmVnJnUBOi0qiKea8vMaB6WyYmvvp1PgHd+uthHKI5yhlA3BrxG0sdcG+VAdh/G860aJKzq5vN6f1iFbPioXdKPvr17YJ0N9tjHkvyLzos8dc305lRrBsXne0pwR1mkitBa7Eco X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Mon, 26 Feb 2024 10:00:15 +0000 Richard Chang wrote: > alloc_contig_migrate_range has every information to be able to > understand big contiguous allocation latency. For example, how many > pages are migrated, how many times they were needed to unmap from > page tables. > > This patch adds the trace event to collect the allocation statistics. > In the field, it was quite useful to understand CMA allocation > latency. > > Signed-off-by: Richard Chang > --- > include/trace/events/kmem.h | 39 +++++++++++++++++++++++++++++++++++++ > mm/internal.h | 3 ++- > mm/page_alloc.c | 30 +++++++++++++++++++++++----- > mm/page_isolation.c | 2 +- > 4 files changed, 67 insertions(+), 7 deletions(-) > > diff --git a/include/trace/events/kmem.h b/include/trace/events/kmem.h > index 58688768ef0f..964704d76f9f 100644 > --- a/include/trace/events/kmem.h > +++ b/include/trace/events/kmem.h > @@ -304,6 +304,45 @@ TRACE_EVENT(mm_page_alloc_extfrag, > __entry->change_ownership) > ); > > +TRACE_EVENT(mm_alloc_contig_migrate_range_info, > + > + TP_PROTO(unsigned long start, > + unsigned long end, > + int migratetype, > + unsigned long nr_migrated, > + unsigned long nr_reclaimed, > + unsigned long nr_mapped), > + > + TP_ARGS(start, end, migratetype, > + nr_migrated, nr_reclaimed, nr_mapped), > + > + TP_STRUCT__entry( > + __field(unsigned long, start) > + __field(unsigned long, end) > + __field(int, migratetype) Please move the int to the end of the longs, as it will cause a 4 byte hole in 64 bit machines otherwise. > + __field(unsigned long, nr_migrated) > + __field(unsigned long, nr_reclaimed) > + __field(unsigned long, nr_mapped) > + ), > + > + TP_fast_assign( > + __entry->start = start; > + __entry->end = end; > + __entry->migratetype = migratetype; > + __entry->nr_migrated = nr_migrated; > + __entry->nr_reclaimed = nr_reclaimed; > + __entry->nr_mapped = nr_mapped; > + ), > + > + TP_printk("start=0x%lx end=0x%lx migratetype=%d nr_migrated=%lu nr_reclaimed=%lu nr_mapped=%lu", > + __entry->start, > + __entry->end, > + __entry->migratetype, > + __entry->nr_migrated, > + __entry->nr_reclaimed, > + __entry->nr_mapped) > +); > + > /* > * Required for uniquely and securely identifying mm in rss_stat tracepoint. > */ > diff --git a/mm/internal.h b/mm/internal.h > index f309a010d50f..e114c647e278 100644 > --- a/mm/internal.h > +++ b/mm/internal.h > @@ -537,7 +537,8 @@ isolate_migratepages_range(struct compact_control *cc, > unsigned long low_pfn, unsigned long end_pfn); > > int __alloc_contig_migrate_range(struct compact_control *cc, > - unsigned long start, unsigned long end); > + unsigned long start, unsigned long end, > + int migratetype); > > /* Free whole pageblock and set its migration type to MIGRATE_CMA. */ > void init_cma_reserved_pageblock(struct page *page); > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > index 150d4f23b010..f840bc785afa 100644 > --- a/mm/page_alloc.c > +++ b/mm/page_alloc.c > @@ -6219,9 +6219,14 @@ static void alloc_contig_dump_pages(struct list_head *page_list) > } > } > > -/* [start, end) must belong to a single zone. */ > +/* > + * [start, end) must belong to a single zone. > + * @migratetype: using migratetype to filter the type of migration in > + * trace_mm_alloc_contig_migrate_range_info. > + */ > int __alloc_contig_migrate_range(struct compact_control *cc, > - unsigned long start, unsigned long end) > + unsigned long start, unsigned long end, > + int migratetype) > { > /* This function is based on compact_zone() from compaction.c. */ > unsigned int nr_reclaimed; > @@ -6232,6 +6237,10 @@ int __alloc_contig_migrate_range(struct compact_control *cc, > .nid = zone_to_nid(cc->zone), > .gfp_mask = GFP_USER | __GFP_MOVABLE | __GFP_RETRY_MAYFAIL, > }; > + struct page *page; > + unsigned long total_mapped = 0; > + unsigned long total_migrated = 0; > + unsigned long total_reclaimed = 0; > > lru_cache_disable(); > > @@ -6257,9 +6266,16 @@ int __alloc_contig_migrate_range(struct compact_control *cc, > &cc->migratepages); > cc->nr_migratepages -= nr_reclaimed; > > + total_reclaimed += nr_reclaimed; > + list_for_each_entry(page, &cc->migratepages, lru) > + total_mapped += page_mapcount(page); You're doing this calculation regardless of if tracing is enabled or not and it's only used for tracing? Please add: if (trace_mm_alloc_contig_migrate_range_info_enabled()) { total_reclaimed += nr_reclaimed; list_for_each_entry(page, &cc->migratepages, lru) total_mapped += page_mapcount(page); } -- Steve > + > ret = migrate_pages(&cc->migratepages, alloc_migration_target, > NULL, (unsigned long)&mtc, cc->mode, MR_CONTIG_RANGE, NULL); > > + if (!ret) May want the above to be: if (trace_mm_alloc_config_migrate_range_info_enabled() && !ret) too. -- Steve > + total_migrated += cc->nr_migratepages; > + > /* > * On -ENOMEM, migrate_pages() bails out right away. It is pointless > * to retry again over this error, so do the same here. > @@ -6273,9 +6289,13 @@ int __alloc_contig_migrate_range(struct compact_control *cc, > if (!(cc->gfp_mask & __GFP_NOWARN) && ret == -EBUSY) > alloc_contig_dump_pages(&cc->migratepages); > putback_movable_pages(&cc->migratepages); > - return ret; > } > - return 0; > + > + trace_mm_alloc_contig_migrate_range_info(start, end, migratetype, > + total_migrated, > + total_reclaimed, > + total_mapped); > + return (ret < 0) ? ret : 0; > } > > /** > @@ -6355,7 +6375,7 @@ int alloc_contig_range(unsigned long start, unsigned long end, > * allocated. So, if we fall through be sure to clear ret so that > * -EBUSY is not accidentally used or returned to caller. > */ > - ret = __alloc_contig_migrate_range(&cc, start, end); > + ret = __alloc_contig_migrate_range(&cc, start, end, migratetype); > if (ret && ret != -EBUSY) > goto done; > ret = 0; > diff --git a/mm/page_isolation.c b/mm/page_isolation.c > index cd0ea3668253..a5c8fa4c2a75 100644 > --- a/mm/page_isolation.c > +++ b/mm/page_isolation.c > @@ -434,7 +434,7 @@ static int isolate_single_pageblock(unsigned long boundary_pfn, int flags, > } > > ret = __alloc_contig_migrate_range(&cc, head_pfn, > - head_pfn + nr_pages); > + head_pfn + nr_pages, page_mt); > > /* > * restore the page's migratetype so that it can