From: Sergey Senozhatsky <senozhatsky@chromium.org>
To: Jenhao Chen <jenhaochen@google.com>
Cc: Sergey Senozhatsky <senozhatsky@chromium.org>,
Minchan Kim <minchan@kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
llvm@lists.linux.dev, minchan@google.com, liumartin@google.com,
benwei@google.com
Subject: Re: [PATCH] mm/zsmalloc: inline obj_malloc() and obj_free()
Date: Thu, 5 Nov 2026 20:09:34 +0900 [thread overview]
Message-ID: <auxjJapQ4j8518aH@google.com> (raw)
In-Reply-To: <20261105103947.7521-1-jenhaochen@google.com>
On (26/11/05 10:39), Jenhao Chen wrote:
> On (26/11/05 14:23), Sergey Senozhatsky wrote:
> > I suppose there is performance benefit?
> >
> > I guess I don't mind in principle, one thing to note is that this conflicts
> > with [1].
> >
> > [1] https://lore.kernel.org/linux-kernel/20261105044752.1997895-1-senozhatsky@chromium.org
>
> Hi Sergey,
Hello,
> Yes -- in a steady-state microbenchmark of paired alloc+write and free
> operations across 8 compressed object size classes (384..3136 B):
>
> 1. On current mm-new (zs_malloc + zs_obj_write + zs_free):
> - Clang 22 -O2: -7.7 (arm64) / -11.8 (x86_64) retired instructions
> per pair (-3.2% cycles on x86_64).
> - Clang 22 -O2 + CONFIG_AUTOFDO_CLANG: -13.0 (arm64) / -17.5 (x86_64)
> retired instructions per pair (-4.8% cycles on x86_64), while
> shrinking zs_malloc() from 2,872 B to 1,828 B on arm64 (-36%) and
> 2,088 B to 1,474 B on x86_64 (-29%).
> - GCC 15 -O2 (x86_64, without AutoFDO): GCC leaves both obj_malloc()
> (306 B) and obj_free() (120 B) out-of-line while inlining the
> single-caller slow path alloc_zspage() into zs_malloc(); the patch
> saves -23.7 retired instructions per pair and shrinks zs_malloc()
> from 1,738 B to 1,441 B (-17%).
Cool.
> 2. Rebased on top of [1] (zs_store + zs_free):
> In [PATCH 6/7], the new static obj_write() helper has two call sites
> in zs_store(), so both Clang 22 -O2 (360 B on arm64, 219 B on x86_64)
> and GCC 15 -O2 (obj_write.isra.0, 229 B on x86_64) leave obj_write()
> out-of-line as well. In the zs_store() fast path, obj_malloc() packs
> (m_zpdesc, obj, zspage->class) via location_to_obj(), and the
> out-of-line obj_write() immediately unpacks obj_to_location(),
> recomputes offset_in_page(class->size * obj_idx), and re-checks
> !ZsHugePage(zspage).
>
> If we also mark obj_write() __always_inline alongside obj_malloc()
> and obj_free() (with noinline on alloc_zspage()), the compiler CSEs
> those redundant operations across the fast path:
> - arm64 (Clang 22): -31.3 (-O2, -4.0%) / -34.7 (-O2 + AUTOFDO, -4.5%)
> retired instructions per zs_store() + zs_free() pair (vs. -8.4 for
> obj_malloc() alone), shrinking zs_store() under AUTOFDO from
> 3,144 B to 2,448 B (-22%).
> - x86_64 (Clang 22): -26.6 (-O2) / -31.8 (-O2 + AUTOFDO) retired
> instructions per pair (~4.0-4.5% latency reduction).
> - x86_64 (GCC 15 -O2): -37.1 retired instructions (-5.1%) and -5.3%
> latency (-5.5% cycles) per pair, while keeping zs_store() slightly
> smaller (1,997 B -> 1,943 B).
Great, I'd love to see that in v2 commit message.
> Would you prefer that I send v2 rebased on top of [1] (including
> __always_inline on obj_write()), or send v2 against current mm-new
> first?
If it doesn't trouble you too much, can we finalize [1] first so then
you can send your patch atop of it? I can ping you when [1] is done.
next prev parent reply other threads:[~2026-11-05 11:09 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-30 12:17 [PATCH] mm/zsmalloc: inline obj_malloc() and obj_free() Jenhao Chen
2026-11-05 5:23 ` Sergey Senozhatsky
2026-11-05 10:39 ` Jenhao Chen
2026-11-05 11:09 ` Sergey Senozhatsky [this message]
2026-11-06 1:12 ` Jenhao Chen
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=auxjJapQ4j8518aH@google.com \
--to=senozhatsky@chromium.org \
--cc=akpm@linux-foundation.org \
--cc=benwei@google.com \
--cc=jenhaochen@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=liumartin@google.com \
--cc=llvm@lists.linux.dev \
--cc=minchan@google.com \
--cc=minchan@kernel.org \
/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.