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 701BEE77170 for ; Thu, 5 Dec 2024 17:46:47 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id F39BD6B0163; Thu, 5 Dec 2024 12:46:46 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id EC23B6B0169; Thu, 5 Dec 2024 12:46:46 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D89AF6B016C; Thu, 5 Dec 2024 12:46:46 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id B75C06B0163 for ; Thu, 5 Dec 2024 12:46:46 -0500 (EST) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 71689121704 for ; Thu, 5 Dec 2024 17:46:46 +0000 (UTC) X-FDA: 82861635234.05.E9EB800 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf15.hostedemail.com (Postfix) with ESMTP id 7434CA000F for ; Thu, 5 Dec 2024 17:46:28 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf15.hostedemail.com: domain of "SRS0=yuLH=S6=goodmis.org=rostedt@kernel.org" designates 139.178.84.217 as permitted sender) smtp.mailfrom="SRS0=yuLH=S6=goodmis.org=rostedt@kernel.org" ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1733420788; 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=G/UDn+dmPhmcLRAx+8ktOuLTQEyqOW8oQa3Mh+G8IZA=; b=ZmCKGseZAcQrkAINkaqunl42HzvVKh7KBuEd0jGxJjc1iqNag8suAc/Qme0Y0FmCULw/pv 3iIK7mTtcgvc48FU+5vvHjgtzVqqOmtZrRmv1sKVCgOgYJlaD0+khBO0szH/pQsfE00Q9b Mj4WnLrnCece8LFNtGLJsk+6Mg4SjDM= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1733420788; a=rsa-sha256; cv=none; b=bZYcS6aJ96DlcYC3FcOX9k400lKqy/Klalut6Kc0emRage7Tc9dI5j80tiL6/3Yalfnfjz JF/zN9SZGLwoLd4gXlGQBaLc6935H/6CJPRccqeQImcL3ddT6mESdAejITChSVYXbERr72 WKRCgNmCoz/FXP8ahpGk9B0Y/3z/CQc= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf15.hostedemail.com: domain of "SRS0=yuLH=S6=goodmis.org=rostedt@kernel.org" designates 139.178.84.217 as permitted sender) smtp.mailfrom="SRS0=yuLH=S6=goodmis.org=rostedt@kernel.org" Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 790B85C6CA2; Thu, 5 Dec 2024 17:46:00 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id D8A19C4CED1; Thu, 5 Dec 2024 17:46:39 +0000 (UTC) Date: Thu, 5 Dec 2024 12:46:45 -0500 From: Steven Rostedt To: Raghavendra K T Cc: , , , , , , , , , , , , , , , , , , , , , , , , , "Masami Hiramatsu" , Subject: Re: [RFC PATCH V0 09/10] trace/kmmscand: Add tracing of scanning and migration Message-ID: <20241205124645.0d56ea57@gandalf.local.home> In-Reply-To: <20241201153818.2633616-10-raghavendra.kt@amd.com> References: <20241201153818.2633616-1-raghavendra.kt@amd.com> <20241201153818.2633616-10-raghavendra.kt@amd.com> X-Mailer: Claws Mail 3.20.0git84 (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: 7434CA000F X-Rspam-User: X-Rspamd-Server: rspam07 X-Stat-Signature: 16ubf4x74y6qaqcbo51h8tdj3djhxwuo X-HE-Tag: 1733420788-142268 X-HE-Meta: U2FsdGVkX19yv08nmKEapMrPr9IADtlSJhesUFVaawc9IQXajjaA/EQ3GPxXV8YvbmAwbkfHQLgiNw4GFdfXdXy3KuqkHRgqqzYJW+JROpVB2EZH58JL5kuWRMia9B7aoRfImzv1nULIlIetALQO9z7Zq7alJm8F8uWQddewATatp4PlA+tITH2C9tm2upPSrfJv/kaVwlx1mjXcykXecSZcbQqZ5tYX7T2J+71FVCWTKpTCdM1NjGWGiqbEeg/CUPD1AQFMY1MDzlyIFpDWSWzej3OkMsJy8w2KXhvz+wBd2M6VQJGaHxHYbY8bqUFjKzXeFHoV+IEApjqXQcx1tkw87H121QkjTi3QsdYrgFOaMiHTnQ16vXgmHUuG9K+87zY1p/EfqQVHYXvIXb1vw7riwLWPl4NCn5Zfsm7w/dDfCfUaZIk1ecD/6008WZETI+3JqxIK2MueJDaQtFPZKZBnPgbiSq6NM1xim2h65ew2BIiwoNKQouZsUmXdWVA3hIKJJ5XX6NSfL7y3BUgx1K5CkCOwLFG64a/gLhFEiPkl9uDAa85u4bOW15QbPFPYapVHnOpxps7zVN4p6XeGJZ9eJK3b4PMufwRuMtWabCFXg2EgE/cX1+LgSjD8meV1k1+LLjrpDPyUlCZ1p4J+0hh4pVseHau9BuxSFC9CTQo3IwOoYp1NdZt81nOfrAqXBj1+QWivYD5dwFAzumjZWQ9D/9v3VDHncoNVypCASfyQO9afy4El4MG+RZNOWxai/ToJyLuKHvRXxSMogsL/lNtXVk/CloufZm7nuqvqa8E/eA8Tk1E9suDHlhT+fC98CjhpQPn8Gd1laNHZly2F1S7WQL5FF/4SNdxyZNmKn3PG0wVMc3KxbxFc+tRwVKHXZr4s38dvmdmix3C4DRTXKV9QUBjqp1JWj7oANA45iyNeSog4ordyi3fZbwiSq2ohP1muN6GAi1gP3VFKFg3 qFTSqttp PI/VOMLBpLfXVsrRZAJFEbOyQpHwZWmhHqP/lT4HsXBTI85U9npWSlbvnKklIQxALaEfMMLu9bWEfiX2N9cyXcOk/4BA2BAyFFosm5Izl/ERfBVhQhsPDKmdxNgKKZ6UyHS1oe8hZn0lLhtWidWA2l3NKQT4hK09xjGOgXmXQfAfHUflPKhRYM1whmiYtqkcA0lJe138DU1MAw6KtCVGV16IDra8TP8/6+Fy/vc2vMWYTWHKiJiuJnQaZHY5D+CeayAPoFpi+pk5J2Ub+d8+2jRU+eykfpgWLX6Z67xbwiI2Ta5+ZGhj0px7UNVMv7L3wHAtNjnOKn89s3gQqfVro7h+jbDhxEcKxAXJkKPV+V1vvMMg= 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 Sun, 1 Dec 2024 15:38:17 +0000 Raghavendra K T wrote: > Add tracing support to track > - start and end of scanning. > - migration. > > CC: Steven Rostedt > CC: Masami Hiramatsu > CC: linux-trace-kernel@vger.kernel.org > > Signed-off-by: Raghavendra K T > --- > include/trace/events/kmem.h | 99 +++++++++++++++++++++++++++++++++++++ > mm/kmmscand.c | 12 ++++- > 2 files changed, 110 insertions(+), 1 deletion(-) > > diff --git a/include/trace/events/kmem.h b/include/trace/events/kmem.h > index b37eb0a7060f..80978d85300d 100644 > --- a/include/trace/events/kmem.h > +++ b/include/trace/events/kmem.h > @@ -9,6 +9,105 @@ > #include > #include > > +TRACE_EVENT(kmem_mm_enter, > + > + TP_PROTO(struct task_struct *t, > + struct mm_struct *mm), > + > + TP_ARGS(t, mm), > + > + TP_STRUCT__entry( > + __array( char, comm, TASK_COMM_LEN ) Is there a reason to record "comm"? There's other ways to retrieve it than to always write it to the ring buffer. > + __field( struct mm_struct *, mm ) > + ), > + > + TP_fast_assign( > + memcpy(__entry->comm, t->comm, TASK_COMM_LEN); > + __entry->mm = mm; > + ), > + > + TP_printk("kmmscand: mm_enter comm =%s mm=%p", __entry->comm, __entry->mm) > +); > + > +TRACE_EVENT(kmem_scan_mm_start, > + > + TP_PROTO(struct task_struct *t, > + struct mm_struct *mm), > + > + TP_ARGS(t, mm), > + > + TP_STRUCT__entry( > + __array( char, comm, TASK_COMM_LEN ) > + __field( struct mm_struct *, mm ) > + ), > + > + TP_fast_assign( > + memcpy(__entry->comm, t->comm, TASK_COMM_LEN); > + __entry->mm = mm; > + ), > + > + TP_printk("kmmscand: scan_mm_start comm =%s mm=%p", __entry->comm, __entry->mm) No need to write the event name into the TP_printk(). That's redundant. Also, the above two events are pretty much identical. Please use DECLARE_EVENT_CLASS(). > +); > + > +TRACE_EVENT(kmem_scan_mm_end, > + > + TP_PROTO(struct task_struct *t, > + struct mm_struct *mm, > + unsigned long start, > + unsigned long total, > + unsigned long scan_size, > + unsigned long scan_period), > + > + TP_ARGS(t, mm, start, total, scan_period, scan_size), > + > + TP_STRUCT__entry( > + __array( char, comm, TASK_COMM_LEN ) Again, why comm? > + __field( struct mm_struct *, mm ) > + __field( unsigned long, start ) > + __field( unsigned long, total ) > + __field( unsigned long, scan_period ) > + __field( unsigned long, scan_size ) > + ), > + > + TP_fast_assign( > + memcpy(__entry->comm, t->comm, TASK_COMM_LEN); > + __entry->mm = mm; > + __entry->start = start; > + __entry->total = total; > + __entry->scan_period = scan_period; > + __entry->scan_size = scan_size; > + ), > + > + TP_printk("kmmscand: scan_mm_end comm =%s mm=%p, start = %ld, total = %ld, scan_period = %ld, scan_size = %ld", > + __entry->comm, __entry->mm, __entry->start, > + __entry->total, __entry->scan_period, __entry->scan_size) > +); > + > +TRACE_EVENT(kmem_scan_mm_migrate, > + > + TP_PROTO(struct task_struct *t, > + struct mm_struct *mm, > + int rc), > + > + TP_ARGS(t, mm, rc), > + > + TP_STRUCT__entry( > + __array( char, comm, TASK_COMM_LEN ) > + __field( struct mm_struct *, mm ) > + __field( int, rc ) > + ), > + > + TP_fast_assign( > + memcpy(__entry->comm, t->comm, TASK_COMM_LEN); > + __entry->mm = mm; > + __entry->rc = rc; > + ), > + > + TP_printk("kmmscand: scan_mm_migrate comm =%s mm=%p rc=%d", __entry->comm, > + __entry->mm, __entry->rc) > +); > + > + > TRACE_EVENT(kmem_cache_alloc, > > TP_PROTO(unsigned long call_site, > diff --git a/mm/kmmscand.c b/mm/kmmscand.c > index 682c0523c0b4..70f588a210dd 100644 > --- a/mm/kmmscand.c > +++ b/mm/kmmscand.c > @@ -668,8 +668,10 @@ static void kmmscand_migrate_folio(void) > WRITE_ONCE(kmmscand_cur_migrate_mm, info->mm); > spin_unlock(&kmmscand_migrate_lock); > > - if (info->mm) > + if (info->mm) { > ret = kmmscand_promote_folio(info); > + trace_kmem_scan_mm_migrate(info->mm->owner, info->mm, ret); > + } > > /* TBD: encode migrated count here, currently assume folio_nr_pages */ > if (!ret) > @@ -828,6 +830,9 @@ static unsigned long kmmscand_scan_mm_slot(void) > goto outerloop; > } > > + if (mm->owner) > + trace_kmem_scan_mm_start(mm->owner, mm); > + > now = jiffies; > /* > * Dont scan if : > @@ -868,6 +873,10 @@ static unsigned long kmmscand_scan_mm_slot(void) > > update_mmslot_info = true; > > + if (mm->owner) > + trace_kmem_scan_mm_end(mm->owner, mm, address, total, > + mm_slot_scan_period, mm_slot_scan_size); Please do not add conditions that is used just for calling a tracepoint. That takes away the "nop" of the function. You can either use TRACE_EVENT_CONDITION() or DEFINE_EVENT_CONDITION(), or you can hard code it here: if (trace_kmem_scan_mm_end_enabled()) { if (mm->owner) trace_kmem_scan_mm_end(mm->owner, mm, address, total, mm_slot_scan_period, mm_slot_scan_size); } But since it is a single condition, I would prefer the *_CONDITION() macros above. -- Steve > + > count_kmmscand_mm_scans(); > > outerloop: > @@ -1020,6 +1029,7 @@ void __kmmscand_enter(struct mm_struct *mm) > spin_unlock(&kmmscand_mm_lock); > > mmgrab(mm); > + trace_kmem_mm_enter(mm->owner, mm); > if (wakeup) > wake_up_interruptible(&kmmscand_wait); > }