From: Masami Hiramatsu (Google) <mhiramat@kernel.org>
To: Donglin Peng <dolinux.peng@gmail.com>
Cc: Steven Rostedt <rostedt@goodmis.org>,
linux-trace-kernel <linux-trace-kernel@vger.kernel.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: Enhancing Conditional Filtering for Function Graph Tracer
Date: Mon, 16 Feb 2026 16:27:16 +0900 [thread overview]
Message-ID: <20260216162716.dc8ec2f3f2fe409b6c11e491@kernel.org> (raw)
In-Reply-To: <CAErzpmtMrHWQVAQx=jiq_sWo=+c_JOUoQmPafo-fq+Q3qi+BBw@mail.gmail.com>
On Sat, 14 Feb 2026 18:36:24 +0800
Donglin Peng <dolinux.peng@gmail.com> wrote:
> Hi Steve and Masami,
>
> I recently had an idea while using the function graph tracer.
> Currently, it supports basic
> filtering via set_ftrace_pid(PID-based) and
> set_graph_function(function name-based).
> However, this filtering mechanism feels somewhat limited. Given that
> we already have
> features like funcgraph-args, I wonder if we could enhance filtering by allowing
> conditional tracking based on function parameters — similar to how
> trace events support
> filters/triggers.
Agreed. I think it is a good idea.
>
> To simplify implementation, I propose extending a new trigger type
> (e.g., "funcgraph").
OK, and I think the question is what do we want to filter. As you know,
the kernel function call-graph is a very context depending. I think we
may be better to start with specifying the pid filter via the tringger
instead of enabling/disabling it on all cpus.
echo "funcgraph:setpid:common_pid" >> events/fprobes/func_foo/trigger
Then, we can also specify a specific task's pid too via sched_switch
events etc. Also we can add "clearpid". Maybe we also need a special
PID (e.g. -1) for trace no process instead of using tracing_on.
Thank you,
> In ftrace_graph_ignore_func, we could look up the corresponding trace_fprobe and
> trace_event_file based on trace->func, then decide whether to trace
> the function using
> a helper like the following:
>
> static bool ftrace_graph_filter(struct trace_fprobe *tf, struct
> ftrace_regs *fregs,
> struct trace_event_file *trace_file)
> {
> struct fentry_trace_entry_head *entry;
> struct trace_event_buffer fbuffer;
> struct event_trigger_data *data;
> int dsize;
>
> dsize = __get_data_size(&tf->tp, fregs, NULL);
> entry = trace_event_buffer_reserve(&fbuffer, trace_file,
> sizeof(*entry) + tf->tp.size + dsize);
> if (!entry)
> return false;
>
> entry = ring_buffer_event_data(fbuffer.event);
> store_trace_args(&entry[1], &tf->tp, fregs, NULL, sizeof(*entry), dsize);
>
> list_for_each_entry_rcu(data, &trace_file->triggers, list) {
> if (data->cmd_ops->trigger_type == TRIGGER_TYPE_FUNCGRAPH) {
> struct event_filter *filter = rcu_dereference_sched(data->filter);
> if (filter && filter_match_preds(filter, entry))
> return true; // Allow tracing
> }
> }
> return false; // Skip tracing
> }
>
> Does this approach make sense? Any suggestions or concerns?
>
> Thanks,
> Donglin
--
Masami Hiramatsu (Google) <mhiramat@kernel.org>
next prev parent reply other threads:[~2026-02-16 7:27 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-14 10:36 Enhancing Conditional Filtering for Function Graph Tracer Donglin Peng
2026-02-16 7:27 ` Masami Hiramatsu [this message]
2026-02-17 3:09 ` Donglin Peng
2026-02-16 15:09 ` Steven Rostedt
2026-02-17 3:09 ` 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=20260216162716.dc8ec2f3f2fe409b6c11e491@kernel.org \
--to=mhiramat@kernel.org \
--cc=dolinux.peng@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.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