From: Baoquan He <bhe@redhat.com>
To: Kairui Song <ryncsn@gmail.com>
Cc: linux-mm@kvack.org, akpm@linux-foundation.org, chrisl@kernel.org,
baohua@kernel.org, shikemeng@huaweicloud.com, nphamcs@gmail.com
Subject: Re: [PATCH] mm/swapfile.c: select the swap device with default priority round robin
Date: Thu, 25 Sep 2025 14:18:49 +0800 [thread overview]
Message-ID: <aNTeyRLCRFN4kcdT@MiWiFi-R3L-srv> (raw)
In-Reply-To: <CAMgjq7CtBRjwxCp=HvW5xZUGg-5MgKLOHy2tJ+0GC7KmA1BNjw@mail.gmail.com>
On 09/25/25 at 12:36pm, Kairui Song wrote:
> On Wed, Sep 24, 2025 at 6:15 PM Baoquan He <bhe@redhat.com> wrote:
......
> > vm-scability test:
> > ==================
> > Test with:
> > usemem --init-time -O -y -x -n 31 2G (4G memcg, zram as swap)
> > Before: After:
> > System time: 637.92 s 526.74 s
> > Sum Throughput: 3546.56 MB/s 4207.56 MB/s
> > Single process Throughput: 114.40 MB/s 135.72 MB/s
> > free latency: 10138455.99 us 6810119.01 us
> >
> > Suggested-by: Chris Li <chrisl@kernel.org>
> > Signed-off-by: Baoquan He <bhe@redhat.com>
> > ---
> > include/linux/swap.h | 11 +-----
> > mm/swapfile.c | 94 +++++++-------------------------------------
> > 2 files changed, 16 insertions(+), 89 deletions(-)
>
> Hi Baoquan,
>
> Thanks to the patch! The node plist thing always looked confusing to me.
Thanks.
>
> >
> > diff --git a/include/linux/swap.h b/include/linux/swap.h
> > index 3473e4247ca3..f72c8e5e0635 100644
> > --- a/include/linux/swap.h
> > +++ b/include/linux/swap.h
> > @@ -337,16 +337,7 @@ struct swap_info_struct {
> > struct work_struct discard_work; /* discard worker */
> > struct work_struct reclaim_work; /* reclaim worker */
> > struct list_head discard_clusters; /* discard clusters list */
> > - struct plist_node avail_lists[]; /*
> > - * entries in swap_avail_heads, one
> > - * entry per node.
> > - * Must be last as the number of the
> > - * array is nr_node_ids, which is not
> > - * a fixed value so have to allocate
> > - * dynamically.
> > - * And it has to be an array so that
> > - * plist_for_each_* can work.
> > - */
> > + struct plist_node avail_list; /* entry in swap_avail_head */
> > };
> >
> > static inline swp_entry_t page_swap_entry(struct page *page)
> > diff --git a/mm/swapfile.c b/mm/swapfile.c
> > index b4f3cc712580..d8a54e5af16d 100644
> > --- a/mm/swapfile.c
> > +++ b/mm/swapfile.c
> > @@ -73,7 +73,7 @@ atomic_long_t nr_swap_pages;
> > EXPORT_SYMBOL_GPL(nr_swap_pages);
> > /* protected with swap_lock. reading in vm_swap_full() doesn't need lock */
> > long total_swap_pages;
> > -static int least_priority = -1;
> > +#define DEF_SWAP_PRIO -1
> > unsigned long swapfile_maximum_size;
> > #ifdef CONFIG_MIGRATION
> > bool swap_migration_ad_supported;
> > @@ -102,7 +102,7 @@ static PLIST_HEAD(swap_active_head);
> > * is held and the locking order requires swap_lock to be taken
> > * before any swap_info_struct->lock.
> > */
> > -static struct plist_head *swap_avail_heads;
> > +static PLIST_HEAD(swap_avail_head);
> > static DEFINE_SPINLOCK(swap_avail_lock);
> >
> > static struct swap_info_struct *swap_info[MAX_SWAPFILES];
> > @@ -995,7 +995,6 @@ static unsigned long cluster_alloc_swap_entry(struct swap_info_struct *si, int o
> > /* SWAP_USAGE_OFFLIST_BIT can only be set by this helper. */
> > static void del_from_avail_list(struct swap_info_struct *si, bool swapoff)
> > {
> > - int nid;
> > unsigned long pages;
> >
> > spin_lock(&swap_avail_lock);
> > @@ -1007,7 +1006,7 @@ static void del_from_avail_list(struct swap_info_struct *si, bool swapoff)
> > * swap_avail_lock, to ensure the result can be seen by
> > * add_to_avail_list.
> > */
> > - lockdep_assert_held(&si->lock);
> > + //lockdep_assert_held(&si->lock);
>
> If this needs to be removed, then it doesn't seem to comply with the
> comment above?
>
> Here we are modifying si->flags, which is supposed to be protected by si lock.
You are right, I was wrong when changing code and debugging, will add it
back in v2. Thanks a lot for careful checking.
prev parent reply other threads:[~2025-09-25 6:19 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-24 9:17 [PATCH] mm/swapfile.c: select the swap device with default priority round robin Baoquan He
2025-09-24 10:23 ` Baoquan He
2025-09-24 15:41 ` YoungJun Park
2025-09-25 2:24 ` Baoquan He
2025-09-24 15:52 ` YoungJun Park
2025-09-25 4:10 ` Baoquan He
2025-09-25 4:23 ` Baoquan He
2025-09-24 15:54 ` Chris Li
2025-09-24 16:06 ` Chris Li
2025-09-25 2:15 ` Baoquan He
2025-09-25 18:31 ` Chris Li
2025-09-25 1:55 ` Baoquan He
2025-09-25 18:25 ` Chris Li
2025-09-26 15:31 ` Baoquan He
2025-09-27 4:46 ` Chris Li
2025-09-28 2:14 ` Baoquan He
2025-09-24 16:34 ` YoungJun Park
2025-09-25 0:24 ` Baoquan He
2025-09-25 4:36 ` Kairui Song
2025-09-25 6:18 ` Baoquan He [this message]
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=aNTeyRLCRFN4kcdT@MiWiFi-R3L-srv \
--to=bhe@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=baohua@kernel.org \
--cc=chrisl@kernel.org \
--cc=linux-mm@kvack.org \
--cc=nphamcs@gmail.com \
--cc=ryncsn@gmail.com \
--cc=shikemeng@huaweicloud.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.