From: Donglin Peng <dolinux.peng@gmail.com>
To: rostedt@goodmis.org
Cc: mhiramat@kernel.org, dolinux.peng@gmai.com,
linux-trace-kernel@vger.kernel.org, linux-kernel@vger.kernel.org,
pengdonglin <pengdonglin@xiaomi.com>
Subject: [PATCH v5 0/3] Use BTF to trim return values
Date: Tue, 1 Sep 2026 21:46:01 +0800 [thread overview]
Message-ID: <20260901134604.4052265-1-dolinux.peng@gmail.com> (raw)
From: pengdonglin <pengdonglin@xiaomi.com>
The funcgraph-retval option currently records one machine-word return
value without considering the function's declared return type. As a
result, void-returning functions can produce meaningless output, and
return values narrower than a general-purpose register can include
undefined high bits.
This series uses kernel BTF to identify the return type of traced
functions and to improve funcgraph-retval output:
- Do not print a return value for functions with a void return type.
- Trim integer, enum, struct, and union values to the available return
value width when the BTF type provides suitable size information.
- Format integer, enum, and boolean values according to their BTF
encoding.
- Mark values as "(trunc)" when the return type is wider than the
value captured by the function graph tracer.
Here is an output comparison:
Before:
# perf ftrace -G vfs_read --graph-opts retval
...
1) | touch_atime() {
1) | atime_needs_update() {
1) 0.069 us | make_vfsuid(); /* ret=0x0 */
1) 0.067 us | make_vfsgid(); /* ret=0x0 */
1) | current_time() {
1) 0.197 us | ktime_get_coarse_real_ts64_mg(); /* ret=0x187f886aec3ed6f5 */
1) 0.352 us | } /* current_time ret=0x69380753 */
1) 0.792 us | } /* atime_needs_update ret=0x0 */
1) 0.937 us | } /* touch_atime ret=0x0 */
After:
# perf ftrace -G vfs_read --graph-opts retval
...
2) | touch_atime() {
2) | atime_needs_update() {
2) 0.070 us | make_vfsuid(); /* ret=0x0 */
2) 0.070 us | make_vfsgid(); /* ret=0x0 */
2) | current_time() {
2) 0.162 us | ktime_get_coarse_real_ts64_mg();
2) 0.312 us | } /* current_time ret=0x69380649(trunc) */
2) 0.753 us | } /* atime_needs_update ret=false */
2) 0.899 us | } /* touch_atime */
Changelog:
v5:
- Add an inline fallback for btf_trim_retval() when
CONFIG_DEBUG_INFO_BTF is disabled.
- Release the BTF reference after return type lookup.
v4:
- Link: https://lore.kernel.org/all/20251215034153.2367756-1-dolinux.peng@gmail.com/
- Build trace_btf.c when CONFIG_DEBUG_INFO_BTF is enabled.
- Remove the redundant BPF_SYSCALL dependency from
CONFIG_PROBE_EVENTS_BTF_ARGS.
- Update the funcgraph-retval documentation and cover letter.
v3:
- Link: https://lore.kernel.org/all/20251209121349.525641-1-dolinux.peng@gmail.com/
- Print the return value based on its type for human readability,
thanks Masami.
- Update the documentation and cover letter.
v2:
- Link: https://lore.kernel.org/all/20251208131917.2444620-1-dolinux.peng@gmail.com/
- Update the funcgraph-retval documentation.
- Revise the cover letter.
v1:
- Link: https://lore.kernel.org/all/20251207142742.229924-1-dolinux.peng@gmail.com/
pengdonglin (3):
ftrace: Build trace_btf.c when CONFIG_DEBUG_INFO_BTF is enabled
fgraph: Enhance funcgraph-retval with BTF-based type-aware output
tracing: Update funcgraph-retval documentation
Documentation/trace/ftrace.rst | 88 ++++++++++++++++------------
kernel/trace/Kconfig | 2 +-
kernel/trace/Makefile | 2 +-
kernel/trace/trace_btf.c | 68 +++++++++++++++++++++
kernel/trace/trace_btf.h | 16 +++++
kernel/trace/trace_functions_graph.c | 50 ++++++++++++----
6 files changed, 173 insertions(+), 53 deletions(-)
--
2.34.1
next reply other threads:[~2026-09-01 13:46 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-01 13:46 Donglin Peng [this message]
2026-09-01 13:46 ` [PATCH v5 1/3] ftrace: Build trace_btf.c when CONFIG_DEBUG_INFO_BTF is enabled Donglin Peng
2026-09-02 14:58 ` Masami Hiramatsu
2026-09-01 13:46 ` [PATCH v5 2/3] fgraph: Enhance funcgraph-retval with BTF-based type-aware output Donglin Peng
2026-09-01 14:10 ` sashiko-bot
2026-09-01 13:46 ` [PATCH v5 3/3] tracing: Update funcgraph-retval documentation Donglin Peng
2026-09-01 14:20 ` sashiko-bot
2026-09-01 17:57 ` [PATCH v5 0/3] Use BTF to trim return values Steven Rostedt
2026-09-02 3:25 ` Peng Donglin
2026-09-02 14:55 ` Masami Hiramatsu
2026-09-03 16:17 ` Donglin Peng
2026-09-03 16:36 ` Steven Rostedt
2026-09-03 23:48 ` Masami Hiramatsu
2026-09-04 0:30 ` Steven Rostedt
2026-09-04 1:34 ` Donglin Peng
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=20260901134604.4052265-1-dolinux.peng@gmail.com \
--to=dolinux.peng@gmail.com \
--cc=dolinux.peng@gmai.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=mhiramat@kernel.org \
--cc=pengdonglin@xiaomi.com \
--cc=rostedt@goodmis.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.