From: Steven Rostedt <rostedt@kernel.org>
To: Jens Remus <jremus@linux.ibm.com>
Cc: linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org,
bpf@vger.kernel.org, x86@kernel.org,
Masami Hiramatsu <mhiramat@kernel.org>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
Josh Poimboeuf <jpoimboe@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@kernel.org>, Jiri Olsa <jolsa@kernel.org>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Namhyung Kim <namhyung@kernel.org>,
Thomas Gleixner <tglx@linutronix.de>,
Andrii Nakryiko <andrii@kernel.org>,
Indu Bhagat <indu.bhagat@oracle.com>,
"Jose E. Marchesi" <jemarch@gnu.org>,
Beau Belgrave <beaub@linux.microsoft.com>,
Linus Torvalds <torvalds@linux-foundation.org>,
Andrew Morton <akpm@linux-foundation.org>,
Jens Axboe <axboe@kernel.dk>, Florian Weimer <fweimer@redhat.com>,
Sam James <sam@gentoo.org>
Subject: Re: [PATCH v15 03/10] unwind_user/deferred: Add unwind cache
Date: Mon, 28 Jul 2025 12:15:43 -0400 [thread overview]
Message-ID: <20250728121543.7aaa75eb@batman.local.home> (raw)
In-Reply-To: <a0f9a3ef-f32a-4bff-8ab1-4181ad61780f@linux.ibm.com>
On Mon, 28 Jul 2025 17:46:42 +0200
Jens Remus <jremus@linux.ibm.com> wrote:
> On 25.07.2025 20:55, Steven Rostedt wrote:
> > From: Josh Poimboeuf <jpoimboe@kernel.org>
> >
> > Cache the results of the unwind to ensure the unwind is only performed
> > once, even when called by multiple tracers.
> >
> > The cache nr_entries gets cleared every time the task exits the kernel.
> > When a stacktrace is requested, nr_entries gets set to the number of
> > entries in the stacktrace. If another stacktrace is requested, if
> > nr_entries is not zero, then it contains the same stacktrace that would be
> > retrieved so it is not processed again and the entries is given to the
> > caller.
> >
> > Co-developed-by: Steven Rostedt (Google) <rostedt@goodmis.org>
> > Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
> > Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
>
> Reviewed-by: Jens Remus <jremus@linux.ibm.com>
Thanks.
>
> > diff --git a/kernel/unwind/deferred.c b/kernel/unwind/deferred.c
>
> > + cache = info->cache;
> > + trace->entries = cache->entries;
> > +
> > + if (cache->nr_entries) {
> > + /*
> > + * The user stack has already been previously unwound in this
> > + * entry context. Skip the unwind and use the cache.
> > + */
> > + trace->nr = cache->nr_entries;
> > + return 0;
> > + }
> > +
> > trace->nr = 0;
> > - trace->entries = info->entries;
> > unwind_user(trace, UNWIND_MAX_ENTRIES);
> >
> > + cache->nr_entries = trace->nr;
> > +
>
> Would the following alternative to above excerpt be easier to read?
Not to me ;-)
I looked at this and read it a couple of times, but had to go back to
see what it was replacing before I understood it.
I prefer the original. It's logic is, "if this was already done, just
return the cache", where as the below logic is "Assign everything, if
it hasn't been done, do it now".
Maybe it's just my own preference, but I'm more comfortable with the
"if it's already been done, exit out early" than the "set everything
up, and do it if it hasn't been done" approach.
-- Steve
>
> /* Use the cache, if the user stack has already been previously
> * unwound in this entry context. If not this will initialize
> * trace->nr to zero to trigger the unwind now.
> */
> cache = info->cache;
> trace->nr = cache->nr_entries;
> trace->entries = cache->entries;
>
> if (!trace->nr) {
> unwind_user(trace, UNWIND_MAX_ENTRIES);
> cache->nr_entries = trace->nr;
> }
>
> > return 0;
> > }
>
> Regards,
> Jens
next prev parent reply other threads:[~2025-07-28 16:15 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-25 18:55 [PATCH v15 00/10] unwind_user: Deferred unwinding infrastructure Steven Rostedt
2025-07-25 18:55 ` [PATCH v15 01/10] unwind_user: Add user space unwinding API with frame pointer support Steven Rostedt
2025-07-28 15:24 ` Jens Remus
2025-07-28 16:08 ` Steven Rostedt
2025-07-25 18:55 ` [PATCH v15 02/10] unwind_user/deferred: Add unwind_user_faultable() Steven Rostedt
2025-07-28 15:29 ` Jens Remus
2025-07-25 18:55 ` [PATCH v15 03/10] unwind_user/deferred: Add unwind cache Steven Rostedt
2025-07-28 15:46 ` Jens Remus
2025-07-28 16:15 ` Steven Rostedt [this message]
2025-07-25 18:55 ` [PATCH v15 04/10] unwind_user/deferred: Add deferred unwinding interface Steven Rostedt
2025-07-25 18:55 ` [PATCH v15 05/10] unwind_user/deferred: Make unwind deferral requests NMI-safe Steven Rostedt
2025-07-25 18:55 ` [PATCH v15 06/10] unwind deferred: Use bitmask to determine which callbacks to call Steven Rostedt
2025-07-25 18:55 ` [PATCH v15 07/10] unwind deferred: Add unwind_completed mask to stop spurious callbacks Steven Rostedt
2025-07-25 18:55 ` [PATCH v15 08/10] unwind: Add USED bit to only have one conditional on way back to user space Steven Rostedt
2025-07-25 18:55 ` [PATCH v15 09/10] unwind deferred: Use SRCU unwind_deferred_task_work() Steven Rostedt
2025-07-25 18:55 ` [PATCH v15 10/10] unwind: Finish up unwind when a task exits Steven Rostedt
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=20250728121543.7aaa75eb@batman.local.home \
--to=rostedt@kernel.org \
--cc=acme@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=andrii@kernel.org \
--cc=axboe@kernel.dk \
--cc=beaub@linux.microsoft.com \
--cc=bpf@vger.kernel.org \
--cc=fweimer@redhat.com \
--cc=indu.bhagat@oracle.com \
--cc=jemarch@gnu.org \
--cc=jolsa@kernel.org \
--cc=jpoimboe@kernel.org \
--cc=jremus@linux.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mhiramat@kernel.org \
--cc=mingo@kernel.org \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=sam@gentoo.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--cc=x86@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).