From nobody Wed Dec 17 09:46:10 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7EABCC5AD4C for ; Thu, 23 Nov 2023 19:39:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229727AbjKWTjs (ORCPT ); Thu, 23 Nov 2023 14:39:48 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59274 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229462AbjKWTjo (ORCPT ); Thu, 23 Nov 2023 14:39:44 -0500 Received: from mx1.sberdevices.ru (mx1.sberdevices.ru [37.18.73.165]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D4A8FD6F; Thu, 23 Nov 2023 11:39:47 -0800 (PST) Received: from p-infra-ksmg-sc-msk01 (localhost [127.0.0.1]) by mx1.sberdevices.ru (Postfix) with ESMTP id 66922100002; Thu, 23 Nov 2023 22:39:45 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.sberdevices.ru 66922100002 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=salutedevices.com; s=mail; t=1700768385; bh=ywDtj6tZPYqsf6JfVartrIaJdgw+5bnQVzBGvn2tRUk=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:From; b=PI9aQbREnvKhexKQ0GGXr5+Y3ivzCgX45+xVc56UuJ3IeASPnFkZ/w0vmM1qFYMml NP3jgLWtKiWN3iFQ16GSuZUVOiwf3uMVwOGpIKGNtNGX8xYoD0l6HvBNjGj7ZHDW/A PTCdMowrQWgumnWpN+vW88EBlOX1BOMAZwk6Uv2vnH6JILwPPW53jxFEzrjh0PIDPw 6PMQEtVbbfqQphA5EWgdyCzN7n1d5eFIi56doyOVHV29wHHElCGG8C9UG5F2xnMzDm Ncc/kffYHs3Ztb9ikweTidb3FBxW5Lqamk5JlCy6ehDa3zIDzMMxDLz8wxVgUkINDW saB6OQsiXNLeA== Received: from p-i-exch-sc-m01.sberdevices.ru (p-i-exch-sc-m01.sberdevices.ru [172.16.192.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.sberdevices.ru (Postfix) with ESMTPS; Thu, 23 Nov 2023 22:39:45 +0300 (MSK) Received: from localhost.localdomain (100.64.160.123) by p-i-exch-sc-m01.sberdevices.ru (172.16.192.107) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.40; Thu, 23 Nov 2023 22:39:44 +0300 From: Dmitry Rokosov To: , , , , , , , , CC: , , , , , , Dmitry Rokosov Subject: [PATCH v3 1/2] mm: memcg: print out cgroup ino in the memcg tracepoints Date: Thu, 23 Nov 2023 22:39:36 +0300 Message-ID: <20231123193937.11628-2-ddrokosov@salutedevices.com> X-Mailer: git-send-email 2.36.0 In-Reply-To: <20231123193937.11628-1-ddrokosov@salutedevices.com> References: <20231123193937.11628-1-ddrokosov@salutedevices.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [100.64.160.123] X-ClientProxiedBy: p-i-exch-sc-m02.sberdevices.ru (172.16.192.103) To p-i-exch-sc-m01.sberdevices.ru (172.16.192.107) X-KSMG-Rule-ID: 10 X-KSMG-Message-Action: clean X-KSMG-AntiSpam-Lua-Profiles: 181569 [Nov 23 2023] X-KSMG-AntiSpam-Version: 6.0.0.2 X-KSMG-AntiSpam-Envelope-From: ddrokosov@salutedevices.com X-KSMG-AntiSpam-Rate: 0 X-KSMG-AntiSpam-Status: not_detected X-KSMG-AntiSpam-Method: none X-KSMG-AntiSpam-Auth: dkim=none X-KSMG-AntiSpam-Info: LuaCore: 4 0.3.4 720d3c21819df9b72e78f051e300e232316d302a, {Tracking_from_domain_doesnt_match_to}, salutedevices.com:7.1.1;100.64.160.123:7.1.2;d41d8cd98f00b204e9800998ecf8427e.com:7.1.1;p-i-exch-sc-m01.sberdevices.ru:5.0.1,7.1.1;127.0.0.199:7.1.2, FromAlignment: s, ApMailHostAddress: 100.64.160.123 X-MS-Exchange-Organization-SCL: -1 X-KSMG-AntiSpam-Interceptor-Info: scan successful X-KSMG-AntiPhishing: Clean X-KSMG-LinksScanning: Clean X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 2.0.1.6960, bases: 2023/11/23 17:02:00 #22509098 X-KSMG-AntiVirus-Status: Clean, skipped Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Sometimes, it becomes necessary to determine the memcg tracepoint event that has occurred. This is particularly relevant in scenarios involving a large cgroup hierarchy, where users may wish to trace the process of reclamation within a specific cgroup(s) by applying a filter. The function cgroup_ino() is a useful tool for this purpose. To integrate cgroup_ino() into the existing memcg tracepoints, this patch introduces a new tracepoint template for the begin() and end() events. Signed-off-by: Dmitry Rokosov Acked-by: Shakeel Butt --- include/trace/events/vmscan.h | 73 +++++++++++++++++++++++++++++------ mm/vmscan.c | 10 ++--- 2 files changed, 66 insertions(+), 17 deletions(-) diff --git a/include/trace/events/vmscan.h b/include/trace/events/vmscan.h index d2123dd960d5..e9093fa1c924 100644 --- a/include/trace/events/vmscan.h +++ b/include/trace/events/vmscan.h @@ -141,19 +141,45 @@ DEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template,= mm_vmscan_direct_reclaim_b ); =20 #ifdef CONFIG_MEMCG -DEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_memcg_recl= aim_begin, =20 - TP_PROTO(int order, gfp_t gfp_flags), +DECLARE_EVENT_CLASS(mm_vmscan_memcg_reclaim_begin_template, =20 - TP_ARGS(order, gfp_flags) + TP_PROTO(int order, gfp_t gfp_flags, const struct mem_cgroup *memcg), + + TP_ARGS(order, gfp_flags, memcg), + + TP_STRUCT__entry( + __field(int, order) + __field(unsigned long, gfp_flags) + __field(ino_t, ino) + ), + + TP_fast_assign( + __entry->order =3D order; + __entry->gfp_flags =3D (__force unsigned long)gfp_flags; + __entry->ino =3D cgroup_ino(memcg->css.cgroup); + ), + + TP_printk("order=3D%d gfp_flags=3D%s memcg=3D%ld", + __entry->order, + show_gfp_flags(__entry->gfp_flags), + __entry->ino) ); =20 -DEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_memcg_soft= limit_reclaim_begin, +DEFINE_EVENT(mm_vmscan_memcg_reclaim_begin_template, mm_vmscan_memcg_recla= im_begin, =20 - TP_PROTO(int order, gfp_t gfp_flags), + TP_PROTO(int order, gfp_t gfp_flags, const struct mem_cgroup *memcg), =20 - TP_ARGS(order, gfp_flags) + TP_ARGS(order, gfp_flags, memcg) +); + +DEFINE_EVENT(mm_vmscan_memcg_reclaim_begin_template, mm_vmscan_memcg_softl= imit_reclaim_begin, + + TP_PROTO(int order, gfp_t gfp_flags, const struct mem_cgroup *memcg), + + TP_ARGS(order, gfp_flags, memcg) ); + #endif /* CONFIG_MEMCG */ =20 DECLARE_EVENT_CLASS(mm_vmscan_direct_reclaim_end_template, @@ -181,19 +207,42 @@ DEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, m= m_vmscan_direct_reclaim_end ); =20 #ifdef CONFIG_MEMCG -DEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_memcg_reclai= m_end, =20 - TP_PROTO(unsigned long nr_reclaimed), +DECLARE_EVENT_CLASS(mm_vmscan_memcg_reclaim_end_template, =20 - TP_ARGS(nr_reclaimed) + TP_PROTO(unsigned long nr_reclaimed, const struct mem_cgroup *memcg), + + TP_ARGS(nr_reclaimed, memcg), + + TP_STRUCT__entry( + __field(unsigned long, nr_reclaimed) + __field(ino_t, ino) + ), + + TP_fast_assign( + __entry->nr_reclaimed =3D nr_reclaimed; + __entry->ino =3D cgroup_ino(memcg->css.cgroup); + ), + + TP_printk("nr_reclaimed=3D%lu memcg=3D%ld", + __entry->nr_reclaimed, + __entry->ino) ); =20 -DEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_memcg_softli= mit_reclaim_end, +DEFINE_EVENT(mm_vmscan_memcg_reclaim_end_template, mm_vmscan_memcg_reclaim= _end, =20 - TP_PROTO(unsigned long nr_reclaimed), + TP_PROTO(unsigned long nr_reclaimed, const struct mem_cgroup *memcg), =20 - TP_ARGS(nr_reclaimed) + TP_ARGS(nr_reclaimed, memcg) ); + +DEFINE_EVENT(mm_vmscan_memcg_reclaim_end_template, mm_vmscan_memcg_softlim= it_reclaim_end, + + TP_PROTO(unsigned long nr_reclaimed, const struct mem_cgroup *memcg), + + TP_ARGS(nr_reclaimed, memcg) +); + #endif /* CONFIG_MEMCG */ =20 TRACE_EVENT(mm_shrink_slab_start, diff --git a/mm/vmscan.c b/mm/vmscan.c index 1080209a568b..45780952f4b5 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -7088,8 +7088,8 @@ unsigned long mem_cgroup_shrink_node(struct mem_cgrou= p *memcg, sc.gfp_mask =3D (gfp_mask & GFP_RECLAIM_MASK) | (GFP_HIGHUSER_MOVABLE & ~GFP_RECLAIM_MASK); =20 - trace_mm_vmscan_memcg_softlimit_reclaim_begin(sc.order, - sc.gfp_mask); + trace_mm_vmscan_memcg_softlimit_reclaim_begin(sc.order, sc.gfp_mask, + memcg); =20 /* * NOTE: Although we can get the priority field, using it @@ -7100,7 +7100,7 @@ unsigned long mem_cgroup_shrink_node(struct mem_cgrou= p *memcg, */ shrink_lruvec(lruvec, &sc); =20 - trace_mm_vmscan_memcg_softlimit_reclaim_end(sc.nr_reclaimed); + trace_mm_vmscan_memcg_softlimit_reclaim_end(sc.nr_reclaimed, memcg); =20 *nr_scanned =3D sc.nr_scanned; =20 @@ -7134,13 +7134,13 @@ unsigned long try_to_free_mem_cgroup_pages(struct m= em_cgroup *memcg, struct zonelist *zonelist =3D node_zonelist(numa_node_id(), sc.gfp_mask); =20 set_task_reclaim_state(current, &sc.reclaim_state); - trace_mm_vmscan_memcg_reclaim_begin(0, sc.gfp_mask); + trace_mm_vmscan_memcg_reclaim_begin(0, sc.gfp_mask, memcg); noreclaim_flag =3D memalloc_noreclaim_save(); =20 nr_reclaimed =3D do_try_to_free_pages(zonelist, &sc); =20 memalloc_noreclaim_restore(noreclaim_flag); - trace_mm_vmscan_memcg_reclaim_end(nr_reclaimed); + trace_mm_vmscan_memcg_reclaim_end(nr_reclaimed, memcg); set_task_reclaim_state(current, NULL); =20 return nr_reclaimed; --=20 2.36.0 From nobody Wed Dec 17 09:46:10 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 92A1FC61D85 for ; Thu, 23 Nov 2023 19:40:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229817AbjKWTjv (ORCPT ); Thu, 23 Nov 2023 14:39:51 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59266 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229453AbjKWTjo (ORCPT ); Thu, 23 Nov 2023 14:39:44 -0500 Received: from mx1.sberdevices.ru (mx2.sberdevices.ru [45.89.224.132]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BCF9FD5A; Thu, 23 Nov 2023 11:39:47 -0800 (PST) Received: from p-infra-ksmg-sc-msk02 (localhost [127.0.0.1]) by mx1.sberdevices.ru (Postfix) with ESMTP id 30808120011; Thu, 23 Nov 2023 22:39:46 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.sberdevices.ru 30808120011 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=salutedevices.com; s=mail; t=1700768386; bh=fGDBCiKmSTE+7SXnjipAsp+7eqI2bC5r1hZ9/0vsdks=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:From; b=UDEGgq7WizGwhy3OIZgsMiqkZLcTpueDXg7U2Imd1cfixaVQx4o6vVtmX9T1OzYn1 T3A4mqAHGm9OWkx7niV8FtJqfMR2DJjvS6R9vZDw2KAfyfRXl5zmKpuNnJsdzRS5jF pFvpyVd4N7VZYKBl3OXBfLrJeuWt/DFIb1jSYICCO52ubgfO5r8HLBQ+JBvTtOVASw g4kI659Jm40D3Rymt6ELCvngjiSmu/QowWf0vNBZsdLvQpXVby0ndm3np0MKZOaNiU UlxVGJQk71a2iyk08KherA4MzmRSDRLJczMDB1C3zFxkE8dHfqpZCspqFBPmQAt2ut s7WQ4D7dm3bGg== Received: from p-i-exch-sc-m01.sberdevices.ru (p-i-exch-sc-m01.sberdevices.ru [172.16.192.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.sberdevices.ru (Postfix) with ESMTPS; Thu, 23 Nov 2023 22:39:46 +0300 (MSK) Received: from localhost.localdomain (100.64.160.123) by p-i-exch-sc-m01.sberdevices.ru (172.16.192.107) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.40; Thu, 23 Nov 2023 22:39:45 +0300 From: Dmitry Rokosov To: , , , , , , , , CC: , , , , , , Dmitry Rokosov Subject: [PATCH v3 2/2] mm: memcg: introduce new event to trace shrink_memcg Date: Thu, 23 Nov 2023 22:39:37 +0300 Message-ID: <20231123193937.11628-3-ddrokosov@salutedevices.com> X-Mailer: git-send-email 2.36.0 In-Reply-To: <20231123193937.11628-1-ddrokosov@salutedevices.com> References: <20231123193937.11628-1-ddrokosov@salutedevices.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [100.64.160.123] X-ClientProxiedBy: p-i-exch-sc-m02.sberdevices.ru (172.16.192.103) To p-i-exch-sc-m01.sberdevices.ru (172.16.192.107) X-KSMG-Rule-ID: 10 X-KSMG-Message-Action: clean X-KSMG-AntiSpam-Lua-Profiles: 181569 [Nov 23 2023] X-KSMG-AntiSpam-Version: 6.0.0.2 X-KSMG-AntiSpam-Envelope-From: ddrokosov@salutedevices.com X-KSMG-AntiSpam-Rate: 0 X-KSMG-AntiSpam-Status: not_detected X-KSMG-AntiSpam-Method: none X-KSMG-AntiSpam-Auth: dkim=none X-KSMG-AntiSpam-Info: LuaCore: 4 0.3.4 720d3c21819df9b72e78f051e300e232316d302a, {Tracking_from_domain_doesnt_match_to}, d41d8cd98f00b204e9800998ecf8427e.com:7.1.1;100.64.160.123:7.1.2;salutedevices.com:7.1.1;127.0.0.199:7.1.2;p-i-exch-sc-m01.sberdevices.ru:7.1.1,5.0.1, FromAlignment: s, ApMailHostAddress: 100.64.160.123 X-MS-Exchange-Organization-SCL: -1 X-KSMG-AntiSpam-Interceptor-Info: scan successful X-KSMG-AntiPhishing: Clean X-KSMG-LinksScanning: Clean X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 2.0.1.6960, bases: 2023/11/23 17:02:00 #22509098 X-KSMG-AntiVirus-Status: Clean, skipped Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The shrink_memcg flow plays a crucial role in memcg reclamation. Currently, it is not possible to trace this point from non-direct reclaim paths. However, direct reclaim has its own tracepoint, so there is no issue there. In certain cases, when debugging memcg pressure, developers may need to identify all potential requests for memcg reclamation including kswapd(). The patchset introduces the tracepoints mm_vmscan_memcg_shrink_{begin|end}() to address this problem. Example of output in the kswapd context (non-direct reclaim): kswapd0-39 [001] ..... 240.356378: mm_vmscan_memcg_shrink_begin:= order=3D0 gfp_flags=3DGFP_KERNEL memcg=3D16 kswapd0-39 [001] ..... 240.356396: mm_vmscan_memcg_shrink_end: n= r_reclaimed=3D0 memcg=3D16 kswapd0-39 [001] ..... 240.356420: mm_vmscan_memcg_shrink_begin:= order=3D0 gfp_flags=3DGFP_KERNEL memcg=3D16 kswapd0-39 [001] ..... 240.356454: mm_vmscan_memcg_shrink_end: n= r_reclaimed=3D1 memcg=3D16 kswapd0-39 [001] ..... 240.356479: mm_vmscan_memcg_shrink_begin:= order=3D0 gfp_flags=3DGFP_KERNEL memcg=3D16 kswapd0-39 [001] ..... 240.356506: mm_vmscan_memcg_shrink_end: n= r_reclaimed=3D4 memcg=3D16 kswapd0-39 [001] ..... 240.356525: mm_vmscan_memcg_shrink_begin:= order=3D0 gfp_flags=3DGFP_KERNEL memcg=3D16 kswapd0-39 [001] ..... 240.356593: mm_vmscan_memcg_shrink_end: n= r_reclaimed=3D11 memcg=3D16 kswapd0-39 [001] ..... 240.356614: mm_vmscan_memcg_shrink_begin:= order=3D0 gfp_flags=3DGFP_KERNEL memcg=3D16 kswapd0-39 [001] ..... 240.356738: mm_vmscan_memcg_shrink_end: n= r_reclaimed=3D25 memcg=3D16 kswapd0-39 [001] ..... 240.356790: mm_vmscan_memcg_shrink_begin:= order=3D0 gfp_flags=3DGFP_KERNEL memcg=3D16 kswapd0-39 [001] ..... 240.357125: mm_vmscan_memcg_shrink_end: n= r_reclaimed=3D53 memcg=3D16 Signed-off-by: Dmitry Rokosov Acked-by: Shakeel Butt --- include/trace/events/vmscan.h | 22 ++++++++++++++++++++++ mm/vmscan.c | 7 +++++++ 2 files changed, 29 insertions(+) diff --git a/include/trace/events/vmscan.h b/include/trace/events/vmscan.h index e9093fa1c924..a4686afe571d 100644 --- a/include/trace/events/vmscan.h +++ b/include/trace/events/vmscan.h @@ -180,6 +180,17 @@ DEFINE_EVENT(mm_vmscan_memcg_reclaim_begin_template, m= m_vmscan_memcg_softlimit_r TP_ARGS(order, gfp_flags, memcg) ); =20 +DEFINE_EVENT(mm_vmscan_memcg_reclaim_begin_template, mm_vmscan_memcg_shrin= k_begin, + + TP_PROTO(int order, gfp_t gfp_flags, const struct mem_cgroup *memcg), + + TP_ARGS(order, gfp_flags, memcg) +); + +#else + +#define trace_mm_vmscan_memcg_shrink_begin(...) + #endif /* CONFIG_MEMCG */ =20 DECLARE_EVENT_CLASS(mm_vmscan_direct_reclaim_end_template, @@ -243,6 +254,17 @@ DEFINE_EVENT(mm_vmscan_memcg_reclaim_end_template, mm_= vmscan_memcg_softlimit_rec TP_ARGS(nr_reclaimed, memcg) ); =20 +DEFINE_EVENT(mm_vmscan_memcg_reclaim_end_template, mm_vmscan_memcg_shrink_= end, + + TP_PROTO(unsigned long nr_reclaimed, const struct mem_cgroup *memcg), + + TP_ARGS(nr_reclaimed, memcg) +); + +#else + +#define trace_mm_vmscan_memcg_shrink_end(...) + #endif /* CONFIG_MEMCG */ =20 TRACE_EVENT(mm_shrink_slab_start, diff --git a/mm/vmscan.c b/mm/vmscan.c index 45780952f4b5..f7e3ddc5a7ad 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -6461,6 +6461,10 @@ static void shrink_node_memcgs(pg_data_t *pgdat, str= uct scan_control *sc) */ cond_resched(); =20 + trace_mm_vmscan_memcg_shrink_begin(sc->order, + sc->gfp_mask, + memcg); + mem_cgroup_calculate_protection(target_memcg, memcg); =20 if (mem_cgroup_below_min(target_memcg, memcg)) { @@ -6491,6 +6495,9 @@ static void shrink_node_memcgs(pg_data_t *pgdat, stru= ct scan_control *sc) shrink_slab(sc->gfp_mask, pgdat->node_id, memcg, sc->priority); =20 + trace_mm_vmscan_memcg_shrink_end(sc->nr_reclaimed - reclaimed, + memcg); + /* Record the group's reclaim efficiency */ if (!sc->proactive) vmpressure(sc->gfp_mask, memcg, false, --=20 2.36.0