linux-trace-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Donglin Peng <pengdonglin@sangfor.com.cn>
To: mhiramat@kernel.org, rostedt@goodmis.org, linux@armlinux.org.uk,
	mark.rutland@arm.com, will@kernel.org, catalin.marinas@arm.com,
	rmk+kernel@armlinux.org.uk, palmer@dabbelt.com,
	paul.walmsley@sifive.com, aou@eecs.berkeley.edu,
	tglx@linutronix.de, dave.hansen@linux.intel.com, x86@kernel.org,
	bp@alien8.de, hpa@zytor.com, chenhuacai@kernel.org,
	zhangqing@loongson.cn, kernel@xen0n.name, mingo@redhat.com,
	peterz@infradead.org, xiehuan09@gmail.com,
	dinghui@sangfor.com.cn, huangcun@sangfor.com.cn,
	dolinux.peng@gmail.com
Cc: linux-trace-kernel@vger.kernel.org, loongarch@lists.linux.dev,
	linux-riscv@lists.infradead.org,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org,
	Donglin Peng <pengdonglin@sangfor.com.cn>
Subject: [PATCH v11 0/8] function_graph: Support recording and printing the return value of function
Date: Sat,  8 Apr 2023 05:42:14 -0700	[thread overview]
Message-ID: <cover.1680954589.git.pengdonglin@sangfor.com.cn> (raw)

When using the function_graph tracer to analyze system call failures,
it can be time-consuming to analyze the trace logs and locate the kernel
function that first returns an error. This change aims to simplify the
process by recording the function return value to the 'retval' member of
'ftrace_graph_ent' and printing it when outputing the trace log.

Note that even if a function's return type is void, a return value will
still be printed, so it should be ignored. If you care about this, the
BTF file can be used to obtain the details of function return type. We
can implement a tool to process the trace log and display the return
value based on its actual type.

Here is an example:

...

 1)               |  cgroup_attach_task() {
 1)               |    cgroup_migrate_add_src() {
 1)   1.403 us    |      cset_cgroup_from_root(); /* = 0xffff93fc86f58010 */
 1)   2.154 us    |    } /* cgroup_migrate_add_src = 0xffffb286c1297d00 */
 1) ! 386.538 us  |    cgroup_migrate_prepare_dst(); /* = 0x0 */
 1)               |    cgroup_migrate() {
 1)   0.651 us    |      cgroup_migrate_add_task(); /* = 0xffff93fcfd346c00 */
 1)               |      cgroup_migrate_execute() {
 1)               |        cpu_cgroup_can_attach() {
 1)               |          cgroup_taskset_first() {
 1)   0.732 us    |            cgroup_taskset_next(); /* = 0xffff93fc8fb20000 */
 1)   1.232 us    |          } /* cgroup_taskset_first = 0xffff93fc8fb20000 */
 1)   0.380 us    |          sched_rt_can_attach(); /* = 0x0 */
 1)   2.335 us    |        } /* cpu_cgroup_can_attach = -22 */
 1)   4.369 us    |      } /* cgroup_migrate_execute = -22 */
 1)   7.143 us    |    } /* cgroup_migrate = -22 */
 1)               |    cgroup_migrate_finish() {
 1)   0.411 us    |      put_css_set_locked(); /* = 0x8 */
 1) + 62.397 us   |      put_css_set_locked(); /* = 0x80000001 */
 1) + 64.742 us   |    } /* cgroup_migrate_finish = 0x80000000 */
 1) ! 465.605 us  |  } /* cgroup_attach_task = -22 */

...

After processing the above trace logs using BTF information:

