From: Peter Zijlstra <peterz@infradead.org>
To: Fangrui Song <maskray@sourceware.org>
Cc: linux-toolchains@vger.kernel.org,
linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: Concerns about SFrame viability for userspace stack walking
Date: Thu, 30 Oct 2025 11:26:26 +0100 [thread overview]
Message-ID: <20251030102626.GR3245006@noisy.programming.kicks-ass.net> (raw)
In-Reply-To: <3xd4fqvwflefvsjjoagytoi3y3sf7lxqjremhe2zo5tounihe4@3ftafgryadsr>
On Wed, Oct 29, 2025 at 11:53:32PM -0700, Fangrui Song wrote:
> I've been following the SFrame discussion and wanted to share some
> concerns about its viability for userspace adoption, based on concrete
> measurements and comparison with existing compact unwind
> implementations in LLVM.
>
> **Size overhead concerns**
>
> Measurements on a x86-64 clang binary show that .sframe (8.87 MiB) is
> approximately 10% larger than the combined size of .eh_frame and
> .eh_frame_hdr (8.06 MiB total). This is problematic because .eh_frame
> cannot be eliminated - it contains essential information for restoring
> callee-saved registers, LSDA, and personality information needed for
> debugging (e.g. reading local variables in a coredump) and C++
> exception handling.
>
> This means adopting SFrame would result in carrying both formats, with
> a large net size increase.
So the SFrame unwinder is fairly simple code, but what does an .eh_frame
unwinder look like? Having read most of the links in your email, there
seem to be references to DWARF byte code interpreters and stuff like
that.
So while the format compactness is one aspect, the thing I find no
mention of, is the unwinder complexity.
There have been a number of attempts to do DWARF unwinding in
kernel space and while I think some architecture do it, x86_64 has had
very bad experiences with it. At some point I think Linus just said no
more, no DWARF, not ever.
So from a situation where compilers were generating bad CFI unwind
information, a horribly complex unwinder that could crash the kernel
harder than the thing it was reporting on and manual CFI annotations in
assembly that were never quite right, objtool and ORC were born.
The win was many:
- simple robust unwinder
- no manual CFI annotations that could be wrong
- no reliance on compilers that would get it wrong
and I think this is where SFrame came from. I don't think the x86_64
Linux kernel will ever natively adopt SFrame, ORC works really well for
us.
However, we do need something to unwind userspace. And yes, personally
I'm in the frame-pointer camp, that's always worked well for me.
Distro's however don't seem to like it much, which means that every time
I do have to profile something userspace, I get to rebuild all the
relevant code with framepointers on (which is not hard, but tedious).
Barring that, we need something for which the unwind code is simple and
robust -- and I *think* this has disqualified .eh_frame and full on
DWARF.
And this is again where SFrame comes in -- its unwinder is simple,
something we can run in kernel space.
I really don't much care for the particulars, and frame pointers work
for me -- but I do care about the kernel unwinder code. It had better be
simple and robvst.
So if you want us to use .eh_frame, great, show us a simple and robust
unwinder.
next prev parent reply other threads:[~2025-10-30 10:26 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-30 6:53 Concerns about SFrame viability for userspace stack walking Fangrui Song
2025-10-30 7:30 ` Jakub Jelinek
2025-10-30 7:50 ` Fangrui Song
2025-10-30 8:05 ` Jakub Jelinek
2025-10-31 2:51 ` Fangrui Song
2025-10-30 10:26 ` Peter Zijlstra [this message]
2025-10-30 16:48 ` Fangrui Song
2025-10-30 17:03 ` Jose E. Marchesi
2025-10-31 4:22 ` Fangrui Song
2025-10-31 14:37 ` Jose E. Marchesi
2025-10-30 17:33 ` Steven Rostedt
2025-10-31 5:28 ` Fangrui Song
2025-10-30 18:22 ` Peter Zijlstra
2025-10-30 17:53 ` Andi Kleen
2025-10-30 18:07 ` Mark Brown
2025-10-30 18:31 ` Andi Kleen
2025-10-30 18:45 ` Mark Brown
2025-10-31 8:24 ` Fangrui Song
2025-10-30 18:57 ` Peter Zijlstra
2025-10-31 11:46 ` Mark Brown
2025-10-30 14:47 ` Jose E. Marchesi
2025-11-04 9:21 ` Indu
2025-11-05 8:21 ` Fangrui Song
2025-11-06 0:44 ` Indu Bhagat
2025-11-06 7:51 ` Florian Weimer
2025-11-06 21:02 ` Indu Bhagat
2025-11-06 9:20 ` Fangrui Song
2025-11-06 20:42 ` Indu Bhagat
2025-11-09 0:23 ` Fangrui Song
2025-12-01 9:04 ` Fangrui Song
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=20251030102626.GR3245006@noisy.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=linux-toolchains@vger.kernel.org \
--cc=maskray@sourceware.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox