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 0B7FBE71092 for ; Thu, 21 Sep 2023 16:12:46 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9C5986B0205; Thu, 21 Sep 2023 12:12:45 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 94E9B6B0206; Thu, 21 Sep 2023 12:12:45 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7EFEB6B0207; Thu, 21 Sep 2023 12:12:45 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 69DA66B0205 for ; Thu, 21 Sep 2023 12:12:45 -0400 (EDT) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 2F15E1604D8 for ; Thu, 21 Sep 2023 16:12:45 +0000 (UTC) X-FDA: 81261097890.28.14C6020 Received: from mail-yw1-f180.google.com (mail-yw1-f180.google.com [209.85.128.180]) by imf22.hostedemail.com (Postfix) with ESMTP id 677F9C0033 for ; Thu, 21 Sep 2023 16:12:43 +0000 (UTC) Authentication-Results: imf22.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=v+ze3Y6N; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf22.hostedemail.com: domain of tjmercier@google.com designates 209.85.128.180 as permitted sender) smtp.mailfrom=tjmercier@google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1695312763; 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:dkim-signature; bh=U/nh5+0PZETjSMJy4nh4EngmscUGhpVzLurVdwdj6j0=; b=v08cG/ehRwa1P7jsXsUdQkAo/l96PZdi4IaqDei4j60UXyN2z2w/k5TVAXuikCJ6B83KPD 9ZQDYed3ZRvgkMOhqVfGStcrGmQYAZ/2Kj4/SZ99Eprhb3wM+6+Cuf2QRzLfFo4yPNhyos cN2I3ahvDzOFziflmte0IaJA+AS5Lfg= ARC-Authentication-Results: i=1; imf22.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=v+ze3Y6N; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf22.hostedemail.com: domain of tjmercier@google.com designates 209.85.128.180 as permitted sender) smtp.mailfrom=tjmercier@google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1695312763; a=rsa-sha256; cv=none; b=zhYO8zQMer7CXifSlpDHF4j3ygQwue9oH+fiNyW8v21eB485wqP5Q7uUNhaqaaoDW8/Ojt dsckF2TLlG99+kmbKlTP9tcOplYoEeV0c/obhx3FENn+LkIDwAYCm1iCvd0fdWKtywkksL ewVvwz36YWCcTGZFLdUTN/4RU82m67Y= Received: by mail-yw1-f180.google.com with SMTP id 00721157ae682-59ea6064e2eso14667337b3.2 for ; Thu, 21 Sep 2023 09:12:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1695312762; x=1695917562; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=U/nh5+0PZETjSMJy4nh4EngmscUGhpVzLurVdwdj6j0=; b=v+ze3Y6Nob3BIFq7ZWm9+p2Jrnyz/7VHvfMU1/IL8IhldwgVqrWvZJ7r5XpBfeXpY9 /YWKHFbBZG2cUxOA7JjEKzm/hJAR1l9sGxMRirXuUTO0P4sWIqetmvE3L5aXF+Y7A7P6 9GwM/uaT1hgp/kkfXl5OdkvQwI8jolVCjRjDuPkPOv2r3DyRjf7Kf88ynvxM0GQJEbJJ OAXcQek4VCX3Nf+WZHmVUVjvCOeoNLeX1aiLd4HuGxRXoniLjdRhf3Bapxm6YW1r6q7f yVvX+liS1GQImWKREy/7CLpaWJewWEpkKS1HFoeDyGtVioxPVcpXURPPK8ofsVtDLAnk P/8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695312762; x=1695917562; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=U/nh5+0PZETjSMJy4nh4EngmscUGhpVzLurVdwdj6j0=; b=cUXzEHLQnbIa7N0hCCsjxu7E8vb+QMZIqZVdXb6LXJumCVdnETCrfOyDvRURx+mS5E W0ym+OtnUNVs0YBepsP7JKcj8zSlDTGsNBhWIr+Uc6/ws0Q1fIxZdVxtiemlH64mKPZb mB6mMhQ2BP3/5+2hpUGFENdp4clA4OIZBDnoC5ZlDPlBkEPWDW90I5C/IoqtM4NFpm97 tE5AcQXGR7oHPtM0PIckj7rbIgqWTFO48/a70yU2W81FlW13I3HFKm2R078G8f10SMg0 vk1Wr+0MgQoUzkSx16/3R3yICSkB0eb4vHNx6V4ubEG/Rg5XVAfbaevGgWPhSRWcI5n+ 7R7A== X-Gm-Message-State: AOJu0Yw6ri6n0mPBuJc3GXYiP0Tw93jBhREdG9jsqiIFGI4uZEKtdw8i gazvYg1SiI9rC3JEgyD9k2lrw23sjiJPlaoqPCpZYA== X-Google-Smtp-Source: AGHT+IGYKYW646WETikplKcYFAQrsxX7SCEIo5f6CzP9FAr+rMBHhocm1DBGv3sdWJuyceNTUOP9LEJJdPfpuiCuC1k= X-Received: by 2002:a25:cf07:0:b0:d15:7402:f7cd with SMTP id f7-20020a25cf07000000b00d157402f7cdmr6441885ybg.27.1695312762236; Thu, 21 Sep 2023 09:12:42 -0700 (PDT) MIME-Version: 1.0 References: <20230921062206.14429-1-jaewon31.kim@samsung.com> In-Reply-To: <20230921062206.14429-1-jaewon31.kim@samsung.com> From: "T.J. Mercier" Date: Thu, 21 Sep 2023 09:12:30 -0700 Message-ID: Subject: Re: [PATCH v2] vmscan: add trace events for lru_gen To: Jaewon Kim Cc: rostedt@goodmis.org, yuzhao@google.com, kaleshsingh@google.com, akpm@linux-foundation.org, vbabka@suse.cz, hannes@cmpxchg.org, linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org, linux-mm@kvack.org, jaewon31.kim@gmail.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 677F9C0033 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: kfrwkjxuxgmz86xdd1owawytbgacm656 X-HE-Tag: 1695312763-38009 X-HE-Meta: U2FsdGVkX1+Hx2MNPwb/a7NpSpcvqmMdJnIwLuv2zsery/Yhzz2WpPw02w9lZtrd6X82Q1+JfoZF7yt633VUEU/4qDpff2FR/Zj5PPW06Zu7Pfs8fxVDpPeeo9ulsuRf9ivTLZmgwPBeo4CsdLN5GoDhZvrnsZRCFK0Cs9V0WLW0tkNl7NEPWq3Z1tRIwI2GN7okN3dfkquBDsuwGigS/BW+k3UGosB5CAwWINUsmtOwbwZdPMJuCXM+sG6nLuQn0HQRd9FlwJT5swqZsaFckpSvp6PrCEgpGU3TE3yJi5hAWR4SUH/WpBVqNiyeJwKTFPKxKWIAanyQ+oODrwMIICPNXqh9TJJLKUIVOpjEY1odWiJVyu2kfVTVi8b1Vkqdw706k2dtLUALYfa0HslKmU+qS4Ls0Whw2e5/kJYa/PNge9q4pdqH5qcwuTcbSTZ7H9RA9Q61++0Kx5Cbf1ypfx75KeJfIHlIPNmbEjU6m7jOU8jMxTCMI75hl+Z2wz7CML19a0Rxbw0o+YVTzI0ZLLnpsR0BHwz5GnbvUXVzs7sZwecIo3b7j6FSvo0HeZ0QD/lbDhqMkhdTiZGCMUT398w4wo6EP84c3cbWDNaV3fUsRfgUNtZswZCuybGk/2ssti7hMtwT/gC+0dfzeUW1ma76e8U2WYHI6sNh8a7ntCepPzfhIfFDg7563UoaYQRUt7RSPbVuYSnFItmgn69OBv25T/T2kJ9SZmhSV1sBGz0Fpuj//dOBCeYxSfdOU/Lc9kBBELw01LLMgCwLmlkLIRgY9OMPk6qdxyErnSGYTGwcW1Yp1aXVhX5fx3uWfpY/PfFubnAWaMfmUWarl2YZDtoLCaOmQkivEeVC7kYpHbf6/E/+udDRH+wV+ul7P/nIpQ+LNkLJ3GOajUmRTst4NrOFTOP51x6fYVkJVNEfxBzg96fFeIQZJz+YWBQu51FRkFnZw2Ur1JcX+Bbd57y 9IcR5tyj IeNW7/dozFUEkutWzqV2VAUT8MhGaTLOrVEm2VfmLDXN/X+8Qh+BKyxO60wt+6lY84PBs2XDImODE6fv00D7048HGpNch+4IhTpLJgj+ot7jIr30vpk3yOF9qZ6CdfqwZLnQQG7+OFr7xZboPVbcmja9Q2FA3kMiVLrqvL30kqldBhFC0GG7G4PitBFZ2Luu/6dGRrdGTNtMT8zwYXwLLk+B5fM6xFssMe16tT72DlHfgM531SirR8btMlxFvikXkwrsPc3m7ePfCu1sHM5gci+7j4JNWsOq14oLLPDZmzcmubUFGCtDN3BX3+1+B547zKwTxEhxyrZjgOnq5IZYCEuq0hxCt4//oWGflkxRaOv2ZuyEi0UYNs9IKBw== 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: On Wed, Sep 20, 2023 at 11:19=E2=80=AFPM Jaewon Kim wrote: > > As the legacy lru provides, the lru_gen needs some trace events for > debugging. > Hi Jaewon, thanks for adding this. > This commit introduces 2 trace events. > trace_mm_vmscan_lru_gen_scan > trace_mm_vmscan_lru_gen_evict > > Each event is similar to the following legacy events. > trace_mm_vmscan_lru_isolate, > trace_mm_vmscan_lru_shrink_[in]active > > Here's an example > mm_vmscan_lru_gen_scan: isolate_mode=3D0 classzone=3D1 order=3D9 nr_req= uested=3D4096 nr_scanned=3D431 nr_skipped=3D0 nr_taken=3D55 lru=3Danon > mm_vmscan_lru_gen_evict: nid=3D0 nr_reclaimed=3D42 nr_dirty=3D0 nr_writ= eback=3D0 nr_congested=3D0 nr_immediate=3D0 nr_activate_anon=3D13 nr_activa= te_file=3D0 nr_ref_keep=3D0 nr_unmap_fail=3D0 priority=3D2 flags=3DRECLAIM_= WB_ANON|RECLAIM_WB_ASYNC > mm_vmscan_lru_gen_scan: isolate_mode=3D0 classzone=3D1 order=3D9 nr_req= uested=3D4096 nr_scanned=3D66 nr_skipped=3D0 nr_taken=3D64 lru=3Dfile > mm_vmscan_lru_gen_evict: nid=3D0 nr_reclaimed=3D62 nr_dirty=3D0 nr_writ= eback=3D0 nr_congested=3D0 nr_immediate=3D0 nr_activate_anon=3D0 nr_activat= e_file=3D2 nr_ref_keep=3D0 nr_unmap_fail=3D0 priority=3D2 flags=3DRECLAIM_W= B_FILE|RECLAIM_WB_ASYNC > > Signed-off-by: Jaewon Kim > --- > v2: use condition and make it aligned > v1: introduce trace events > --- > include/trace/events/mmflags.h | 5 ++ > include/trace/events/vmscan.h | 98 ++++++++++++++++++++++++++++++++++ > mm/vmscan.c | 17 ++++-- > 3 files changed, 115 insertions(+), 5 deletions(-) > > diff --git a/include/trace/events/mmflags.h b/include/trace/events/mmflag= s.h > index 1478b9dd05fa..44e9b38f83e7 100644 > --- a/include/trace/events/mmflags.h > +++ b/include/trace/events/mmflags.h > @@ -274,6 +274,10 @@ IF_HAVE_VM_SOFTDIRTY(VM_SOFTDIRTY, "softdirty" )= \ > EM (LRU_ACTIVE_FILE, "active_file") \ > EMe(LRU_UNEVICTABLE, "unevictable") > > +#define LRU_GEN_NAMES \ > + EM (LRU_GEN_ANON, "anon") \ > + EMe(LRU_GEN_FILE, "file") > + > /* > * First define the enums in the above macros to be exported to userspac= e > * via TRACE_DEFINE_ENUM(). > @@ -288,6 +292,7 @@ COMPACTION_PRIORITY > /* COMPACTION_FEEDBACK are defines not enums. Not needed here. */ > ZONE_TYPE > LRU_NAMES > +LRU_GEN_NAMES > > /* > * Now redefine the EM() and EMe() macros to map the enums to the string= s > diff --git a/include/trace/events/vmscan.h b/include/trace/events/vmscan.= h > index d2123dd960d5..f0c3a4bd72db 100644 > --- a/include/trace/events/vmscan.h > +++ b/include/trace/events/vmscan.h > @@ -327,6 +327,57 @@ TRACE_EVENT(mm_vmscan_lru_isolate, > __print_symbolic(__entry->lru, LRU_NAMES)) > ); > > +TRACE_EVENT_CONDITION(mm_vmscan_lru_gen_scan, > + TP_PROTO(int highest_zoneidx, > + int order, > + unsigned long nr_requested, > + unsigned long nr_scanned, > + unsigned long nr_skipped, > + unsigned long nr_taken, > + isolate_mode_t isolate_mode, > + int lru), > + > + TP_ARGS(highest_zoneidx, order, nr_requested, nr_scanned, nr_skip= ped, nr_taken, isolate_mode, lru), > + > + TP_CONDITION(nr_scanned), > + > + TP_STRUCT__entry( > + __field(int, highest_zoneidx) > + __field(int, order) > + __field(unsigned long, nr_requested) > + __field(unsigned long, nr_scanned) > + __field(unsigned long, nr_skipped) > + __field(unsigned long, nr_taken) > + __field(unsigned int, isolate_mode) > + __field(int, lru) > + ), > + > + TP_fast_assign( > + __entry->highest_zoneidx =3D highest_zoneidx; > + __entry->order =3D order; > + __entry->nr_requested =3D nr_requested; > + __entry->nr_scanned =3D nr_scanned; > + __entry->nr_skipped =3D nr_skipped; > + __entry->nr_taken =3D nr_taken; > + __entry->isolate_mode =3D (__force unsigned int)isolate_m= ode; > + __entry->lru =3D lru; > + ), > + > + /* > + * classzone is previous name of the highest_zoneidx. > + * Reason not to change it is the ABI requirement of the tracepoi= nt. > + */ > + TP_printk("isolate_mode=3D%d classzone=3D%d order=3D%d nr_request= ed=3D%lu nr_scanned=3D%lu nr_skipped=3D%lu nr_taken=3D%lu lru=3D%s", > + __entry->isolate_mode, > + __entry->highest_zoneidx, > + __entry->order, > + __entry->nr_requested, > + __entry->nr_scanned, > + __entry->nr_skipped, > + __entry->nr_taken, > + __print_symbolic(__entry->lru, LRU_GEN_NAMES)) > +); > + > TRACE_EVENT(mm_vmscan_write_folio, > > TP_PROTO(struct folio *folio), > @@ -437,6 +488,53 @@ TRACE_EVENT(mm_vmscan_lru_shrink_active, > show_reclaim_flags(__entry->reclaim_flags)) > ); > > +TRACE_EVENT(mm_vmscan_lru_gen_evict, > + > + TP_PROTO(int nid, unsigned long nr_reclaimed, > + struct reclaim_stat *stat, int priority, int file), > + > + TP_ARGS(nid, nr_reclaimed, stat, priority, file), > + > + TP_STRUCT__entry( > + __field(unsigned long, nr_reclaimed) > + __field(unsigned long, nr_dirty) > + __field(unsigned long, nr_writeback) > + __field(unsigned long, nr_congested) > + __field(unsigned long, nr_immediate) > + __field(unsigned int, nr_activate0) > + __field(unsigned int, nr_activate1) > + __field(unsigned long, nr_ref_keep) > + __field(unsigned long, nr_unmap_fail) > + __field(int, nid) > + __field(int, priority) > + __field(int, reclaim_flags) > + ), > + > + TP_fast_assign( > + __entry->nid =3D nid; > + __entry->nr_reclaimed =3D nr_reclaimed; > + __entry->nr_dirty =3D stat->nr_dirty; > + __entry->nr_writeback =3D stat->nr_writeback; > + __entry->nr_congested =3D stat->nr_congested; > + __entry->nr_immediate =3D stat->nr_immediate; > + __entry->nr_activate0 =3D stat->nr_activate[0]; > + __entry->nr_activate1 =3D stat->nr_activate[1]; > + __entry->nr_ref_keep =3D stat->nr_ref_keep; > + __entry->nr_unmap_fail =3D stat->nr_unmap_fail; > + __entry->priority =3D priority; > + __entry->reclaim_flags =3D trace_reclaim_flags(file); > + ), > + > + TP_printk("nid=3D%d nr_reclaimed=3D%ld nr_dirty=3D%ld nr_writebac= k=3D%ld nr_congested=3D%ld nr_immediate=3D%ld nr_activate_anon=3D%d nr_acti= vate_file=3D%d nr_ref_keep=3D%ld nr_unmap_fail=3D%ld priority=3D%d flags=3D= %s", Many of these values are unsigned so I think many of these format specifiers should be %lu instead of %ld. > + __entry->nid, __entry->nr_reclaimed, > + __entry->nr_dirty, __entry->nr_writeback, > + __entry->nr_congested, __entry->nr_immediate, > + __entry->nr_activate0, __entry->nr_activate1, > + __entry->nr_ref_keep, __entry->nr_unmap_fail, > + __entry->priority, > + show_reclaim_flags(__entry->reclaim_flags)) > +); > + > TRACE_EVENT(mm_vmscan_node_reclaim_begin, > > TP_PROTO(int nid, int order, gfp_t gfp_flags), > diff --git a/mm/vmscan.c b/mm/vmscan.c > index 6f13394b112e..f453a0f8ceef 100644 > --- a/mm/vmscan.c > +++ b/mm/vmscan.c > @@ -5005,6 +5005,7 @@ static int scan_folios(struct lruvec *lruvec, struc= t scan_control *sc, > int sorted =3D 0; > int scanned =3D 0; > int isolated =3D 0; > + int skipped =3D 0; > int remaining =3D MAX_LRU_BATCH; > struct lru_gen_folio *lrugen =3D &lruvec->lrugen; > struct mem_cgroup *memcg =3D lruvec_memcg(lruvec); > @@ -5018,7 +5019,7 @@ static int scan_folios(struct lruvec *lruvec, struc= t scan_control *sc, > > for (i =3D MAX_NR_ZONES; i > 0; i--) { > LIST_HEAD(moved); > - int skipped =3D 0; > + int skipped_zone =3D 0; > int zone =3D (sc->reclaim_idx + i) % MAX_NR_ZONES; > struct list_head *head =3D &lrugen->folios[gen][type][zon= e]; > > @@ -5040,16 +5041,17 @@ static int scan_folios(struct lruvec *lruvec, str= uct scan_control *sc, > isolated +=3D delta; > } else { > list_move(&folio->lru, &moved); > - skipped +=3D delta; > + skipped_zone +=3D delta; > } > > - if (!--remaining || max(isolated, skipped) >=3D M= IN_LRU_BATCH) > + if (!--remaining || max(isolated, skipped_zone) >= =3D MIN_LRU_BATCH) > break; > } > > - if (skipped) { > + if (skipped_zone) { > list_splice(&moved, head); > - __count_zid_vm_events(PGSCAN_SKIP, zone, skipped)= ; > + __count_zid_vm_events(PGSCAN_SKIP, zone, skipped_= zone); > + skipped +=3D skipped_zone; > } > > if (!remaining || isolated >=3D MIN_LRU_BATCH) > @@ -5065,6 +5067,9 @@ static int scan_folios(struct lruvec *lruvec, struc= t scan_control *sc, > __count_memcg_events(memcg, PGREFILL, sorted); > __count_vm_events(PGSCAN_ANON + type, isolated); > > + trace_mm_vmscan_lru_gen_scan(sc->reclaim_idx, sc->order, MAX_LRU_= BATCH, > + scanned, skipped, isolated, > + sc->may_unmap ? 0 : ISOLATE_UNMAPPED, type); > /* > * There might not be eligible folios due to reclaim_idx. Check t= he > * remaining to prevent livelock if it's not making progress. > @@ -5194,6 +5199,8 @@ static int evict_folios(struct lruvec *lruvec, stru= ct scan_control *sc, int swap > retry: > reclaimed =3D shrink_folio_list(&list, pgdat, sc, &stat, false); > sc->nr_reclaimed +=3D reclaimed; > + trace_mm_vmscan_lru_gen_evict(pgdat->node_id, reclaimed, &stat, > + sc->priority, type); > > list_for_each_entry_safe_reverse(folio, next, &list, lru) { > if (!folio_evictable(folio)) { > -- > 2.17.1 >