From: Vishal Moola <vishal.moola@gmail.com>
To: Alex Shi <seakeel@gmail.com>
Cc: Sergey Senozhatsky <senozhatsky@chromium.org>,
Matthew Wilcox <willy@infradead.org>,
Yosry Ahmed <yosryahmed@google.com>,
Andrew Morton <akpm@linux-foundation.org>,
alexs@kernel.org, Vitaly Wool <vitaly.wool@konsulko.com>,
Miaohe Lin <linmiaohe@huawei.com>,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
minchan@kernel.org, david@redhat.com, 42.hyeyoo@gmail.com,
nphamcs@gmail.com, Dan Streetman <ddstreet@ieee.org>,
Seth Jennings <sjenning@redhat.com>
Subject: Re: [PATCH v5 00/21] mm/zsmalloc: add zpdesc memory descriptor for zswap.zpool
Date: Wed, 4 Sep 2024 12:51:44 -0700 [thread overview]
Message-ID: <66d8ba53.170a0220.844a7.1d81@mx.google.com> (raw)
In-Reply-To: <9a6e3169-2ebd-47a5-b2e6-953a8a6730db@gmail.com>
On Thu, Aug 29, 2024 at 05:42:06PM +0800, Alex Shi wrote:
>
>
> On 8/28/24 7:19 AM, Vishal Moola wrote:
> > On Wed, Aug 14, 2024 at 03:03:54PM +0900, Sergey Senozhatsky wrote:
> >> On (24/08/08 04:37), Matthew Wilcox wrote:
> >> [..]
> >>>> So I guess if we have something
> >>>>
> >>>> struct zspage {
> >>>> ..
> >>>> struct zpdesc *first_desc;
> >>>> ..
> >>>> }
> >>>>
> >>>> and we "chain" zpdesc-s to form a zspage, and make each of them point to
> >>>> a corresponding struct page (memdesc -> *page), then it'll resemble current
> >>>> zsmalloc and should work for everyone? I also assume for zspdesc-s zsmalloc
> >>>> will need to maintain a dedicated kmem_cache?
> >>>
> >>> Right, we could do that. Each memdesc has to be a multiple of 16 bytes,
> >>> sp we'd be doing something like allocating 32 bytes for each page.
> >>> Is there really 32 bytes of information that we want to store for
> >>> each page? Or could we store all of the information in (a somewhat
> >>> larger) zspage? Assuming we allocate 3 pages per zspage, if we allocate
> >>> an extra 64 bytes in the zspage, we've saved 32 bytes per zspage.
> >>
> >> I certainly like (and appreciate) the approach that saves us
> >> some bytes here and there. zsmalloc page can consist of 1 to
> >> up to CONFIG_ZSMALLOC_CHAIN_SIZE (max 16) physical pages. I'm
> >> trying to understand (in pseudo-C code) what does a "somewhat larger
> >> zspage" mean. A fixed size array (given that we know the max number
> >> of physical pages) per-zspage?
> >
> > I haven't had the opportunity to respond until now as I was on vacation.
> >
> > With the current approach in a memdesc world, we would do the following:
> >
> > 1) kmem_cache_alloc() every single Zpdesc
> > 2) Allocate a memdesc/page that points to its own Zpdesc
> > 3) Access/Track Zpdescs directly
> > 4) Use those Zpdescs to build a Zspage
> >
> > An alternative approach would move more metadata storage from a Zpdesc
> > into a Zspage instead. That extreme would leave us with:
> >
> > 1) kmem_cache_alloc() once for a Zspage
> > 2) Allocate a memdesc/page that points to the Zspage
> > 3) Use the Zspage to access/track its own subpages (through some magic
> > we would have to figure out)
> > 4) Zpdescs are just Zspages (since all the information would be in a Zspage)
> >
> > IMO, we should introduce zpdescs first, then start to shift
> > metadata from "struct zpdesc" into "struct zspage" until we no longer
> > need "struct zpdesc". My big concern is whether or not this patchset works
> > towards those goals. Will it make consolidating the metadata easier? And are
> > these goals feasible (while maintaining the wins of zsmalloc)? Or should we
> > aim to leave zsmalloc as it is currently implemented?
>
> Uh, correct me if I am wrong.
>
> IMHO, regarding what this patchset does, it abstracts the memory descriptor usage
> for zswap/zram.
Sorry, I misunderstood the patchset. I thought it was creating a
descriptor specifically for zsmalloc, when it seems like this is supposed to
be a generic descriptor for all zpool allocators. The code comments and commit
subjects are misleading and should be changed to reflect that.
I'm onboard for using zpdesc for zbud and z3fold as well (or we'd have to come
up with some other plan for them as well). Once we have a plan all the
maintainers agree on we can all be on our merry way :)
The questions for all the zpool allocator maintainers are:
1) Does your allocator need the space its using in struct page (aka
would it need a descriptor in a memdesc world)?
2) Is it feasible to store the information elsewhere (outside of struct
page)? And how much effort would that code conversion be?
Thoughts? Seth/Dan, Vitaly/Miahoe, and Sergey?
> The descriptor still overlays the struct page; nothing has changed
> in that regard. What this patchset accomplishes is the use of folios in the guts
> to save some code size, and the introduction of a new concept, zpdesc.
> This patchset is just an initial step; it does not bias the potential changes to
> kmem_alloc or larger zspage modifications. In fact, both approaches require this
> fundamental abstract concept: zpdesc.
next prev parent reply other threads:[~2024-09-04 19:51 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-06 2:21 alexs
2024-08-06 2:22 ` alexs
2024-08-06 2:22 ` [PATCH v5 01/21] " alexs
2024-08-06 2:22 ` [PATCH v5 02/21] mm/zsmalloc: use zpdesc in trylock_zspage()/lock_zspage() alexs
2024-08-06 2:22 ` [PATCH v5 03/21] mm/zsmalloc: convert __zs_map_object/__zs_unmap_object to use zpdesc alexs
2024-08-06 2:22 ` [PATCH v5 04/21] mm/zsmalloc: add and use pfn/zpdesc seeking funcs alexs
2024-08-06 2:22 ` [PATCH v5 05/21] mm/zsmalloc: convert obj_malloc() to use zpdesc alexs
2024-08-06 2:22 ` [PATCH v5 06/21] mm/zsmalloc: convert create_page_chain() and its users " alexs
2024-08-06 2:22 ` [PATCH v5 07/21] mm/zsmalloc: convert obj_allocated() and related helpers " alexs
2024-08-06 2:22 ` [PATCH v5 08/21] mm/zsmalloc: convert init_zspage() " alexs
2024-08-06 2:22 ` [PATCH v5 09/21] mm/zsmalloc: convert obj_to_page() and zs_free() " alexs
2024-08-06 2:22 ` [PATCH v5 10/21] mm/zsmalloc: add zpdesc_is_isolated()/zpdesc_zone() helper for zs_page_migrate() alexs
2024-08-06 2:22 ` [PATCH v5 11/21] mm/zsmalloc: rename reset_page to reset_zpdesc and use zpdesc in it alexs
2024-08-06 2:22 ` [PATCH v5 12/21] mm/zsmalloc: convert __free_zspage() to use zdsesc alexs
2024-08-06 2:23 ` [PATCH v5 13/21] mm/zsmalloc: convert location_to_obj() to take zpdesc alexs
2024-08-06 2:23 ` [PATCH v5 14/21] mm/zsmalloc: convert migrate_zspage() to use zpdesc alexs
2024-08-06 2:23 ` [PATCH v5 15/21] mm/zsmalloc: convert get_zspage() to take zpdesc alexs
2024-08-06 2:23 ` [PATCH v5 16/21] mm/zsmalloc: convert SetZsPageMovable and remove unused funcs alexs
2024-08-06 2:23 ` [PATCH v5 17/21] mm/zsmalloc: convert get/set_first_obj_offset() to take zpdesc alexs
2024-08-06 2:23 ` [PATCH v5 18/21] mm/zsmalloc: introduce __zpdesc_clear_movable alexs
2024-08-06 2:23 ` [PATCH v5 19/21] mm/zsmalloc: introduce __zpdesc_clear/set_zsmalloc() alexs
2024-08-06 2:23 ` [PATCH v5 20/21] mm/zsmalloc: introduce zpdesc_clear_first() helper alexs
2024-08-06 2:23 ` [PATCH v5 21/21] mm/zsmalloc: update comments for page->zpdesc changes alexs
[not found] ` <20240806123213.2a747a8321bdf452b3307fa9@linux-foundation.org>
[not found] ` <CAJD7tkakcaLVWi0viUqaW0K81VoCuGmkCHN4KQXp5+SSJLMB9g@mail.gmail.com>
[not found] ` <20240807051754.GA428000@google.com>
[not found] ` <ZrQ9lrZKWdPR7Zfu@casper.infradead.org>
2024-08-09 2:32 ` [PATCH v5 00/21] mm/zsmalloc: add zpdesc memory descriptor for zswap.zpool Alex Shi
2024-08-15 3:13 ` Sergey Senozhatsky
2024-08-15 3:50 ` Alex Shi
2024-08-14 6:03 ` Sergey Senozhatsky
2024-08-27 23:19 ` Vishal Moola
2024-08-29 9:42 ` Alex Shi
2024-09-04 19:51 ` Vishal Moola [this message]
2024-09-04 20:21 ` Yosry Ahmed
2024-09-03 3:20 ` Sergey Senozhatsky
2024-09-03 17:35 ` Vishal Moola
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=66d8ba53.170a0220.844a7.1d81@mx.google.com \
--to=vishal.moola@gmail.com \
--cc=42.hyeyoo@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=alexs@kernel.org \
--cc=david@redhat.com \
--cc=ddstreet@ieee.org \
--cc=linmiaohe@huawei.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=minchan@kernel.org \
--cc=nphamcs@gmail.com \
--cc=seakeel@gmail.com \
--cc=senozhatsky@chromium.org \
--cc=sjenning@redhat.com \
--cc=vitaly.wool@konsulko.com \
--cc=willy@infradead.org \
--cc=yosryahmed@google.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