...

 1)               |  cgroup_attach_task() {
 1)               |    cgroup_migrate_add_src() {
 1)   1.403 us    |      cset_cgroup_from_root(); /* = 0xffff93fc86f58010 */
 1)   2.154 us    |    } /* cgroup_migrate_add_src */
 1) ! 386.538 us  |    cgroup_migrate_prepare_dst(); /* = 0 */
 1)               |    cgroup_migrate() {
 1)   0.651 us    |      cgroup_migrate_add_task();
 1)               |      cgroup_migrate_execute() {
 1)               |        cpu_cgroup_can_attach() {
 1)               |          cgroup_taskset_first() {
 1)   0.732 us    |            cgroup_taskset_next(); /* = 0xffff93fc8fb20000 */
 1)   1.232 us    |          } /* cgroup_taskset_first = 0xffff93fc8fb20000 */
 1)   0.380 us    |          sched_rt_can_attach(); /* = 0 */
 1)   2.335 us    |        } /* cpu_cgroup_can_attach = -22 */
 1)   4.369 us    |      } /* cgroup_migrate_execute = -22 */
 1)   7.143 us    |    } /* cgroup_migrate = -22 */
 1)               |    cgroup_migrate_finish() {
 1)   0.411 us    |      put_css_set_locked();
 1) + 62.397 us   |      put_css_set_locked();
 1) + 64.742 us   |    } /* cgroup_migrate_finish */
 1) ! 465.605 us  |  } /* cgroup_attach_task = -22 */

...

---
v11:
 - Add a limitation discovered by Mark.
 - Fix selftest issues.

v10:
 - Fix code style issues for LoongArch
 - Fix selftest issues
 - Use CONFIG_FUNCTION_GRAPH_TRACER to control fgraph_ret_regs definition

v9:
 - Fix align issues in ARM asm code
 - Fix align issues in LoongArch asm code
 - Update commit messages
 - Update comments for ftrace_return_to_handler

v8:
 - Fix issues in ARM64 asm code
 - Fix issues in selftest
 - Add some comments on CONFIG_HAVE_FUNCTION_GRAPH_RETVAL
 - Make CONFIG_FUNCTION_GRAPH_RETVAL switable
 - Modify the control range of CONFIG_HAVE_FUNCTION_GRAPH_RETVAL

v7:
 - Rename trace option 'graph_retval_hex' to 'funcgraph-retval-hex'
 - Introduce a new structure fgraph_ret_regs for each architecture to
   hold return registers
 - Separate each architecture modification info individual patches
 - Add a test case for funcgraph-retval
 - Update documentation description
 - Support LoongArch

v6:
 - Remove the conversion code for short and char types, because these
   two types are rarely used to store an error code.
 - Modify the limitations for funcgraph-retval
 - Optimize the English expression

v5:
 - Pass both the return values to ftrace_return_to_handler
 - Modify the parameter sequence of ftrace_return_to_handler to
   decrease the modification of assembly code, thanks to Russell King
 - Wrap __ftrace_return_to_handler with ftrace_return_to_handler
   for compatible
 - Describe the limitations of funcgraph-retval

v4:
 - Modify commit message
 - Introduce new option graph_retval_hex to control display format
 - Introduce macro CONFIG_FUNCTION_GRAPH_RETVAL and
   CONFIG_HAVE_FUNCTION_GRAPH_RETVAL
 - Add related arch maintainers to review

v3:
 - Modify the commit message: add trace logs processed with the btf tool

v2:
 - Modify the commit message: use BTF to get the return type of function

Donglin Peng (8):
  function_graph: Support recording and printing the return value of
    function
  tracing: Add documentation for funcgraph-retval and
    funcgraph-retval-hex
  ARM: ftrace: Enable HAVE_FUNCTION_GRAPH_RETVAL
  arm64: ftrace: Enable HAVE_FUNCTION_GRAPH_RETVAL
  riscv: ftrace: Enable HAVE_FUNCTION_GRAPH_RETVAL
  x86/ftrace: Enable HAVE_FUNCTION_GRAPH_RETVAL
  LoongArch: ftrace: Enable HAVE_FUNCTION_GRAPH_RETVAL
  selftests/ftrace: Add funcgraph-retval test case

 Documentation/trace/ftrace.rst                | 126 ++++++++++++++++++
 arch/arm/Kconfig                              |   1 +
 arch/arm/include/asm/ftrace.h                 |  22 +++
 arch/arm/kernel/asm-offsets.c                 |   8 +-
 arch/arm/kernel/entry-ftrace.S                |  10 +-
 arch/arm64/Kconfig                            |   1 +
 arch/arm64/include/asm/ftrace.h               |  22 +++
 arch/arm64/kernel/asm-offsets.c               |  13 ++
 arch/arm64/kernel/entry-ftrace.S              |  27 ++--
 arch/loongarch/Kconfig                        |   1 +
 arch/loongarch/include/asm/ftrace.h           |  22 +++
 arch/loongarch/kernel/asm-offsets.c           |  15 ++-
 arch/loongarch/kernel/mcount.S                |  14 +-
 arch/loongarch/kernel/mcount_dyn.S            |  15 ++-
 arch/riscv/Kconfig                            |   1 +
 arch/riscv/include/asm/ftrace.h               |  21 +++
 arch/riscv/kernel/mcount.S                    |   7 +-
 arch/x86/Kconfig                              |   1 +
 arch/x86/include/asm/ftrace.h                 |  20 +++
 arch/x86/kernel/ftrace_32.S                   |   8 +-
 arch/x86/kernel/ftrace_64.S                   |   7 +-
 include/linux/ftrace.h                        |   3 +
 kernel/trace/Kconfig                          |  15 +++
 kernel/trace/fgraph.c                         |  23 +++-
 kernel/trace/trace.h                          |   2 +
 kernel/trace/trace_entries.h                  |  26 ++++
 kernel/trace/trace_functions_graph.c          |  93 +++++++++++--
 .../ftrace/test.d/ftrace/fgraph-retval.tc     |  44 ++++++
 28 files changed, 513 insertions(+), 55 deletions(-)
 create mode 100644 tools/testing/selftests/ftrace/test.d/ftrace/fgraph-retval.tc

-- 
2.25.1


             reply	other threads:[~2023-04-08 12:42 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-08 12:42 Donglin Peng [this message]
2023-04-08 12:42 ` [PATCH v11 1/8] function_graph: Support recording and printing the return value of function Donglin Peng
2023-04-14  7:44   ` Donglin Peng
2023-04-14  7:55     ` Donglin Peng
2023-04-24 20:23       ` Steven Rostedt
2023-04-08 12:42 ` [PATCH v11 2/8] tracing: Add documentation for funcgraph-retval and funcgraph-retval-hex Donglin Peng
2023-04-08 12:42 ` [PATCH v11 3/8] ARM: ftrace: Enable HAVE_FUNCTION_GRAPH_RETVAL Donglin Peng
2023-06-09  1:57   ` Steven Rostedt
2023-06-09  3:22     ` Donglin Peng
2023-06-09 21:21   ` Steven Rostedt
2023-04-08 12:42 ` [PATCH v11 4/8] arm64: " Donglin Peng
2023-06-09  9:31   ` Catalin Marinas
2023-06-09 17:19     ` Steven Rostedt
2023-04-08 12:42 ` [PATCH v11 5/8] riscv: " Donglin Peng
2023-06-09  1:58   ` Steven Rostedt
2023-06-20 19:54     ` Palmer Dabbelt
2023-04-08 12:42 ` [PATCH v11 6/8] x86/ftrace: " Donglin Peng
2023-04-08 12:42 ` [PATCH v11 7/8] LoongArch: ftrace: " Donglin Peng
2023-04-08 12:42 ` [PATCH v11 8/8] selftests/ftrace: Add funcgraph-retval test case Donglin Peng
2023-04-25  3:55   ` Masami Hiramatsu
2023-04-25  0:25 ` [PATCH v11 0/8] function_graph: Support recording and printing the return value of function 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=cover.1680954589.git.pengdonglin@sangfor.com.cn \
    --to=pengdonglin@sangfor.com.cn \
    --cc=aou@eecs.berkeley.edu \
    --cc=bp@alien8.de \
    --cc=catalin.marinas@arm.com \
    --cc=chenhuacai@kernel.org \
    --cc=dave.hansen@linux.intel.com \
    --cc=dinghui@sangfor.com.cn \
    --cc=dolinux.peng@gmail.com \
    --cc=hpa@zytor.com \
    --cc=huangcun@sangfor.com.cn \
    --cc=kernel@xen0n.name \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-riscv@lists.infradead.org \
    --cc=linux-trace-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=loongarch@lists.linux.dev \
    --cc=mark.rutland@arm.com \
    --cc=mhiramat@kernel.org \
    --cc=mingo@redhat.com \
    --cc=palmer@dabbelt.com \
    --cc=paul.walmsley@sifive.com \
    --cc=peterz@infradead.org \
    --cc=rmk+kernel@armlinux.org.uk \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    --cc=will@kernel.org \
    --cc=x86@kernel.org \
    --cc=xiehuan09@gmail.com \
    --cc=zhangqing@loongson.cn \
    /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).