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
|
process closes or unregisters the event. Requires CAP_PERFMON otherwise
|
||||||
-EPERM is returned.
|
-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.
|
Upon successful registration the following is set.
|
||||||
|
|
||||||
+ write_index: The index to use for this file descriptor that represents this
|
+ 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
|
**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
|
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.
|
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
|
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
|
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
|
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
|
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
|
Unregistering
|
||||||
-------------
|
-------------
|
||||||
|
|
Loading…
Reference in New Issue