tracing/user_events: Document multi-format flag
User programs can now ask user_events to handle the synchronization of multiple different formats for an event with the same name via the new USER_EVENT_REG_MULTI_FORMAT flag. Add a section for USER_EVENT_REG_MULTI_FORMAT that explains the intended purpose and caveats of using it. Explain how deletion works in these cases and how to use /sys/kernel/tracing/dynamic_events for per-version deletion. Link: https://lore.kernel.org/linux-trace-kernel/20240222001807.1463-5-beaub@linux.microsoft.com Signed-off-by: Beau Belgrave <beaub@linux.microsoft.com> Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
This commit is contained in:
parent
bcb7bdcc17
commit
3727db1c09
@ -92,6 +92,24 @@ The following flags are currently supported.
|
||||
process closes or unregisters the event. Requires CAP_PERFMON otherwise
|
||||
-EPERM is returned.
|
||||
|
||||
+ USER_EVENT_REG_MULTI_FORMAT: The event can contain multiple formats. This
|
||||
allows programs to prevent themselves from being blocked when their event
|
||||
format changes and they wish to use the same name. When this flag is used the
|
||||
tracepoint name will be in the new format of "name.unique_id" vs the older
|
||||
format of "name". A tracepoint will be created for each unique pair of name
|
||||
and format. This means if several processes use the same name and format,
|
||||
they will use the same tracepoint. If yet another process uses the same name,
|
||||
but a different format than the other processes, it will use a different
|
||||
tracepoint with a new unique id. Recording programs need to scan tracefs for
|
||||
the various different formats of the event name they are interested in
|
||||
recording. The system name of the tracepoint will also use "user_events_multi"
|
||||
instead of "user_events". This prevents single-format event names conflicting
|
||||
with any multi-format event names within tracefs. The unique_id is output as
|
||||
a hex string. Recording programs should ensure the tracepoint name starts with
|
||||
the event name they registered and has a suffix that starts with . and only
|
||||
has hex characters. For example to find all versions of the event "test" you
|
||||
can use the regex "^test\.[0-9a-fA-F]+$".
|
||||
|
||||
Upon successful registration the following is set.
|
||||
|
||||
+ write_index: The index to use for this file descriptor that represents this
|
||||
@ -106,6 +124,9 @@ or perf record -e user_events:[name] when attaching/recording.
|
||||
**NOTE:** The event subsystem name by default is "user_events". Callers should
|
||||
not assume it will always be "user_events". Operators reserve the right in the
|
||||
future to change the subsystem name per-process to accommodate event isolation.
|
||||
In addition if the USER_EVENT_REG_MULTI_FORMAT flag is used the tracepoint name
|
||||
will have a unique id appended to it and the system name will be
|
||||
"user_events_multi" as described above.
|
||||
|
||||
Command Format
|
||||
^^^^^^^^^^^^^^
|
||||
@ -156,7 +177,11 @@ to request deletes than the one used for registration due to this.
|
||||
to the event. If programs do not want auto-delete, they must use the
|
||||
USER_EVENT_REG_PERSIST flag when registering the event. Once that flag is used
|
||||
the event exists until DIAG_IOCSDEL is invoked. Both register and delete of an
|
||||
event that persists requires CAP_PERFMON, otherwise -EPERM is returned.
|
||||
event that persists requires CAP_PERFMON, otherwise -EPERM is returned. When
|
||||
there are multiple formats of the same event name, all events with the same
|
||||
name will be attempted to be deleted. If only a specific version is wanted to
|
||||
be deleted then the /sys/kernel/tracing/dynamic_events file should be used for
|
||||
that specific format of the event.
|
||||
|
||||
Unregistering
|
||||
-------------
|
||||
|
Loading…
Reference in New Issue
Block a user