From: Baoquan He <bhe@redhat.com>
To: Kairui Song <ryncsn@gmail.com>
Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org,
akpm@linux-foundation.org, chrisl@kernel.org
Subject: Re: [PATCH 04/12] mm/swap: skip scanning cluster range if it's empty cluster
Date: Thu, 6 Feb 2025 09:40:57 +0800 [thread overview]
Message-ID: <Z6QTKQPKXDEpWWKb@fedora> (raw)
In-Reply-To: <CAMgjq7CYC4xfAkp9Y7g=3rw=iqTj_pQAjrnwDC1orkdUhnOCSQ@mail.gmail.com>
On 02/06/25 at 01:07am, Kairui Song wrote:
> On Wed, Feb 5, 2025 at 5:27 PM Baoquan He <bhe@redhat.com> wrote:
> >
> > Since ci->lock has been taken when isolating cluster from
> > si->free_clusters or taking si->percpu_cluster->next[order],
> > it's unnecessary to scan and check the cluster range availability
> > if i'ts empty cluster, and this can accelerate the huge page
> > swapping.
> >
> > Signed-off-by: Baoquan He <bhe@redhat.com>
> > ---
> > mm/swapfile.c | 3 +++
> > 1 file changed, 3 insertions(+)
> >
> > diff --git a/mm/swapfile.c b/mm/swapfile.c
> > index 9c9a4ec6d4c6..61efde853eea 100644
> > --- a/mm/swapfile.c
> > +++ b/mm/swapfile.c
> > @@ -729,6 +729,9 @@ static bool cluster_scan_range(struct swap_info_struct *si,
> > unsigned long offset, end = start + nr_pages;
> > unsigned char *map = si->swap_map;
> >
> > + if (cluster_is_empty(ci))
> > + return true;
> > +
>
> Hi Baoquan,
>
> Thanks for the series.
Thanks for your reviewing.
>
> Most commits are looking great, but this one is a bit questionable.
> cluster_scan_range is only called by alloc_swap_scan_cluster, and it
> already checks if the cluster has enough empty slots to use, so this
> might be redundant.
Hmm, maybe no. Assume we want to allocate 2M space on system with 4K
page size. Even if a empty cluster is taken into consideration,
cluster_scan_range() will loop 512 times to check if each slot is
available. That for sure is not necessary in the case, while the added
empty cluster checking is very cheap.
>
> It is possible that cluster_scan_range sees an empty cluster if the
> cluster lock was dropped for reclaiming HAS_CACHE, but the chance
> should be extremely low, that this might be a negative optimization.
It may be not like that. If it's empty cluster, the added checking will
return directly. Then 'need_reclaim' is kept false, there's no chance to
drop cluster lock to do reclaiming for HAS_CACHE. Means for empty
cluster scanning, the ci->lock is kept held. Not sure if I missed
anything.
Thanks
Baoquan
next prev parent reply other threads:[~2025-02-06 1:41 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-05 9:27 [PATCH 00/12] Tiny cleanup and improvements about SWAP code Baoquan He
2025-02-05 9:27 ` [PATCH 01/12] mm/swap_state.c: fix the obsolete code comment Baoquan He
2025-02-05 9:27 ` [PATCH 02/12] mm/swap_state.c: optimize the code in clear_shadow_from_swap_cache() Baoquan He
2025-02-05 9:27 ` [PATCH 03/12] mm/swap: remove SWAP_FLAG_PRIO_SHIFT Baoquan He
2025-02-05 9:27 ` [PATCH 04/12] mm/swap: skip scanning cluster range if it's empty cluster Baoquan He
2025-02-05 17:07 ` Kairui Song
2025-02-06 1:40 ` Baoquan He [this message]
2025-02-06 2:14 ` Kairui Song
2025-02-05 9:27 ` [PATCH 05/12] mm/swap: rename swap_is_has_cache() to swap_only_has_cache() Baoquan He
2025-02-05 9:27 ` [PATCH 06/12] mm/swapfile.c: update the code comment above swap_count_continued() Baoquan He
2025-02-06 7:50 ` Kairui Song
2025-02-07 2:46 ` Baoquan He
2025-02-07 2:50 ` [PATCH v2 " Baoquan He
2025-02-05 9:27 ` [PATCH 07/12] mm/swapfile.c: optimize code in setup_clusters() Baoquan He
2025-02-05 9:27 ` [PATCH 08/12] mm/swap_state.c: remove the meaningless code comment Baoquan He
2025-02-05 9:27 ` [PATCH 09/12] mm/swapfile.c: remove the unneeded checking Baoquan He
2025-02-05 9:27 ` [PATCH 10/12] mm/swap: rename swap_swapcount() to swap_entry_swapped() Baoquan He
2025-02-05 9:27 ` [PATCH 11/12] mm/swapfile.c: remove the incorrect code comment Baoquan He
2025-02-05 9:27 ` [PATCH 12/12] mm/swapfile.c: open code cluster_alloc_swap() Baoquan He
2025-02-07 9:36 ` [PATCH 00/12] Tiny cleanup and improvements about SWAP code Kairui Song
2025-02-08 1:08 ` Baoquan He
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=Z6QTKQPKXDEpWWKb@fedora \
--to=bhe@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=chrisl@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ryncsn@gmail.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.