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 46A0DE8181C for ; Tue, 26 Sep 2023 04:43:02 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 932B08D0013; Tue, 26 Sep 2023 00:43:01 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8E2DA8D0005; Tue, 26 Sep 2023 00:43:01 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7AAAB8D0013; Tue, 26 Sep 2023 00:43:01 -0400 (EDT) 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 626978D0005 for ; Tue, 26 Sep 2023 00:43:01 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 26DB080EA9 for ; Tue, 26 Sep 2023 04:43:01 +0000 (UTC) X-FDA: 81277503762.05.2347290 Received: from mail-qt1-f170.google.com (mail-qt1-f170.google.com [209.85.160.170]) by imf08.hostedemail.com (Postfix) with ESMTP id 684BE160004 for ; Tue, 26 Sep 2023 04:42:59 +0000 (UTC) Authentication-Results: imf08.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=pQ7qiN7H; spf=pass (imf08.hostedemail.com: domain of yuzhao@google.com designates 209.85.160.170 as permitted sender) smtp.mailfrom=yuzhao@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1695703379; 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=hoC6U6DormUl1mocoqw5nM9OGVZ4Fofl8JzZojtmuKQ=; b=wTe3nqYJzG7ZajnB/kTFq9ppw4SIztyyVa8qBzuJ/MRi0Uu3QjGg5ufUv6gfCuWHWcuzkB wbnj4ChILlU/546Lz6Y2g2Ld3Jjpuh7194qy3LFXYnbQjrPHAR7KB9N7hfwrzJOSwyAdsQ d7DNa8v5g/yqq5aEJXMu65zF5+GPKlU= ARC-Authentication-Results: i=1; imf08.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=pQ7qiN7H; spf=pass (imf08.hostedemail.com: domain of yuzhao@google.com designates 209.85.160.170 as permitted sender) smtp.mailfrom=yuzhao@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1695703379; a=rsa-sha256; cv=none; b=0dOY1zqfYB+ThAkugQpGoGpb1cL6Vc35x0EDACUwf5Qbj5wms/N36CTUOtdILNjsMx7h3Y E/PnUuFUU+RQn53gt8mwuKSPdT/ub2EBKU0Bl/+/+hvXsyfwt5ItxjCpZ/CXUyfM86XLLd 3P7yySr1/v5CfjVJ1GLlSKSGy9+kdhQ= Received: by mail-qt1-f170.google.com with SMTP id d75a77b69052e-418157e979eso164641cf.1 for ; Mon, 25 Sep 2023 21:42:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1695703378; x=1696308178; 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=hoC6U6DormUl1mocoqw5nM9OGVZ4Fofl8JzZojtmuKQ=; b=pQ7qiN7HY8WWJ/AEwt1K+aRtWQ7BAy3jRAZrGX7MGQGBMOVMplQfZl1L/p2RGxhNIM va/n9A9BI0PQBTLEmASQ2WXwCP5AIBHtaM70PFIJ8NtYbuklpDBYqeTdQz9W0YGv6cWH K1JgyCKdsdAUeacZToJB765M3wqZa3kflq5w1a9NzDvFHkVEL0c9u3H1KAniarUKb6dQ WXnFoz0CWH/3GQRwNIFDXzpx8b27xYl/HYgMByrNakjwvYPTVvItb0wIvct1KvHvu0kM VAiEHXjNQ/24i8eE10WhmI7zRoZmK+jhX++nf0mV0EevARwj1dr1ExfQ4oWbcNm8cKM0 G6mQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695703378; x=1696308178; 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=hoC6U6DormUl1mocoqw5nM9OGVZ4Fofl8JzZojtmuKQ=; b=IK1kCGi+LiF4ZMnXVusHx+20OaVMBUJje9mVzo70FFLS6l3Wo0Ds3u9b7vBbOSK5Rn 0QCUjnlyKFpXCrAsNNefKl1nKIWZ2jDQx3DjyfmDI2Hr8KijQwWP32z7CjHf9zAe/w1V t40dGK+vguKmAuXyV9UZucwW4HqiHKY5T7/95nefBFD5HambSNLSer58qIoTZZaVdjgl VmwTxkx32w3Nwko0+aG1KCsHonmfTok/8s15p6ksvmakTpy0DwC6PWWIiMIMi8S5hPob QIyi90+2f6dMxWs6ggq61QJOSP4ZrlCmvbZr8OuZcYuymF9n8yK0MAbQRDQYFVFLx8Fm 5sMQ== X-Gm-Message-State: AOJu0YyOeSIV+7DSmKtHVR+owGdT1aXw1xQYvg+OoroCCHkPjLgsRnlC XQ7S2a6kEqMqhzNvI7nvXQm6UPa0JntNZGTrhtsXFQ== X-Google-Smtp-Source: AGHT+IHg9BZE9kehIkRwunfBeTpf0rW+DMKNfVOg2JTfPkGQzEpOViVbp2YQwA4/jXtxdK9JJGB6bA5dfxOG9Z9XsrE= X-Received: by 2002:a05:622a:5cf:b0:403:e1d1:8b63 with SMTP id d15-20020a05622a05cf00b00403e1d18b63mr205845qtb.24.1695703378283; Mon, 25 Sep 2023 21:42:58 -0700 (PDT) MIME-Version: 1.0 References: <20230926042250.6028-1-jaewon31.kim@samsung.com> In-Reply-To: <20230926042250.6028-1-jaewon31.kim@samsung.com> From: Yu Zhao Date: Mon, 25 Sep 2023 22:42:21 -0600 Message-ID: Subject: Re: [PATCH v4] vmscan: add trace events for lru_gen To: Jaewon Kim Cc: rostedt@goodmis.org, tjmercier@google.com, kaleshsingh@google.com, akpm@linux-foundation.org, vbabka@suse.cz, hannes@cmpxchg.org, sj@kernel.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: 684BE160004 X-Rspam-User: X-Stat-Signature: 9zebhjqyscekbtc81qhrzd14475b6n43 X-Rspamd-Server: rspam01 X-HE-Tag: 1695703379-319622 X-HE-Meta: U2FsdGVkX18pR6tODZJqb20ZUvvpwRs0r3sgsIhI8IsWSToMxJkexVlEexi7Z3DGGhlT/mXEnb3fT4ibCw2p0P7BOcBEvuquA+Lzq4nkpnUbOt1VvARSL0pa5YNGIqT43r1Icrnm69LTGBDGb/1ST1Jg3aUSnnb5HyrcuZGHl2rfYVdb//UEEpG8fojY+nZJRXiaSfneP8BmJ5fp2zK5e5/4h/SxfchTjrWuoOHXep0Ix5oRaDKIqAolSAGQQQK2WjWhD4q8pMkdUKxURYJ/gLmJqLCmpetQnrBw/tVn4qh5RH9TkmMoGDiM/U32bNbrm2VGQ7/FhOqCLBQMRWvc7LOaXvRu4cp1otblkRIGvLqbO8XiyvmzVltPSBJf1B4y//uL7Oggz4q8/FXC2JOOAe03f+VaxoY85jkOMpwLjCcfCPlt/DkUWX9Jhfb4tmSxbi2qO+KB49uXg/NM/M4i0iSN0PQbFjxQ++rCpN6ai7HhNnAfEs1VXsJw7Rz1TJqgkkAlwZy0rTIW8WU1h7uW/ZOjlmKZB0TMkO4sROXJX4C6YhLzHwXAOXPtvu1d/qxyIsXYIf8dFgQlGb1Goz9oC2/rsPd1pt0FKkxTP0Sh+RT4zTEdhKnhRKCnUDWsxb9G1Vpvx/bhkl2Oslf47Qwp+qV7AM0lvr0co87PP+J47Fn/yRf4+EGM1XajLfGqG+OYjFWeHtHRFd/rvcmxPnQuelG0n0uhDtBgO5zjzqG7K9j6p4Oo8UrR64GwFqaYFSNoQeQ2lmgK/LOnKZsE2UB3FteNK8XFvc3Fcn0WuIxhN0XxnxTkdLxfFOduwghEiBd2uo9pfgH7ZvDBjzvII15q+r9S6Ztb0beLfXUcDoupYhJZx8BQns+sqYqnbgfs/TZ8XpxTq2AsjV1cw4Dn5+d9+23Bt3fWUmBflacSDlKdCD62jKGQXlOXnJLWlG+mror9DOqEDIKr6R0esaMqttf PNf5WRFi lStVo9lyC95mt5n2+cEwqEiidJ6Y2AFS7g8oRFBHQgVqinnrAL0vcX1Tv2380ypIhSAMJoFYBksRAIj55gDGw05u7ht8nInWj3VgQqQeO8cHFkdmUxXniX0nnsLP0BqRLKSzc2SKYZTb+J1o/TZULGoGAah+6TH7mKl7aM6TFCjCowJnP7WjqGLGKKueSCU5U1qoD53GGf8A6F51VJjrWrqvLzxCcpmNbCkhL7l9XhjkfIlcx1wMmzaL3E6Nmik/LlvdrRjM970DoiUHQiz8teIwBHJA3fXrHtTOjV4zH9FSgJMuQecxUOq9NsrYcyn7G/Dr9w4l+gk8V177ZWxDPt2NSwa77uxIoNGpZ43YNns1QCtE3mUcV6fQQLQ== 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 Mon, Sep 25, 2023 at 10:20=E2=80=AFPM Jaewon Kim wrote: > > As the legacy lru provides, the lru_gen needs some trace events for > debugging. > > 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 We should just reuse trace_mm_vmscan_lru_isolate and trace_mm_vmscan_lru_shrink_inactive instead of adding new tracepoints. To reuse trace_mm_vmscan_lru_isolate, we'd just need to append two new names to LRU_NAMES. The naming of trace_mm_vmscan_lru_shrink_inactive might seem confusing but it's how MGLRU maintains the compatibility, e.g., the existing active/inactive counters in /proc/vmstat. > Here's an example > mm_vmscan_lru_gen_scan: classzone=3D2 order=3D0 nr_requested=3D4096 nr_= scanned=3D64 nr_skipped=3D0 nr_taken=3D64 lru=3Danon > mm_vmscan_lru_gen_evict: nid=3D0 nr_reclaimed=3D64 nr_dirty=3D0 nr_writ= eback=3D0 nr_congested=3D0 nr_immediate=3D0 nr_activate_anon=3D0 nr_activat= e_file=3D0 nr_ref_keep=3D0 nr_unmap_fail=3D0 priority=3D2 flags=3DRECLAIM_W= B_ANON|RECLAIM_WB_ASYNC > mm_vmscan_lru_gen_scan: classzone=3D1 order=3D0 nr_requested=3D4096 nr_= scanned=3D64 nr_skipped=3D0 nr_taken=3D64 lru=3Dfile > mm_vmscan_lru_gen_evict: nid=3D0 nr_reclaimed=3D64 nr_dirty=3D0 nr_writ= eback=3D0 nr_congested=3D0 nr_immediate=3D0 nr_activate_anon=3D0 nr_activat= e_file=3D0 nr_ref_keep=3D0 nr_unmap_fail=3D0 priority=3D12 flags=3DRECLAIM_= WB_FILE|RECLAIM_WB_ASYNC > > Signed-off-by: Jaewon Kim > --- > v4: wrap with #ifdef CONFIG_LRU_GEN > v3: change printk format > v2: use condition and make it aligned > v1: introduce trace events > --- > include/trace/events/mmflags.h | 9 ++++ > include/trace/events/vmscan.h | 96 ++++++++++++++++++++++++++++++++++ > mm/vmscan.c | 20 +++++-- > 3 files changed, 120 insertions(+), 5 deletions(-) > > diff --git a/include/trace/events/mmflags.h b/include/trace/events/mmflag= s.h > index 1478b9dd05fa..6dfe85bd4e81 100644 > --- a/include/trace/events/mmflags.h > +++ b/include/trace/events/mmflags.h > @@ -274,6 +274,12 @@ IF_HAVE_VM_SOFTDIRTY(VM_SOFTDIRTY, "softdirty" )= \ > EM (LRU_ACTIVE_FILE, "active_file") \ > EMe(LRU_UNEVICTABLE, "unevictable") > > +#ifdef CONFIG_LRU_GEN > +#define LRU_GEN_NAMES \ > + EM (LRU_GEN_ANON, "anon") \ > + EMe(LRU_GEN_FILE, "file") > +#endif > + > /* > * First define the enums in the above macros to be exported to userspac= e > * via TRACE_DEFINE_ENUM(). > @@ -288,6 +294,9 @@ COMPACTION_PRIORITY > /* COMPACTION_FEEDBACK are defines not enums. Not needed here. */ > ZONE_TYPE > LRU_NAMES > +#ifdef CONFIG_LRU_GEN > +LRU_GEN_NAMES > +#endif > > /* > * 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..2080ef742f89 100644 > --- a/include/trace/events/vmscan.h > +++ b/include/trace/events/vmscan.h > @@ -327,6 +327,102 @@ TRACE_EVENT(mm_vmscan_lru_isolate, > __print_symbolic(__entry->lru, LRU_NAMES)) > ); > > +#ifdef CONFIG_LRU_GEN > +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, > + int lru), > + > + TP_ARGS(highest_zoneidx, order, nr_requested, nr_scanned, nr_skip= ped, nr_taken, 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(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->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("classzone=3D%d order=3D%d nr_requested=3D%lu nr_scanne= d=3D%lu nr_skipped=3D%lu nr_taken=3D%lu lru=3D%s", > + __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_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%lu nr_dirty=3D%lu nr_writebac= k=3D%lu nr_congested=3D%lu nr_immediate=3D%lu nr_activate_anon=3D%u nr_acti= vate_file=3D%u nr_ref_keep=3D%lu nr_unmap_fail=3D%lu priority=3D%d flags=3D= %s", > + __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)) > +); > +#endif > + > TRACE_EVENT(mm_vmscan_write_folio, > > TP_PROTO(struct folio *folio), > diff --git a/mm/vmscan.c b/mm/vmscan.c > index 6f13394b112e..0c8b48bcb461 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,10 @@ static int scan_folios(struct lruvec *lruvec, stru= ct scan_control *sc, > __count_memcg_events(memcg, PGREFILL, sorted); > __count_vm_events(PGSCAN_ANON + type, isolated); > > +#ifdef CONFIG_LRU_GEN > + trace_mm_vmscan_lru_gen_scan(sc->reclaim_idx, sc->order, MAX_LRU_= BATCH, > + scanned, skipped, isolated, type); > +#endif These functions are already within CONFIG_LRU_GEN. > /* > * 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 +5200,10 @@ static int evict_folios(struct lruvec *lruvec, str= uct scan_control *sc, int swap > retry: > reclaimed =3D shrink_folio_list(&list, pgdat, sc, &stat, false); > sc->nr_reclaimed +=3D reclaimed; > +#ifdef CONFIG_LRU_GEN > + trace_mm_vmscan_lru_gen_evict(pgdat->node_id, reclaimed, &stat, > + sc->priority, type); > +#endif Ditto.