All of lore.kernel.org
 help / color / mirror / Atom feed
* [GIT PULL] tracing: Updates for 5.18
@ 2022-03-21 14:56 Steven Rostedt
  2022-03-23 18:47 ` Linus Torvalds
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Steven Rostedt @ 2022-03-21 14:56 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: LKML, Ingo Molnar, Andrew Morton, Beau Belgrave, Tom Zanussi,
	Stephen Rothwell

Linus,


** NOTE **

This has major conflicts with two other trees.

A restructure of include/trace caused a conflict with:

 The nfsd tree for commit:

  tracing: Introduce helpers to safely handle dynamic-sized sockaddrs

(currently it is commit d07c9ad622474616e94572e59e725c2c4a494fb4 in linux-next)

And the custom event sample relies on matching the prototype of
the sched_switch event that was changed by:

 The tip sched/core tree:

  sched/tracing: Don't re-read p->state when emitting sched_switch event

(currently is commit fa2c3254d7cfff5f7a916ab928a562d1165f17bb in linux-next)

Which does not conflict, but will cause the build to fail. Merging the two
trees requires the sample in samples/trace_events/trace_custom_sched.h to
match the prototype of the sched_switch event in include/trace/events/sched.h.

My tree has a branch called:

  trace-merge-next-20220315

That resolved both of the above issues.

For more details see the report of the issues mentioned above:

 https://lore.kernel.org/all/20220315145828.413e9301@canb.auug.org.au/



Tracing updates for 5.18:

- New user_events interface. User space can register an event with the kernel
  describing the format of the event. Then it will receive a byte in a page
  mapping that it can check against. A privileged task can then enable that
  event like any other event, which will change the mapped byte to true,
  telling the user space application to start writing the event to the
  tracing buffer.

- Add new "ftrace_boot_snapshot" kernel command line parameter. When set,
  the tracing buffer will be saved in the snapshot buffer at boot up when
  the kernel hands things over to user space. This will keep the traces that
  happened at boot up available even if user space boot up has tracing as
  well.

- Have TRACE_EVENT_ENUM() also update trace event field type descriptions.
  Thus if a static array defines its size with an enum, the user space trace
  event parsers can still know how to parse that array.

- Add new TRACE_CUSTOM_EVENT() macro. This acts the same as the
  TRACE_EVENT() macro, but will attach to an existing tracepoint. This will
  make one tracepoint be able to trace different content and not be stuck at
  only what the original TRACE_EVENT() macro exports.

- Fixes to tracing error logging.

- Better saving of cmdlines to PIDs when tracing (use the wakeup events for
  mapping).

Please pull the latest trace-v5.18 tree, which can be found at:


  git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace.git
trace-v5.18

Tag SHA1: 61be4324105e5feff3de2eff421cbea80a8d490f
Head SHA1: 795301d3c28996219d555023ac6863401b6076bc


Beau Belgrave (15):
      user_events: Add minimal support for trace_event into ftrace
      user_events: Add print_fmt generation support for basic types
      user_events: Handle matching arguments from dyn_events
      user_events: Add basic perf and eBPF support
      user_events: Optimize writing events by only copying data once
      user_events: Validate user payloads for size and null termination
      user_events: Add self-test for ftrace integration
      user_events: Add self-test for dynamic_events integration
      user_events: Add self-test for perf_event integration
      user_events: Add self-test for validator boundaries
      user_events: Add sample code for typical usage
      user_events: Add documentation file
      user_events: Fix potential uninitialized pointer while parsing field
      user_events: Prevent dyn_event delete racing with ioctl add/delete
      user_events: Add trace event call as root for low permission cases

Steven Rostedt (Google) (11):
      tracing: Save both wakee and current on wakeup events
      tracing: Fix allocation of last_cmd in last_cmd_set()
      tracing: Fix last_cmd_set() string management in histogram code
      tracing: Allow custom events to be added to the tracefs directory
      tracing: Add sample code for custom trace events
      tracing: Move the defines to create TRACE_EVENTS into their own files
      tracing: Add TRACE_CUSTOM_EVENT() macro
      tracing: Have TRACE_DEFINE_ENUM affect trace event types as well
      tracing: Add snapshot at end of kernel boot up
      tracing/user_events: Use alloc_pages instead of kzalloc() for register pages
      tracing: Have type enum modifications copy the strings

Tom Zanussi (4):
      tracing: Remove size restriction on tracing_log_err cmd strings
      tracing: Remove size restriction on hist trigger cmd error logging
      tracing: Remove size restriction on synthetic event cmd error logging
      tracing: Fix strncpy warning in trace_events_synth.c

----
 Documentation/admin-guide/kernel-parameters.txt   |    8 +
 Documentation/trace/index.rst                     |    1 +
 Documentation/trace/user_events.rst               |  216 +++
 include/linux/ftrace.h                            |   11 +-
 include/linux/trace_events.h                      |   24 +-
 include/trace/define_custom_trace.h               |   77 +
 include/trace/stages/init.h                       |   37 +
 include/trace/stages/stage1_defines.h             |   45 +
 include/trace/stages/stage2_defines.h             |   48 +
 include/trace/stages/stage3_defines.h             |  129 ++
 include/trace/stages/stage4_defines.h             |   57 +
 include/trace/stages/stage5_defines.h             |   83 +
 include/trace/stages/stage6_defines.h             |   86 ++
 include/trace/stages/stage7_defines.h             |   34 +
 include/trace/trace_custom_events.h               |  221 +++
 include/trace/trace_events.h                      |  499 +-----
 include/uapi/linux/user_events.h                  |  116 ++
 kernel/trace/Kconfig                              |   14 +
 kernel/trace/Makefile                             |    1 +
 kernel/trace/ftrace.c                             |    2 +
 kernel/trace/trace.c                              |   73 +-
 kernel/trace/trace.h                              |    2 +-
 kernel/trace/trace_events.c                       |   90 ++
 kernel/trace/trace_events_hist.c                  |   33 +-
 kernel/trace/trace_events_synth.c                 |   14 +-
 kernel/trace/trace_events_user.c                  | 1690 +++++++++++++++++++++
 kernel/trace/trace_sched_switch.c                 |    2 +-
 samples/Kconfig                                   |    8 +-
 samples/Makefile                                  |    1 +
 samples/trace_events/Makefile                     |    2 +
 samples/trace_events/trace_custom_sched.c         |   60 +
 samples/trace_events/trace_custom_sched.h         |   95 ++
 samples/user_events/Makefile                      |    5 +
 samples/user_events/example.c                     |   91 ++
 tools/testing/selftests/user_events/Makefile      |    9 +
 tools/testing/selftests/user_events/dyn_test.c    |  130 ++
 tools/testing/selftests/user_events/ftrace_test.c |  452 ++++++
 tools/testing/selftests/user_events/perf_test.c   |  168 ++
 tools/testing/selftests/user_events/settings      |    1 +
 39 files changed, 4116 insertions(+), 519 deletions(-)
 create mode 100644 Documentation/trace/user_events.rst
 create mode 100644 include/trace/define_custom_trace.h
 create mode 100644 include/trace/stages/init.h
 create mode 100644 include/trace/stages/stage1_defines.h
 create mode 100644 include/trace/stages/stage2_defines.h
 create mode 100644 include/trace/stages/stage3_defines.h
 create mode 100644 include/trace/stages/stage4_defines.h
 create mode 100644 include/trace/stages/stage5_defines.h
 create mode 100644 include/trace/stages/stage6_defines.h
 create mode 100644 include/trace/stages/stage7_defines.h
 create mode 100644 include/trace/trace_custom_events.h
 create mode 100644 include/uapi/linux/user_events.h
 create mode 100644 kernel/trace/trace_events_user.c
 create mode 100644 samples/trace_events/trace_custom_sched.c
 create mode 100644 samples/trace_events/trace_custom_sched.h
 create mode 100644 samples/user_events/Makefile
 create mode 100644 samples/user_events/example.c
 create mode 100644 tools/testing/selftests/user_events/Makefile
 create mode 100644 tools/testing/selftests/user_events/dyn_test.c
 create mode 100644 tools/testing/selftests/user_events/ftrace_test.c
 create mode 100644 tools/testing/selftests/user_events/perf_test.c
 create mode 100644 tools/testing/selftests/user_events/settings
---------------------------

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [GIT PULL] tracing: Updates for 5.18
  2022-03-21 14:56 [GIT PULL] tracing: Updates for 5.18 Steven Rostedt
@ 2022-03-23 18:47 ` Linus Torvalds
  2022-03-23 19:39   ` Steven Rostedt
  2022-03-23 18:56 ` Linus Torvalds
  2022-03-23 19:26 ` pr-tracker-bot
  2 siblings, 1 reply; 9+ messages in thread
From: Linus Torvalds @ 2022-03-23 18:47 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: LKML, Ingo Molnar, Andrew Morton, Beau Belgrave, Tom Zanussi,
	Stephen Rothwell

On Mon, Mar 21, 2022 at 7:56 AM Steven Rostedt <rostedt@goodmis.org> wrote:
>
> A restructure of include/trace caused a conflict [..]

Ugh. Disgusting. And in the very same pull request it shows why that
TRACE_CUSTOM_EVENT() thing that caused this all was actually a
horribly bad idea, since it also then DIDN'T WORK due to the kernel
interfaces changing.

So this restructuring seems to have been triggered by something that
was a bad idea to begin with.

But the real problem is here:

> Tracing updates for 5.18:
>
> - New user_events interface. User space can register an event with the kernel
>   describing the format of the event. Then it will receive a byte in a page
>   mapping that it can check against. A privileged task can then enable that
>   event like any other event, which will change the mapped byte to true,
>   telling the user space application to start writing the event to the
>   tracing buffer.

That explanation makes no sense, because it doesn't actually explain *why*.

It explains *what*, but the big issue for new interfaces shoudl always
be why the heck a new interface was needed in the first place.

I've pulled this, but under protest.

              Linus

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [GIT PULL] tracing: Updates for 5.18
  2022-03-21 14:56 [GIT PULL] tracing: Updates for 5.18 Steven Rostedt
  2022-03-23 18:47 ` Linus Torvalds
