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 A6067C47089 for ; Tue, 6 Dec 2022 01:19:45 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 173C08E0002; Mon, 5 Dec 2022 20:19:45 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 0FD168E0001; Mon, 5 Dec 2022 20:19:45 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id EDF738E0002; Mon, 5 Dec 2022 20:19:44 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id DA8DD8E0001 for ; Mon, 5 Dec 2022 20:19:44 -0500 (EST) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id AAF68406AD for ; Tue, 6 Dec 2022 01:19:44 +0000 (UTC) X-FDA: 80210124288.14.7795674 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) by imf18.hostedemail.com (Postfix) with ESMTP id 463051C000A for ; Tue, 6 Dec 2022 01:19:44 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=i0QYamkr; spf=pass (imf18.hostedemail.com: domain of nphamcs@gmail.com designates 209.85.221.41 as permitted sender) smtp.mailfrom=nphamcs@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1670289584; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=4mAE9Cy7oNxJnxpSaA1J9vUhDcN8zWhn+hWYAUaRDNs=; b=mGEKFgFy5rDMrYAQMoxjYARIU37ZHgOz0InZ1orrxsuE720LrmYI7W4FzR2MDablNRiIN5 NpZg1wyHKcQW1grcDYIgT9AIUbTe5BaWqO3hCI2p3bdI7SIp/0BP54LvV+4yDxfylL4sRC hCskXP0rmdiJkSSCv3trzwNGmdHUQcY= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=i0QYamkr; spf=pass (imf18.hostedemail.com: domain of nphamcs@gmail.com designates 209.85.221.41 as permitted sender) smtp.mailfrom=nphamcs@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1670289584; a=rsa-sha256; cv=none; b=esp5mnJitzF7rFdVTRJvfzQ8k1Qeb/w2z+xpczH2OiSuJNS3Cw2TyJh7hAYRTtJABZxslJ rRqGFqZ15ggcfwuG7Zpema3KAHnhDjjL/ad6HgGb8QBW9Cu5lUXmYCWibUq10dY3dmS/Lx gboby/4R0DZgwZPdtRruZda6K+JvGeg= Received: by mail-wr1-f41.google.com with SMTP id f18so21415381wrj.5 for ; Mon, 05 Dec 2022 17:19:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=4mAE9Cy7oNxJnxpSaA1J9vUhDcN8zWhn+hWYAUaRDNs=; b=i0QYamkrJKMytE9MfY7AowXpxy7wFOWk68qiIIBRxQe2+jyEObDajwbmE51yh6dqYv iCKt8eG0AdakMaE11jJdJLS7flSlAW0kcB3CUYfSqsWFJierlNoaJkbdSqNij7mavfVu eA/sqDWXGGEtWG02EvBvAeDoTtj7PTkH9VpVe4+FqdKDuupUdOwwPwuH3m0+ZIkWTLoz XbsWDYFw3TqW3x0sByhT98iqftC1TGp4FEME394vPz6EiNonNMJ750Ziullr9E1Q1APh rjZeBFqL7bmW6H2nEcA1YnmgtnypFsK+nS1LYfxPQ6/xaQ6wUTyRWPyzGRFaVGhs8SCw jD1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=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=4mAE9Cy7oNxJnxpSaA1J9vUhDcN8zWhn+hWYAUaRDNs=; b=IotuhaBylGif6u2BjZo3DHR5OXHVFIWZ5WRgVp0YvniVWirIy79PqFeMQ8jGfolpku HaIqYrGr1i301WCMdc2djA/kiHE3Gj4qUYr8kjEb5+b11Jl1KM/JwPun5XIRZsk7nGbD lazurHtYQwusLpDT0M90sDfCdb7SKytGTvvcsyPcv32OLTf9hFTb+tIE5MqXkkvh1+2k ebLDt3/1IN9/oIrLTCG/ui2AJxI9jS9q0MK0MGfv/L434U6QN/MuDBtjJJmPWO81nZqN VViEzlgrxhOKek+OAciCphFYyrxGAtC+kaN7Ld+zA8dwjqXYVkOW//5ANGbs+poTk6WC 626g== X-Gm-Message-State: ANoB5plRNXCzA2hrQEYUVMYNWvMC7fLTF4KRBBLubluXHr43RsUX1CmB tORAmk9Tpdly9e0Vsm7wH1Jymu+DSHU20SPUUqY= X-Google-Smtp-Source: AA0mqf4P54W5Fg7yuTZ5ndhW4xSyVPLEEPH1LjBD5etFjsIG9bpuJvwleyrzE2ZBb2JTpfCc8UYz9+/ZbBROy7lnN0g= X-Received: by 2002:a05:6000:1d8b:b0:242:750a:5b56 with SMTP id bk11-20020a0560001d8b00b00242750a5b56mr681537wrb.271.1670289582818; Mon, 05 Dec 2022 17:19:42 -0800 (PST) MIME-Version: 1.0 References: <20221205175140.1543229-1-nphamcs@gmail.com> <20221205175140.1543229-3-nphamcs@gmail.com> In-Reply-To: From: Nhat Pham Date: Mon, 5 Dec 2022 17:19:31 -0800 Message-ID: Subject: Re: [PATCH v2 2/4] workingset: refactor LRU refault to expose refault recency check To: Yu Zhao Cc: akpm@linux-foundation.org, hannes@cmpxchg.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, bfoster@redhat.com, willy@infradead.org, kernel-team@meta.com Content-Type: text/plain; charset="UTF-8" X-Spamd-Result: default: False [-2.90 / 9.00]; BAYES_HAM(-6.00)[99.99%]; SORBS_IRL_BL(3.00)[209.85.221.41:from]; BAD_REP_POLICIES(0.10)[]; RCVD_NO_TLS_LAST(0.10)[]; MIME_GOOD(-0.10)[text/plain]; MIME_TRACE(0.00)[0:+]; RCVD_COUNT_TWO(0.00)[2]; FROM_EQ_ENVFROM(0.00)[]; DMARC_POLICY_ALLOW(0.00)[gmail.com,none]; RCPT_COUNT_SEVEN(0.00)[8]; DKIM_TRACE(0.00)[gmail.com:+]; TO_MATCH_ENVRCPT_SOME(0.00)[]; ARC_SIGNED(0.00)[hostedemail.com:s=arc-20220608:i=1]; FROM_HAS_DN(0.00)[]; R_DKIM_ALLOW(0.00)[gmail.com:s=20210112]; MID_RHS_MATCH_FROMTLD(0.00)[]; TO_DN_SOME(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[linux-mm@kvack.org]; R_SPF_ALLOW(0.00)[+ip4:209.85.128.0/17:c]; ARC_NA(0.00)[] X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 463051C000A X-Stat-Signature: yeez35sq11ti8g8woxqfqo6h6ccyrok9 X-HE-Tag: 1670289584-36299 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, Dec 5, 2022 at 3:49 PM Yu Zhao wrote: > > On Mon, Dec 5, 2022 at 10:51 AM Nhat Pham wrote: > > > > In preparation for computing recently evicted pages in cachestat, > > refactor workingset_refault and lru_gen_refault to expose a helper > > function that would test if an evicted page is recently evicted. > > > > Signed-off-by: Nhat Pham > > --- > > include/linux/swap.h | 1 + > > mm/workingset.c | 143 +++++++++++++++++++++++++++++-------------- > > 2 files changed, 99 insertions(+), 45 deletions(-) > > > > diff --git a/include/linux/swap.h b/include/linux/swap.h > > index a18cf4b7c724..dae6f6f955eb 100644 > > --- a/include/linux/swap.h > > +++ b/include/linux/swap.h > > @@ -361,6 +361,7 @@ static inline void folio_set_swap_entry(struct folio *folio, swp_entry_t entry) > > } > > > > /* linux/mm/workingset.c */ > > +bool workingset_test_recent(void *shadow, bool file, bool *workingset); > > void workingset_age_nonresident(struct lruvec *lruvec, unsigned long nr_pages); > > void *workingset_eviction(struct folio *folio, struct mem_cgroup *target_memcg); > > void workingset_refault(struct folio *folio, void *shadow); > > diff --git a/mm/workingset.c b/mm/workingset.c > > index 79585d55c45d..44b331ce3040 100644 > > --- a/mm/workingset.c > > +++ b/mm/workingset.c > > @@ -244,6 +244,30 @@ static void *lru_gen_eviction(struct folio *folio) > > return pack_shadow(mem_cgroup_id(memcg), pgdat, token, refs); > > } > > > > +/* > > + * Test if the folio is recently evicted. > > + * > > + * As a side effect, also populates the references with > > + * values unpacked from the shadow of the evicted folio. > > + */ > > +static bool lru_gen_test_recent(void *shadow, bool file, int *memcgid, > > + struct pglist_data **pgdat, unsigned long *token, bool *workingset) > > +{ > > + struct mem_cgroup *eviction_memcg; > > + struct lruvec *lruvec; > > + struct lru_gen_struct *lrugen; > > + unsigned long min_seq; > > + > > + unpack_shadow(shadow, memcgid, pgdat, token, workingset); > > + eviction_memcg = mem_cgroup_from_id(*memcgid); > > + > > + lruvec = mem_cgroup_lruvec(eviction_memcg, *pgdat); > > + lrugen = &lruvec->lrugen; > > + > > + min_seq = READ_ONCE(lrugen->min_seq[file]); > > + return !((*token >> LRU_REFS_WIDTH) != (min_seq & (EVICTION_MASK >> LRU_REFS_WIDTH))); > > +} > > Nit: not refactoring actually looks cleaner to me -- there are only a > few lines of duplicated code and you can get rid of 4 parameters > including the unused workingset in the next patch. (resending this because I forgot to forward to the rest of the group!) Thanks for the comment, Yu! Personally, I prefer refactoring this piece of logic - I do think that it is cleaner than copying the logic into the syscall implementation. I believe that if I don't do the refactoring, I'll have to repeat the unused parameters in the syscall, and make unpack_shadow a non-static function (along with all the locally defined macros like WORKINGSET_SHIFT). I think it would get quite messy there too. But more importantly, I'm a bit concerned that the logic for determining the recency of the eviction might change in the future, which would break the cachestat syscall unknowingly... Let me know what you think about this, Yu!