public inbox for bpf@vger.kernel.org
 help / color / mirror / Atom feed
From: Masami Hiramatsu (Google) <mhiramat@kernel.org>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: Alexei Starovoitov <alexei.starovoitov@gmail.com>,
	Florent Revest <revest@chromium.org>,
	linux-trace-kernel@vger.kernel.org,
	LKML <linux-kernel@vger.kernel.org>,
	Martin KaFai Lau <martin.lau@linux.dev>,
	bpf <bpf@vger.kernel.org>, Alexei Starovoitov <ast@kernel.org>,
	Jiri Olsa <jolsa@kernel.org>,
	Alan Maguire <alan.maguire@oracle.com>,
	Mark Rutland <mark.rutland@arm.com>,
	linux-arch@vger.kernel.org
Subject: Re: [PATCH v18 16/17] Documentation: probes: Update fprobe on function-graph tracer
Date: Wed, 13 Nov 2024 08:48:57 +0900	[thread overview]
Message-ID: <20241113084857.962b4af542fe700542ace929@kernel.org> (raw)
In-Reply-To: <20241101101448.10a3a0a9@gandalf.local.home>

On Fri, 1 Nov 2024 10:14:48 -0400
Steven Rostedt <rostedt@goodmis.org> wrote:

> On Sat, 26 Oct 2024 13:38:46 +0900
> "Masami Hiramatsu (Google)" <mhiramat@kernel.org> wrote:
> 
> > From: Masami Hiramatsu (Google) <mhiramat@kernel.org>
> > 
> > Update fprobe documentation for the new fprobe on function-graph
> > tracer. This includes some bahvior changes and pt_regs to
> > ftrace_regs interface change.
> > 
> > Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
> > ---
> >  Changes in v2:
> >   - Update @fregs parameter explanation.
> > ---
> >  Documentation/trace/fprobe.rst |   42 ++++++++++++++++++++++++++--------------
> >  1 file changed, 27 insertions(+), 15 deletions(-)
> > 
> > diff --git a/Documentation/trace/fprobe.rst b/Documentation/trace/fprobe.rst
> > index 196f52386aaa..f58bdc64504f 100644
> > --- a/Documentation/trace/fprobe.rst
> > +++ b/Documentation/trace/fprobe.rst
> > @@ -9,9 +9,10 @@ Fprobe - Function entry/exit probe
> >  Introduction
> >  ============
> >  
> > -Fprobe is a function entry/exit probe mechanism based on ftrace.
> > -Instead of using ftrace full feature, if you only want to attach callbacks
> > -on function entry and exit, similar to the kprobes and kretprobes, you can
> > +Fprobe is a function entry/exit probe mechanism based on the function-graph
> > +tracer.
> 
> You could still say "ftrace" as function-graph is part of the "ftrace"
> infrastructure. But I don't care either way.
> 
> > +Instead of tracing all functions, if you want to attach callbacks on specific
> > +function entry and exit, similar to the kprobes and kretprobes, you can
> >  use fprobe. Compared with kprobes and kretprobes, fprobe gives faster
> >  instrumentation for multiple functions with single handler. This document
> >  describes how to use fprobe.
> > @@ -91,12 +92,14 @@ The prototype of the entry/exit callback function are as follows:
> >  
> >  .. code-block:: c
> >  
> > - int entry_callback(struct fprobe *fp, unsigned long entry_ip, unsigned long ret_ip, struct pt_regs *regs, void *entry_data);
> > + int entry_callback(struct fprobe *fp, unsigned long entry_ip, unsigned long ret_ip, struct ftrace_regs *fregs, void *entry_data);
> >  
> > - void exit_callback(struct fprobe *fp, unsigned long entry_ip, unsigned long ret_ip, struct pt_regs *regs, void *entry_data);
> > + void exit_callback(struct fprobe *fp, unsigned long entry_ip, unsigned long ret_ip, struct ftrace_regs *fregs, void *entry_data);
> >  
> > -Note that the @entry_ip is saved at function entry and passed to exit handler.
> > -If the entry callback function returns !0, the corresponding exit callback will be cancelled.
> > +Note that the @entry_ip is saved at function entry and passed to exit
> > +handler.
> > +If the entry callback function returns !0, the corresponding exit callback
> > +will be cancelled.
> >  
> >  @fp
> >          This is the address of `fprobe` data structure related to this handler.
> > @@ -112,12 +115,10 @@ If the entry callback function returns !0, the corresponding exit callback will
> >          This is the return address that the traced function will return to,
> >          somewhere in the caller. This can be used at both entry and exit.
> >  
> > -@regs
> > -        This is the `pt_regs` data structure at the entry and exit. Note that
> > -        the instruction pointer of @regs may be different from the @entry_ip
> > -        in the entry_handler. If you need traced instruction pointer, you need
> > -        to use @entry_ip. On the other hand, in the exit_handler, the instruction
> > -        pointer of @regs is set to the current return address.
> > +@fregs
> > +        This is the `ftrace_regs` data structure at the entry and exit. This
> > +        includes the function parameters, or the return values. So user can
> > +        access thos values via appropriate `ftrace_regs_*` APIs.
> >  
> >  @entry_data
> >          This is a local storage to share the data between entry and exit handlers.
> > @@ -125,6 +126,17 @@ If the entry callback function returns !0, the corresponding exit callback will
> >          and `entry_data_size` field when registering the fprobe, the storage is
> >          allocated and passed to both `entry_handler` and `exit_handler`.
> >  
> > +Entry data size and exit handlers on the same function
> > +======================================================
> > +
> > +Since the entry data is passed via per-task stack and it is has limited size,
> 
> 						"and it has limited size"