@ 2022-03-23 18:56 ` Linus Torvalds
  2022-03-23 19:20   ` Linus Torvalds
  2022-03-23 19:26 ` pr-tracker-bot
  2 siblings, 1 reply; 9+ messages in thread
From: Linus Torvalds @ 2022-03-23 18:56 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: LKML, Ingo Molnar, Andrew Morton, Beau Belgrave, Tom Zanussi,
	Stephen Rothwell

On Mon, Mar 21, 2022 at 7:56 AM Steven Rostedt <rostedt@goodmis.org> wrote:
>
> My tree has a branch called:
>
>   trace-merge-next-20220315
>
> That resolved both of the above issues.

Oh, and that was completely pointless.

That isn't actually a tree that shows the resolution, that's literally
the linux-next tree.

So I did my normal merge, and then after that decided "ok, let's see
how Steven did it" and did my normal

     git checkout -b test-merge HEAD^
     git pull ..yourtree.. trace-merge-next-20220315

but that doesn't work at all because your trace-merge-next-20220315
has not just the tracing tree, but EVERYTHING. So it just conflicts
EVEN MORE.

So that "trace-merge" branch is only pointless noise. For it to be
useful, it should have contained the conflicting stuff, but *only* the
conflicting stuff. Not everything else too, that just causes even more
conflicts.

Anyway, when I actually compare my resolution to what is in
linux-next, it turns out they are fairly different. But I think my
resolution is the correct one in that it actually makes the sockaddr
cases match the other cases, and the original patch that added them.

I'm not particularly happy with my resolution either, but that's
because I'm not super-happy with that code, but whatever.

               Linus

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [GIT PULL] tracing: Updates for 5.18
  2022-03-23 18:56 ` Linus Torvalds
@ 2022-03-23 19:20   ` Linus Torvalds
  2022-03-23 19:43     ` Steven Rostedt
  0 siblings, 1 reply; 9+ messages in thread
From: Linus Torvalds @ 2022-03-23 19:20 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: LKML, Ingo Molnar, Andrew Morton, Beau Belgrave, Tom Zanussi,
	Stephen Rothwell

On Wed, Mar 23, 2022 at 11:56 AM Linus Torvalds
<torvalds@linux-foundation.org> wrote:
>
> Anyway, when I actually compare my resolution to what is in
> linux-next, it turns out they are fairly different.

Actually, my resolution is fairly similar - but not identical - to
linux-next, but quite different from the one I find in your branch. I
just got confused by having looked at both.

                Linus

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [GIT PULL] tracing: Updates for 5.18
  2022-03-21 14:56 [GIT PULL] tracing: Updates for 5.18 Steven Rostedt
  2022-03-23 18:47 ` Linus Torvalds
  2022-03-23 18:56 ` Linus Torvalds
@ 2022-03-23 19:26 ` pr-tracker-bot
  2 siblings, 0 replies; 9+ messages in thread
From: pr-tracker-bot @ 2022-03-23 19:26 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: Linus Torvalds, LKML, Ingo Molnar, Andrew Morton, Beau Belgrave,
	Tom Zanussi, Stephen Rothwell

The pull request you sent on Mon, 21 Mar 2022 10:56:21 -0400:

> git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace.git trace-v5.18

has been merged into torvalds/linux.git:
https://git.kernel.org/torvalds/c/1bc191051dca28fa6d20fd1dc34a1903e7d4fb62

Thank you!

-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/prtracker.html

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [GIT PULL] tracing: Updates for 5.18
  2022-03-23 18:47 ` Linus Torvalds
@ 2022-03-23 19:39   ` Steven Rostedt
  0 siblings, 0 replies; 9+ messages in thread
From: Steven Rostedt @ 2022-03-23 19:39 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: LKML, Ingo Molnar, Andrew Morton, Beau Belgrave, Tom Zanussi,
	Stephen Rothwell

On Wed, 23 Mar 2022 11:47:07 -0700
Linus Torvalds <torvalds@linux-foundation.org> wrote:

> On Mon, Mar 21, 2022 at 7:56 AM Steven Rostedt <rostedt@goodmis.org> wrote:
> >
> > A restructure of include/trace caused a conflict [..]  
> 
> Ugh. Disgusting. And in the very same pull request it shows why that
> TRACE_CUSTOM_EVENT() thing that caused this all was actually a
> horribly bad idea, since it also then DIDN'T WORK due to the kernel
> interfaces changing.

I thought I explained the reasoning behind that in my pull request.

CUSTOM events have to match the function prototype to the tracepoint that
they are on top of (which is created by the TRACE_EVENT), and if they do
not, bad things can happen at run time. Thus, the added check to make sure
it will fail at build time.

> 
> So this restructuring seems to have been triggered by something that
> was a bad idea to begin with.
> 
> But the real problem is here:
> 
> > Tracing updates for 5.18:
> >
> > - New user_events interface. User space can register an event with the kernel
> >   describing the format of the event. Then it will receive a byte in a page
> >   mapping that it can check against. A privileged task can then enable that
> >   event like any other event, which will change the mapped byte to true,
> >   telling the user space application to start writing the event to the
> >   tracing buffer.  
> 
> That explanation makes no sense, because it doesn't actually explain *why*.

Sorry, sometimes when you are deep into the work, things that are obvious
to yourself may not be obvious to others. Being able to know those things
is an art onto itself.

> 
> It explains *what*, but the big issue for new interfaces shoudl always
> be why the heck a new interface was needed in the first place.

The why is that we have applications that run in containers that want
events to be traced. But we do not want to always trace those events. These
applications will not have an interface to talk to, to say "start tracing
X", as they are inside a container and various other reasons.

Thus, the applications can add their own trace events, and then the admin
that is outside the container can enable the events inside the container,
by enabling them from the tracefs file system, which will set a byte in the
mapping that happened when the application registered the event, where it
can now know to start tracing the event.

It does require that the application has a conditional jmp on that byte,
and not be optimized like the kernel is with static_branches.

I hope that explains things a bit better.

> 
> I've pulled this, but under protest.

Thank you.

-- Steve

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [GIT PULL] tracing: Updates for 5.18
  2022-03-23 19:20   ` Linus Torvalds
@ 2022-03-23 19:43     ` Steven Rostedt
  2022-03-23 19:49       ` Linus Torvalds
  0 siblings, 1 reply; 9+ messages in thread
From: Steven Rostedt @ 2022-03-23 19:43 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: LKML, Ingo Molnar, Andrew Morton, Beau Belgrave, Tom Zanussi,
	Stephen Rothwell

On Wed, 23 Mar 2022 12:20:33 -0700
Linus Torvalds <torvalds@linux-foundation.org> wrote:

> On Wed, Mar 23, 2022 at 11:56 AM Linus Torvalds
> <torvalds@linux-foundation.org> wrote:
> >
> > Anyway, when I actually compare my resolution to what is in
> > linux-next, it turns out they are fairly different.  
> 
> Actually, my resolution is fairly similar - but not identical - to
> linux-next, but quite different from the one I find in your branch. I
> just got confused by having looked at both.

I'll take a look at yours. I gave that branch to Stephen to help him resolve
it, but didn't look at what he had done to see if it was different.

I didn't merge against your branch because when I did the pull request you
didn't have the nfsd tree in yet.

-- Steve

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [GIT PULL] tracing: Updates for 5.18
  2022-03-23 19:43     ` Steven Rostedt
@ 2022-03-23 19:49       ` Linus Torvalds
  2022-03-24 23:05         ` Steven Rostedt
  0 siblings, 1 reply; 9+ messages in thread
From: Linus Torvalds @ 2022-03-23 19:49 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: LKML, Ingo Molnar, Andrew Morton, Beau Belgrave, Tom Zanussi,
	Stephen Rothwell

On Wed, Mar 23, 2022 at 12:43 PM Steven Rostedt <rostedt@goodmis.org> wrote:
>
> I'll take a look at yours. I gave that branch to Stephen to help him resolve
> it, but didn't look at what he had done to see if it was different.

I may actually have messed up my comparison with your tree, because I
was doing some of that while in my "test-merge" branch (which had that
dirty state due to the merge not working). Maybe I screwed up twice.

I think the only difference I have against linux-next is because I added the

  #undef __assign_sockaddr
...
  #undef __assign_rel_sockaddr

lines to stage6 to match the other pre-existing non-sockaddr cases.

              Linus

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [GIT PULL] tracing: Updates for 5.18
  2022-03-23 19:49       ` Linus Torvalds
@ 2022-03-24 23:05         ` Steven Rostedt
  0 siblings, 0 replies; 9+ messages in thread
From: Steven Rostedt @ 2022-03-24 23:05 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: LKML, Ingo Molnar, Andrew Morton, Beau Belgrave, Tom Zanussi,
	Stephen Rothwell

On Wed, 23 Mar 2022 12:49:08 -0700
Linus Torvalds <torvalds@linux-foundation.org> wrote:

> On Wed, Mar 23, 2022 at 12:43 PM Steven Rostedt <rostedt@goodmis.org> wrote:
> >
> > I'll take a look at yours. I gave that branch to Stephen to help him resolve
> > it, but didn't look at what he had done to see if it was different.  
> 
> I may actually have messed up my comparison with your tree, because I
> was doing some of that while in my "test-merge" branch (which had that
> dirty state due to the merge not working). Maybe I screwed up twice.
> 
> I think the only difference I have against linux-next is because I added the
> 
>   #undef __assign_sockaddr
> ...
>   #undef __assign_rel_sockaddr
> 
> lines to stage6 to match the other pre-existing non-sockaddr cases.

Yeah, that looks correct. Looking at my merge branch, it appears I messed
it up :-p

But what is in your tree looks like what it should be.

I also should rename the files to what they are doing. The "stage1, stage2,
etc" is meaningless :-p

I think I'll go write up a patch to do that.

-- Steve

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2022-03-24 23:05 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-21 14:56 [GIT PULL] tracing: Updates for 5.18 Steven Rostedt
2022-03-23 18:47 ` Linus Torvalds
2022-03-23 19:39   ` Steven Rostedt
2022-03-23 18:56 ` Linus Torvalds
2022-03-23 19:20   ` Linus Torvalds
2022-03-23 19:43     ` Steven Rostedt
2022-03-23 19:49       ` Linus Torvalds
2022-03-24 23:05         ` Steven Rostedt
2022-03-23 19:26 ` pr-tracker-bot

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.