From: Beau Belgrave <beaub@linux.microsoft.com>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: Masami Hiramatsu <mhiramat@kernel.org>,
linux-trace-devel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4 02/10] user_events: Add minimal support for trace_event into ftrace
Date: Tue, 9 Nov 2021 12:14:32 -0800 [thread overview]
Message-ID: <20211109201432.GA1650@kbox> (raw)
In-Reply-To: <20211109142506.3c280469@gandalf.local.home>
On Tue, Nov 09, 2021 at 02:25:06PM -0500, Steven Rostedt wrote:
> On Tue, 9 Nov 2021 11:08:44 -0800
> Beau Belgrave <beaub@linux.microsoft.com> wrote:
>
> > We need strings to be able to be emitted and recorded in eBPF, perf and
> > ftrace. So I would rather go after a solution that lets us keep these in
> > the ring buffers, even if it means a perf hit.
> >
> > Guess what's left is to where the best place to check is, checking in
> > the filter with unsafe flags would let us keep most of the perf (we just
> > check the undersize case, 1 branch). When these unsafe types are
> > filtered then a perf tax is imposed to keep things safe.
> >
> > It sounded like Steven wanted to think about this a bit, so I'll wait a
> > bit before poking again for consensus :)
> >
> > Do you have any strong feelings about where it goes?
>
> IIUC, the writing into the trace event is done via one big blob, correct?
>
Yes, the top 4 bytes get trimmed off as an index, then it's a big blob
to all places except eBPF (when asking for the iterator directly).
> That is this:
>
> + if (likely(atomic_read(&tp->key.enabled) > 0)) {
> + struct tracepoint_func *probe_func_ptr;
> + user_event_func_t probe_func;
> + void *tpdata;
> + void *kdata;
> + u32 datalen;
> +
> + kdata = kmalloc(i->count, GFP_KERNEL);
> +
> + if (unlikely(!kdata))
> + return -ENOMEM;
> +
> + datalen = copy_from_iter(kdata, i->count, i);
> +
> + rcu_read_lock_sched();
> +
> + probe_func_ptr = rcu_dereference_sched(tp->funcs);
> +
> + if (probe_func_ptr) {
> + do {
> + probe_func = probe_func_ptr->func;
> + tpdata = probe_func_ptr->data;
> + probe_func(user, kdata, datalen, tpdata);
> + } while ((++probe_func_ptr)->func);
> + }
> +
> + rcu_read_unlock_sched();
> +
> + kfree(kdata);
>
> So we really are just interested in making sure that the output is correct?
>
Largely, yes.
The optimization part of the patch moves the buffer copies into the
probes to remove a double copy. I believe however that output can be
checked either centrally before the probes or within each probe call if
need be.
For perf/eBPF we may not need to check things, however, for ftrace
we will due to the filters. So we may be able to isolate to just the
ftrace probe method.
The ftrace probe will have a blob even after optimization due to the copy
into the ring buffer (assuming we can discard it if it violates a policy).
> That is, the reading of the trace file?
>
We really need to ensure that data can be analyzed on the machine
directly (eBPF, ftrace, perf) as well as outside of the machine (ftrace, perf).
The priorities to us are fast recording speed with accurate reading of trace
files and event data.
> -- Steve
next prev parent reply other threads:[~2021-11-09 20:14 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-04 17:04 [PATCH v4 00/10] user_events: Enable user processes to create and write to trace events Beau Belgrave
2021-11-04 17:04 ` [PATCH v4 01/10] user_events: Add UABI header for user access to user_events Beau Belgrave
2021-11-04 17:04 ` [PATCH v4 02/10] user_events: Add minimal support for trace_event into ftrace Beau Belgrave
2021-11-04 21:34 ` kernel test robot
2021-11-08 2:32 ` Masami Hiramatsu
2021-11-08 16:59 ` Beau Belgrave
2021-11-07 14:31 ` Masami Hiramatsu
2021-11-08 17:13 ` Beau Belgrave
2021-11-08 18:16 ` Steven Rostedt
2021-11-08 20:25 ` Beau Belgrave
2021-11-08 21:00 ` Steven Rostedt
2021-11-08 22:09 ` Beau Belgrave
2021-11-08 22:30 ` Steven Rostedt
2021-11-08 22:59 ` Beau Belgrave
2021-11-09 4:58 ` Masami Hiramatsu
2021-11-09 2:56 ` Masami Hiramatsu
2021-11-09 19:08 ` Beau Belgrave
2021-11-09 19:25 ` Steven Rostedt
2021-11-09 20:14 ` Beau Belgrave [this message]
2021-11-09 20:45 ` Steven Rostedt
2021-11-09 21:27 ` Beau Belgrave
2021-11-09 21:39 ` Steven Rostedt
2021-11-10 13:56 ` Masami Hiramatsu
2021-11-11 17:33 ` Beau Belgrave
2021-11-12 13:40 ` Masami Hiramatsu
2021-11-07 18:18 ` Steven Rostedt
2021-11-08 19:56 ` Beau Belgrave
2021-11-08 20:53 ` Steven Rostedt
2021-11-08 21:15 ` Beau Belgrave
2021-11-04 17:04 ` [PATCH v4 03/10] user_events: Add print_fmt generation support for basic types Beau Belgrave
2021-11-08 22:03 ` Steven Rostedt
2021-11-04 17:04 ` [PATCH v4 04/10] user_events: Handle matching arguments from dyn_events Beau Belgrave
2021-11-08 22:05 ` Steven Rostedt
2021-11-04 17:04 ` [PATCH v4 05/10] user_events: Add basic perf and eBPF support Beau Belgrave
2021-11-04 17:04 ` [PATCH v4 06/10] user_events: Add self-test for ftrace integration Beau Belgrave
2021-11-04 17:04 ` [PATCH v4 07/10] user_events: Add self-test for dynamic_events integration Beau Belgrave
2021-11-04 17:04 ` [PATCH v4 08/10] user_events: Add self-test for perf_event integration Beau Belgrave
2021-11-04 17:04 ` [PATCH v4 09/10] user_events: Optimize writing events by only copying data once Beau Belgrave
2021-11-08 22:45 ` Steven Rostedt
2021-11-08 23:00 ` Beau Belgrave
2021-11-08 23:04 ` Steven Rostedt
2021-11-08 23:17 ` Beau Belgrave
2021-11-08 23:20 ` Steven Rostedt
2021-11-04 17:04 ` [PATCH v4 10/10] user_events: Add documentation file Beau Belgrave
2021-11-04 19:05 ` Jonathan Corbet
2021-11-04 21:08 ` Beau Belgrave
2021-11-04 21:18 ` Jonathan Corbet
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=20211109201432.GA1650@kbox \
--to=beaub@linux.microsoft.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-trace-devel@vger.kernel.org \
--cc=mhiramat@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