Ah, I missed updating this document patch in v19. Need to fix that.

Thank you!


> 
> > +the entry data size per probe is limited to `15 * sizeof(long)`. You also need
> > +to take care that the different fprobes are probing on the same function, this
> > +limit becomes smaller. The entry data size is aligned to `sizeof(long)` and
> > +each fprobe which has exit handler uses a `sizeof(long)` space on the stack,
> > +you should keep the number of fprobes on the same function as small as
> > +possible.
> 
> -- Steve
> 
> > +
> >  Share the callbacks with kprobes
> >  ================================
> >  
> > @@ -165,8 +177,8 @@ This counter counts up when;
> >   - fprobe fails to take ftrace_recursion lock. This usually means that a function
> >     which is traced by other ftrace users is called from the entry_handler.
> >  
> > - - fprobe fails to setup the function exit because of the shortage of rethook
> > -   (the shadow stack for hooking the function return.)
> > + - fprobe fails to setup the function exit because of failing to allocate the
> > +   data buffer from the per-task shadow stack.
> >  
> >  The `fprobe::nmissed` field counts up in both cases. Therefore, the former
> >  skips both of entry and exit callback and the latter skips the exit
> 


-- 
Masami Hiramatsu (Google) <mhiramat@kernel.org>

  reply	other threads:[~2024-11-12 23:49 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-26  4:35 [PATCH v18 00/17] tracing: fprobe: function_graph: Multi-function graph and fprobe on fgraph Masami Hiramatsu (Google)
2024-10-26  4:35 ` [PATCH v18 01/17] fgraph: Pass ftrace_regs to entryfunc Masami Hiramatsu (Google)
2024-10-28 15:25   ` Will Deacon
2024-10-31  1:18     ` Masami Hiramatsu
2024-10-31 19:53   ` Steven Rostedt
2024-11-01  1:51     ` Masami Hiramatsu
2024-11-01 10:50       ` Steven Rostedt
2024-11-09 14:24         ` Masami Hiramatsu
2024-11-09 14:47     ` Masami Hiramatsu
2024-10-26  4:35 ` [PATCH v18 02/17] fgraph: Replace fgraph_ret_regs with ftrace_regs Masami Hiramatsu (Google)
2024-10-28 15:26   ` Will Deacon
2024-10-26  4:36 ` [PATCH v18 03/17] fgraph: Pass ftrace_regs to retfunc Masami Hiramatsu (Google)
2024-10-26  4:36 ` [PATCH v18 04/17] fprobe: Use ftrace_regs in fprobe entry handler Masami Hiramatsu (Google)
2024-10-26  4:36 ` [PATCH v18 05/17] fprobe: Use ftrace_regs in fprobe exit handler Masami Hiramatsu (Google)
2024-10-26  4:36 ` [PATCH v18 06/17] tracing: Add ftrace_partial_regs() for converting ftrace_regs to pt_regs Masami Hiramatsu (Google)
2024-10-28 15:27   ` Will Deacon
2024-10-26  4:36 ` [PATCH v18 07/17] tracing: Add ftrace_fill_perf_regs() for perf event Masami Hiramatsu (Google)
2024-10-26  4:37 ` [PATCH v18 08/17] tracing/fprobe: Enable fprobe events with CONFIG_DYNAMIC_FTRACE_WITH_ARGS Masami Hiramatsu (Google)
2024-10-26  4:37 ` [PATCH v18 09/17] bpf: Enable kprobe_multi feature if CONFIG_FPROBE is enabled Masami Hiramatsu (Google)
2024-10-26  4:37 ` [PATCH v18 10/17] ftrace: Add CONFIG_HAVE_FTRACE_GRAPH_FUNC Masami Hiramatsu (Google)
2024-10-26  4:37 ` [PATCH v18 11/17] fprobe: Rewrite fprobe on function-graph tracer Masami Hiramatsu (Google)
2024-11-01 19:28   ` Steven Rostedt
2024-11-09 14:55     ` Masami Hiramatsu
2024-10-26  4:37 ` [PATCH v18 12/17] fprobe: Add fprobe_header encoding feature Masami Hiramatsu (Google)
2024-11-01 14:22   ` Steven Rostedt
2024-11-09 15:10     ` Masami Hiramatsu
2024-11-12 14:44       ` Steven Rostedt
2024-11-12 23:43         ` Masami Hiramatsu
2024-10-26  4:38 ` [PATCH v18 13/17] tracing/fprobe: Remove nr_maxactive from fprobe Masami Hiramatsu (Google)
2024-10-26  4:38 ` [PATCH v18 14/17] selftests: ftrace: Remove obsolate maxactive syntax check Masami Hiramatsu (Google)
2024-10-26  4:38 ` [PATCH v18 15/17] selftests/ftrace: Add a test case for repeating register/unregister fprobe Masami Hiramatsu (Google)
2024-10-26  4:38 ` [PATCH v18 16/17] Documentation: probes: Update fprobe on function-graph tracer Masami Hiramatsu (Google)
2024-11-01 14:14   ` Steven Rostedt
2024-11-12 23:48     ` Masami Hiramatsu [this message]
2024-10-26  4:38 ` [PATCH v18 17/17] bpf: Add get_entry_ip() for arm64 Masami Hiramatsu (Google)
     [not found] ` <c660e1e2554e242da1802d026566cbad7b96f88512f12722bb49631088e4f3f2@mail.kernel.org>
     [not found]   ` <20241031102519.63a600899278437fba931f90@kernel.org>
2024-10-31  2:49     ` [PATCH v18 00/17] tracing: fprobe: function_graph: Multi-function graph and fprobe on fgraph Daniel Xu

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=20241113084857.962b4af542fe700542ace929@kernel.org \
    --to=mhiramat@kernel.org \
    --cc=alan.maguire@oracle.com \
    --cc=alexei.starovoitov@gmail.com \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=jolsa@kernel.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-trace-kernel@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=martin.lau@linux.dev \
    --cc=revest@chromium.org \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox