From: Barry Song <21cnbao@gmail.com>
To: Ryan Roberts <ryan.roberts@arm.com>
Cc: akpm@linux-foundation.org, linux-mm@kvack.org,
baolin.wang@linux.alibaba.com, chrisl@kernel.org,
david@redhat.com, hanchuanhua@oppo.com, hannes@cmpxchg.org,
hughd@google.com, kasong@tencent.com, surenb@google.com,
v-songbaohua@oppo.com, willy@infradead.org, xiang@kernel.org,
ying.huang@intel.com, yosryahmed@google.com, yuzhao@google.com,
ziy@nvidia.com, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 5/5] mm: add per-order mTHP swpin_refault counter
Date: Fri, 12 Apr 2024 11:01:41 +1200 [thread overview]
Message-ID: <CAGsJ_4y07BjVQRG01jEVg3Guc8rxSWFhSO7fzSAZ8XD0YWusLQ@mail.gmail.com> (raw)
In-Reply-To: <226c4935-def2-4d72-b0bb-308578d1e0b1@arm.com>
On Fri, Apr 12, 2024 at 3:53 AM Ryan Roberts <ryan.roberts@arm.com> wrote:
>
> On 09/04/2024 09:26, Barry Song wrote:
> > From: Barry Song <v-songbaohua@oppo.com>
> >
> > Currently, we are handling the scenario where we've hit a
> > large folio in the swapcache, and the reclaiming process
> > for this large folio is still ongoing.
> >
> > Signed-off-by: Barry Song <v-songbaohua@oppo.com>
> > ---
> > include/linux/huge_mm.h | 1 +
> > mm/huge_memory.c | 2 ++
> > mm/memory.c | 1 +
> > 3 files changed, 4 insertions(+)
> >
> > diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h
> > index c8256af83e33..b67294d5814f 100644
> > --- a/include/linux/huge_mm.h
> > +++ b/include/linux/huge_mm.h
> > @@ -269,6 +269,7 @@ enum mthp_stat_item {
> > MTHP_STAT_ANON_ALLOC_FALLBACK,
> > MTHP_STAT_ANON_SWPOUT,
> > MTHP_STAT_ANON_SWPOUT_FALLBACK,
> > + MTHP_STAT_ANON_SWPIN_REFAULT,
>
> I don't see any equivalent counter for small folios. Is there an analogue?
Indeed, we don't count refaults for small folios, as their refault
mechanism is much
simpler compared to large folios. Implementing this counter can enhance the
system's visibility to users.
Personally, having this counter and observing a non-zero value greatly enhances
my confidence when debugging this refault series. Otherwise, it feels like being
blind to what's happening inside the system :-)
>
> > __MTHP_STAT_COUNT
> > };
> >
> > diff --git a/mm/huge_memory.c b/mm/huge_memory.c
> > index d8d2ed80b0bf..fb95345b0bde 100644
> > --- a/mm/huge_memory.c
> > +++ b/mm/huge_memory.c
> > @@ -556,12 +556,14 @@ DEFINE_MTHP_STAT_ATTR(anon_alloc, MTHP_STAT_ANON_ALLOC);
> > DEFINE_MTHP_STAT_ATTR(anon_alloc_fallback, MTHP_STAT_ANON_ALLOC_FALLBACK);
> > DEFINE_MTHP_STAT_ATTR(anon_swpout, MTHP_STAT_ANON_SWPOUT);
> > DEFINE_MTHP_STAT_ATTR(anon_swpout_fallback, MTHP_STAT_ANON_SWPOUT_FALLBACK);
> > +DEFINE_MTHP_STAT_ATTR(anon_swpin_refault, MTHP_STAT_ANON_SWPIN_REFAULT);
> >
> > static struct attribute *stats_attrs[] = {
> > &anon_alloc_attr.attr,
> > &anon_alloc_fallback_attr.attr,
> > &anon_swpout_attr.attr,
> > &anon_swpout_fallback_attr.attr,
> > + &anon_swpin_refault_attr.attr,
> > NULL,
> > };
> >
> > diff --git a/mm/memory.c b/mm/memory.c
> > index 9818dc1893c8..acc023795a4d 100644
> > --- a/mm/memory.c
> > +++ b/mm/memory.c
> > @@ -4167,6 +4167,7 @@ vm_fault_t do_swap_page(struct vm_fault *vmf)
> > nr_pages = nr;
> > entry = folio->swap;
> > page = &folio->page;
> > + count_mthp_stat(folio_order(folio), MTHP_STAT_ANON_SWPIN_REFAULT);
>
> I don't think this is the point of no return yet? There's the pte_same() check
> immediately below (although I've suggested that needs to be moved to earlier),
> but also the folio_test_uptodate() check. Perhaps this should go after that?
>
swap_pte_batch() == nr_pages should have passed the test for pte_same.
folio_test_uptodate(folio)) should be also unlikely to be true as we are
not reading from swap devices for refault case.
but i agree we can move all the refault handling after those two "goto
out_nomap".
> > }
> >
> > check_pte:
>
Thanks
Barry
next prev parent reply other threads:[~2024-04-11 23:01 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-09 8:26 [PATCH v2 0/5] large folios swap-in: handle refault cases first Barry Song
2024-04-09 8:26 ` [PATCH v2 1/5] mm: swap: introduce swap_free_nr() for batched swap_free() Barry Song
2024-04-10 23:37 ` SeongJae Park
2024-04-11 1:27 ` Barry Song
2024-04-11 14:30 ` Ryan Roberts
2024-04-12 2:07 ` Chuanhua Han
2024-04-12 11:28 ` Ryan Roberts
2024-04-12 11:38 ` Chuanhua Han
2024-04-15 6:17 ` Huang, Ying
2024-04-15 7:04 ` Barry Song
2024-04-15 8:06 ` Barry Song
2024-04-15 8:19 ` Huang, Ying
2024-04-15 8:34 ` Barry Song
2024-04-15 8:51 ` Huang, Ying
2024-04-15 9:01 ` Barry Song
2024-04-16 1:40 ` Huang, Ying
2024-04-16 2:08 ` Barry Song
2024-04-16 3:11 ` Huang, Ying
2024-04-16 4:32 ` Barry Song
2024-04-17 0:32 ` Huang, Ying
2024-04-17 1:35 ` Barry Song
2024-04-18 5:27 ` Barry Song
2024-04-18 8:55 ` Huang, Ying
2024-04-18 9:14 ` Barry Song
2024-05-02 23:05 ` Barry Song
2024-04-09 8:26 ` [PATCH v2 2/5] mm: swap: make should_try_to_free_swap() support large-folio Barry Song
2024-04-15 7:11 ` Huang, Ying
2024-04-09 8:26 ` [PATCH v2 3/5] mm: swap_pte_batch: add an output argument to reture if all swap entries are exclusive Barry Song
2024-04-11 14:54 ` Ryan Roberts
2024-04-11 15:00 ` David Hildenbrand
2024-04-11 15:36 ` Ryan Roberts
2024-04-09 8:26 ` [PATCH v2 4/5] mm: swap: entirely map large folios found in swapcache Barry Song
2024-04-11 15:33 ` Ryan Roberts
2024-04-11 23:30 ` Barry Song
2024-04-12 11:31 ` Ryan Roberts
2024-04-15 8:37 ` Huang, Ying
2024-04-15 8:53 ` Barry Song
2024-04-16 2:25 ` Huang, Ying
2024-04-16 2:36 ` Barry Song
2024-04-16 2:39 ` Huang, Ying
2024-04-16 2:52 ` Barry Song
2024-04-16 3:17 ` Huang, Ying
2024-04-16 4:40 ` Barry Song
2024-04-18 9:55 ` Barry Song
2024-04-09 8:26 ` [PATCH v2 5/5] mm: add per-order mTHP swpin_refault counter Barry Song
2024-04-10 23:15 ` SeongJae Park
2024-04-11 1:46 ` Barry Song
2024-04-11 16:14 ` SeongJae Park
2024-04-11 15:53 ` Ryan Roberts
2024-04-11 23:01 ` Barry Song [this message]
2024-04-17 0:45 ` Huang, Ying
2024-04-17 1:16 ` Barry Song
2024-04-17 1:38 ` Huang, Ying
2024-04-17 1:48 ` Barry Song
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAGsJ_4y07BjVQRG01jEVg3Guc8rxSWFhSO7fzSAZ8XD0YWusLQ@mail.gmail.com \
--to=21cnbao@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=baolin.wang@linux.alibaba.com \
--cc=chrisl@kernel.org \
--cc=david@redhat.com \
--cc=hanchuanhua@oppo.com \
--cc=hannes@cmpxchg.org \
--cc=hughd@google.com \
--cc=kasong@tencent.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ryan.roberts@arm.com \
--cc=surenb@google.com \
--cc=v-songbaohua@oppo.com \
--cc=willy@infradead.org \
--cc=xiang@kernel.org \
--cc=ying.huang@intel.com \
--cc=yosryahmed@google.com \
--cc=yuzhao@google.com \
--cc=ziy@nvidia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox