All of lore.kernel.org
 help / color / mirror / Atom feed
From: Baoquan He <baoquan.he@linux.dev>
To: Nhat Pham <nphamcs@gmail.com>
Cc: Chris Li <chrisl@kernel.org>,
	linux-mm@kvack.org, akpm@linux-foundation.org,
	kasong@tencent.com, shikemeng@huaweicloud.com, baohua@kernel.org,
	youngjun.park@lge.com, hannes@cmpxchg.org, yosry@kernel.org,
	chengming.zhou@linux.dev, linux-kernel@vger.kernel.org
Subject: Re: [RFC PATCH 00/10] mm/swap: ghost swapfile with backend switching via Redirect entries
Date: Fri, 17 Jul 2026 22:27:02 +0800	[thread overview]
Message-ID: <alo7tuEKLjA0IZQe@MiWiFi-R3L-srv> (raw)
In-Reply-To: <CAKEwX=NXJ1LKQOA8Qy_4YOS6v+jGbAJnbD5K0=jNbgC8Da0iKw@mail.gmail.com>

On 07/16/26 at 09:49am, Nhat Pham wrote:
> On Wed, Jul 15, 2026 at 4:04 PM Chris Li <chrisl@kernel.org> wrote:
> >
> > On Wed, Jul 15, 2026 at 9:18 AM Nhat Pham <nphamcs@gmail.com> wrote:
> > >
> > > On Wed, Jul 15, 2026 at 7:19 AM Baoquan He <baoquan.he@linux.dev> wrote:
> > > >
> > > > On 07/15/26 at 07:21pm, Baoquan He wrote:
> > > > > Hi Nhat,
> > > > >
> > > > > On 07/12/26 at 05:02pm, Nhat Pham wrote:
> > > > > > On Thu, Jul 9, 2026 at 4:39 AM Baoquan He <baoquan.he@linux.dev> wrote:
> > > > > ...snip...
> > > > >
> > > > > Sorry, I won't reply to each comment individually. I'll just leave
> > > > > a summary reply at the end.
> > > > >
> > > > > > > I think VSS goes beyond solving the "zswap without backing store"
> > > > > > > problem — it is fundamentally an architectural restructuring of the
> > > > > > > swap subsystem, with virtual swap as a first-class abstraction layered
> > > > > > > above physical devices.  That is both its strength (comprehensive,
> > > > > > > future-proof) and its trade-off (more invasive to existing paths).
> > > > > > > I respect that.
> > > > > > >
> > > > > > > My goal with ghost swap is different: address the immediate pain point
> > > > > > > with the smallest possible change to the existing infrastructure.  Both
> > > > > > > approaches have value, and I hope the community discussion will help
> > > > > > > identify the right balance.
> > > > > >
> > > > > > That's because I believe "zswap without backing store" just by itself
> > > > > > is a bit narrow of a problem. It's certainly nice to fix, but it's
> > > > > > more of a nuisance - you already have userspace hacks for it (as I
> > > > > > mentioned above).
> > > > > >
> > > > > > The problem I'm trying to solve is to support:
> > > > > >
> > > > > > 1. Writeback.
> > > > > >
> > > > > > 2. Dynamicity.
> > > > > >
> > > > > > 3. Decoupled backends.
> > > > > >
> > > > > > all of which are motivated by real production issues, not some
> > > > > > theoretical problems. I'm concerned that if we only focus on the third
> > > > > > goal, we'll dig ourself into a hole that prevents us from solving 1
> > > > > > and 2 efficiently down the line.
> > > > > >
> > > > > > >
> > > > > > > Thank you again for the detailed review — it has already clarified
> > > > > > > which parts of the design need more thought and documentation, and will
> > > > > > > make the next version stronger.
> > > > > >
> > > > > > I really don't want to be antagonistic, but I hope you'd take the real
> > > > > > production pains that we've had (and have tried to communicate in
> > > > > > multiple mailing threads, across a timeline of almost 2 years at this
> > > > > > point) seriously.
> > > > > >
> > > > > > Collaborations should go both ways. I've gone out of my way to try to
> > > > > > address the concerns of various parties, from spending *multiple
> > > > > > weeks* testing and investigating performance regression on zram
> > > > > > backend (which my company does not use), to a rewrite/re-design of
> > > > > > virtual swap to accommodate parties who wished to opt out of virtual
> > > > > > swap for now.
> > > > > >
> > > > > > I hope you can extend the same good will to our needs :) I've included
> > > > > > you (and other swap folks such as Chris and Kairui) in my cc-lists. If
> > > > > > you have concerns, you could have commented. Instead, you decided to
> > > > > > send a patch series, which is basically just the ghost swapfile, with
> > > > > > a bit of afterthought to handle writeback and dynamicity, rather
> > > > > > inefficiently (no dedicated per-CPU caching), and not even correctly
> > > > > > (the lack of rmap means swapoff / swap-cache-only physical swap slot
> > > > > > reclaim is broken).
> > > > > >
> > > > > > I respect you and Chris very much to assume bad faith, but please work
> > > > > > with me rather than against me.
> > > > >
> > > > > Before I get into the technical discussion, I want to address something
> > > > > you raised at the end of your reply — the concern that I'm working
> > > > > against you rather than with you. Our paths in MM simply haven't crossed
> > > > > much until now. I can't think of reason why I would want to target you
> > > > > or your work.
> > > > >
> > > > > I respect the work you've put into VSS. I did check it. Honestly I am not
> > > > > fan of it. In your v2: 2244 insertions, 250 deletions, 15 files touched,
> > > > > a new 455-line header (vswap.h). While swap subsystem has just absorbed the
> > > > > swap table series. Then another 2200 lines of architectural restructuring
> > > > > on top is added. Not sure if anybody raise concern about your solution,
> > > > > or anybody suggests other directions.
> > >
> > > Yes, it's a big patch series. But as you pointed out earlier, it
> > > solves a larger problem with a single coherent design :)
> > >
> > > > >
> > > > > I posted ghost swap because I saw a concrete, narrow problem that I believed
> > > > > could be solved with a small change. It makes decoupling and dynamic
> > > > > growth with the minimum possible mechanism.  Writeback is explicitly deferred
> > > > >  — not because it's unimportant, but because it's a separate problem that
> > > > > shouldn't block the common case. With my shallow knowledge, it's optimal
> > > > > solution to the encountered problem. If you agree, you can change to
> > >
> > > The problem is not the lack of writeback support per se. I understand
> > > that sometimes pieces of a design can be deferred to a follow-up patch
> > > series.
> > >
> > > I'm more concerned that the ghost direction so far does not seriously
> > > take it into account in the design at all, which might make it either
> > > impossible or very hard to redesign around down the line. I don't want
> > > to rip a huge chunk of it out down the line later - we just avoided it
> > > with the swap table with Kairui's proposal.
> > >
> > > >
> > > > Part of above sentence is missing. I meant if you agree on the ghost
> > > > solution, you can change to take its way and continue, just add me to
> > > > CC. Or we can work together.
> > >
> > > How about this - let's solve one piece of the puzzle together, one at a time.
> > >
> > > First, your optimization patch series. Have you taken a look at my
> > > proposal ([1])? I believe that design should be cleaner, while still
> > > allowing you to put it all you want to get (elimination of xarray
> > > being the chief benefit), without requiring you to modify swap cache
> > > and swap count operations (since you don't have to move the metadata
> > > in and out of struct zswap_entry). It does require a bit more code to
> > > dynamically allocated the backend array, but should be trivial IMHO.
> > >
> > > [1]: https://lore.kernel.org/all/CAKEwX=OvR7GbU_9f2h_MtU4m0g6s-esHmNQKYNhJz610M0P3Sw@mail.gmail.com/
> >
> > Hi Nhat,
> >
> > Sorry for the late reply. I've been busy and just saw this.  First
> > impression looks promising, it is better than any previous version of
> > VS. Thanks for incorporating Kairui's feedback. Please give me some
> > time to sleep on it. I will get back to you on that.
> 
> Please take a look. I was waiting for your response as well :)
> 
> The patch series is large, yes, but it's an RFC meant to show case the
> final end design.
> 
> >
> > > Next, if you just want pure ghost swapfile without writeback support,
> > > maybe something similar to the first 2 patches in my RFC? i.e up to
> > > this patch:
> > >
> > > https://lore.kernel.org/all/20260612193738.2183968-3-nphamcs@gmail.com/
> > >
> > > I'm sure you could find issues/bugs in it too with some extensive
> > > testing (a lot of my performance testing is done on the entire series
> > > as a whole), but from a design point of view it should achieve what us
> > > both want, no? It's literally just a ghost swap device - most of the
> > > other design elements of vswap (the new charging behavior, rmap,
> > > support for writeback) comes in latter patches. I think the difference
> > > is:
> > >
> > > 1. It's transparently dynamic, whereas in your RFC it's driven by a
> > > userspace knob. Do you think there are inherent values in a userspace
> > > knob?
> > >
> > > 2. The address space can also shrink when swap usage drops at runtime.
> > >
> > > 3. The dynamic address space is backed by an xarray. Note that it's
> > > structured differently than zswap's one (it's an xarray pointing to
> > > clusters). If you have rationales or numbers to show that vmalloc
> > > array is superior (while still support the kernel-driven expansion and
> > > shrink), please let me know.
> > >
> > > If you have no faith in me and do not like my code, you can take the
> > > code as a starting point, or just the idea, and drive it yourself. Or
> > > let me know if you're unhappy with any piece of it - we can discuss
> > > further.
> > >
> > > >
> > > > > Otherwise, please continue to push virtual swap forward. I'll stop and
> > > > > wait.
> > >
> > > Look man, I care about the problems being solved and I'm a sucker for
> > > good ideas, but I'm not married to anything, be it my code or my
> > > ideas.
> > >
> > > I have literally dropped my old code and adopted Kairui's suggestions
> > > after playing with it and liking it, to make sure every party's
> > > concern is met.
> > >
> > > If you have concerns, please let me know, or keep sending code if you
> >
> > May I add one wishlist item related to ghost swapfile here? I will
> > reply to your VS thread for other feedback.
> >
> > For the ghost swapfile usage case (no writeback). Can VS support this
> > usage case while maintaining per-swap-slot metadata usage comparable
> > to the ghost swapfile implementation? If we have to put a number to
> > it, let's say the increase in metadata is less than 1 byte per swap
> > slot compared to the ghost swapfile implementation.
> >
> > We have large deployments of ghost swapfile in the fleet. I want an
> > upstream aligned solution that does not increase the existing memory
> > overhead compared to the current ghost swapfile deployment, for that
> > usage. As you know, memory pricing and optimization pressure are high.
> > The ghost swapfile patch itself is relatively simple. If VS can
> > address this usage case, it will remove a lot of incentive to explore
> > ghost swapfile-like solutions.
> 
> Hi Chris. I have some thoughts on this - let me know what you think.
> 
> I understand the memory overhead discussion here. In the case where
> vswap slot is backed by a real swapfile, I have not figured out a way
> to make the overhead disappear yet. The damn rmap is very annoying - I
> have some strategies to get around it for certain operations, but none
> of it can be done without a full fledged patch series of its own.
> 
> However, with the ghost zswap swapfile backend specifically, I think
> the overhead is going to be negligible compared to the status quo
> upstream (things might be different internally at Google - please let
> me know!). This is because the main remaining per-slot overhead comes
> in the form of one per-cluster array to store the "backend", here it's
> going to store struct zswap_entry pointers. This is not extra overhead
> though, because it basically replaces the xarray (that you added all
> those years ago)!
> 
> The rest is small stuff here and there that is not O(slot) but rather
> O(cluster). For example one struct rcu_head per cluster, xarray
> overhead for the dynamicization - note that this xarray manages
> cluster, not slot. I think that's all, unless I miss something.
> 
> So if you don't writeback, i.e no physical swapfile, then I think
> there is negligible overhead (no rmap and all that jazz).
> 
> Does this sound acceptable to you?
> 
> Baoquan, what do you think?

Thanks for the thoughtful reply and the very constructive proposal.
Your suggestion about moving forward in small, incremental steps in
last mail is really appealing — I think that's the right way to make
progress on this. I need a little time to think it through more
carefully before giving you a proper response. Will get back to you
soon.

Thanks
Baoquan

  parent reply	other threads:[~2026-07-17 14:27 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-07  8:26 [RFC PATCH 00/10] mm/swap: ghost swapfile with backend switching via Redirect entries Baoquan He
2026-07-07  8:26 ` [RFC PATCH 01/10] mm: ghost swapfile support for zswap Baoquan He
2026-07-07  8:26 ` [RFC PATCH 02/10] mm/swap_table: add Redirect entry encoding for ghost swap backend switching Baoquan He
2026-07-07  8:26 ` [RFC PATCH 03/10] mm/swap: add redirect_xa field and ghost redirect helper declarations Baoquan He
2026-07-07  8:26 ` [RFC PATCH 04/10] mm/swapfile: implement ghost redirect helpers and free-path cascade Baoquan He
2026-07-07  8:26 ` [RFC PATCH 05/10] mm/swap_state: restore Redirect entry when swap cache folio is removed Baoquan He
2026-07-07  8:26 ` [RFC PATCH 06/10] mm/zswap: implement ghost-to-physical writeback for backend switching Baoquan He
2026-07-07  8:26 ` [RFC PATCH 07/10] mm/page_io: forward ghost swap reads to physical device via Redirect Baoquan He
2026-07-07  8:26 ` [RFC PATCH 08/10] mm/swapfile: manage ghost cluster_info via lazy vmalloc Baoquan He
2026-07-07  8:26 ` [RFC PATCH 09/10] mm/swapfile: implement swap_ghost_extend_max() for dynamic growth Baoquan He
2026-07-07 22:36   ` Nhat Pham
2026-07-09 14:52     ` Baoquan He
2026-07-10  1:11       ` Nhat Pham
2026-07-11  9:02   ` Chris Li
2026-07-07  8:26 ` [RFC PATCH 10/10] mm/swapfile: add sysfs interface for ghost swap extension Baoquan He
2026-07-07  8:56 ` [RFC PATCH 00/10] mm/swap: ghost swapfile with backend switching via Redirect entries Baoquan He
2026-07-07 21:23 ` Nhat Pham
2026-07-07 21:25   ` Nhat Pham
2026-07-09 11:38   ` Baoquan He
2026-07-13  0:02     ` Nhat Pham
2026-07-13 17:47       ` Chris Li
2026-07-15 11:21       ` Baoquan He
2026-07-15 14:19         ` Baoquan He
2026-07-15 16:17           ` Nhat Pham
2026-07-15 23:03             ` Chris Li
2026-07-16 16:49               ` Nhat Pham
2026-07-16 16:58                 ` Nhat Pham
2026-07-17 14:27                 ` Baoquan He [this message]
2026-07-17 16:02                   ` Nhat Pham
2026-07-11  8:49 ` Chris Li

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=alo7tuEKLjA0IZQe@MiWiFi-R3L-srv \
    --to=baoquan.he@linux.dev \
    --cc=akpm@linux-foundation.org \
    --cc=baohua@kernel.org \
    --cc=chengming.zhou@linux.dev \
    --cc=chrisl@kernel.org \
    --cc=hannes@cmpxchg.org \
    --cc=kasong@tencent.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=nphamcs@gmail.com \
    --cc=shikemeng@huaweicloud.com \
    --cc=yosry@kernel.org \
    --cc=youngjun.park@lge.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.