196 lines
6.7 KiB
Plaintext
196 lines
6.7 KiB
Plaintext
|
|
libtracefs(3)
|
||
|
|
=============
|
||
|
|
|
||
|
|
NAME
|
||
|
|
----
|
||
|
|
tracefs_event_systems, tracefs_system_events, tracefs_event_enable, tracefs_event_disable,
|
||
|
|
tracefs_event_is_enabled - Work with trace systems and events.
|
||
|
|
|
||
|
|
SYNOPSIS
|
||
|
|
--------
|
||
|
|
[verse]
|
||
|
|
--
|
||
|
|
*#include <tracefs.h>*
|
||
|
|
|
||
|
|
enum tracefs_event_state {
|
||
|
|
TRACEFS_ERROR = -1,
|
||
|
|
TRACEFS_ALL_DISABLED = 0,
|
||
|
|
TRACEFS_ALL_ENABLED = 1,
|
||
|
|
TRACEFS_SOME_ENABLED = 2,
|
||
|
|
};
|
||
|
|
|
||
|
|
char pass:[*]pass:[*]*tracefs_event_systems*(const char pass:[*]_tracing_dir_);
|
||
|
|
char pass:[*]pass:[*]*tracefs_system_events*(const char pass:[*]_tracing_dir_, const char pass:[*]_system_);
|
||
|
|
int *tracefs_event_enable*(struct tracefs_instance pass:[*]_instance_, const char pass:[*]_system_,
|
||
|
|
const char pass:[*]_event_);
|
||
|
|
int *tracefs_event_disable*(struct tracefs_instance pass:[*]_instance_, const char pass:[*]_system_,
|
||
|
|
const char pass:[*]_event_);
|
||
|
|
enum tracefs_enable_state *tracefs_event_is_enabled*(struct tracefs_instance pass:[*]_instance_,
|
||
|
|
const char pass:[*]_system_, const char pass:[*]_event_);
|
||
|
|
--
|
||
|
|
|
||
|
|
DESCRIPTION
|
||
|
|
-----------
|
||
|
|
Trace systems and events related APIs.
|
||
|
|
|
||
|
|
The *tracefs_event_systems()* function returns array of strings with the
|
||
|
|
names of all registered trace systems, located in the given _tracing_dir_
|
||
|
|
directory. This could be NULL or the location of the tracefs mount point
|
||
|
|
for the trace systems of the local machine, or it may be a path to a copy
|
||
|
|
of the tracefs directory from another machine. The last entry in the array
|
||
|
|
is a NULL pointer. The array must be freed with *tracefs_list_free()* API.
|
||
|
|
|
||
|
|
The *tracefs_system_events()* function returns array of strings with the
|
||
|
|
names of all registered trace events for given trace system specified by
|
||
|
|
_system_, located in the given _tracing_dir_ directory. This could be NULL
|
||
|
|
or the location of the tracefs mount point for the trace systems of the
|
||
|
|
local machine, or it may be a path to a copy of the tracefs directory
|
||
|
|
from another machine. The last entry in the array as a NULL pointer.
|
||
|
|
The array must be freed with *tracefs_list_free()* API.
|
||
|
|
|
||
|
|
The *tracefs_event_enable()* function enables a given event based on
|
||
|
|
the _system_ and _event_ passed in for the given _instance_. If _instance_
|
||
|
|
is NULL, then the top level tracing directory is used. If _system_
|
||
|
|
and _event_ are both NULL, then all events are enabled for the _instance_.
|
||
|
|
If _event_ is NULL then all events within the _system_ are enabled.
|
||
|
|
If _system_ is NULL, then all systems are searched and any event within
|
||
|
|
a system that matches _event_ is enabled. Both _system_ and _event_ may
|
||
|
|
be regular expressions as defined by *regex*(3).
|
||
|
|
|
||
|
|
The *tracefs_event_disable()* function disables the events that match
|
||
|
|
the _system_ and _event_ parameters for the given _instance_. What events
|
||
|
|
are disable follow the same rules as *tracefs_event_enable()* for matching
|
||
|
|
events. That is, if _instance_ is NULL, then the top level tracing directory
|
||
|
|
is used. If both _system_ and _event_ are NULL then all events are disabled
|
||
|
|
for the given _instance_, and so on.
|
||
|
|
|
||
|
|
The *tracefs_event_is_enabled()* returns if an event is enabled, a set of
|
||
|
|
events are enabled, a system is enabled, or all events are enabled. If both
|
||
|
|
_system_ and _event_ are NULL, then it returns the enable state of all events.
|
||
|
|
If _system_ is not NULL and _event_ is NULL, then it will check if all the events
|
||
|
|
in all the systems that _system_ and return the enable state of those events.
|
||
|
|
If _system_ is NULL and _event_ is not NULL, then it will match all the events
|
||
|
|
in all systems that match _event_ and return their enabled state. If both _system_
|
||
|
|
and _event_ are not NULL, then it will return the enabled state of all matching
|
||
|
|
events. The enabled state is defined as:
|
||
|
|
|
||
|
|
*TRACEFS_ERROR* - An error occurred including no event were matched.
|
||
|
|
|
||
|
|
*TRACEFS_ALL_DISABLED* - All matching events are disabled.
|
||
|
|
|
||
|
|
*TRACEFS_ALL_ENABLED* - All matching events are enabled.
|
||
|
|
|
||
|
|
*TRACEFS_SOME_ENABLED* - Some matching events were enabled while others were not.
|
||
|
|
|
||
|
|
RETURN VALUE
|
||
|
|
------------
|
||
|
|
The *tracefs_event_systems()* and *tracefs_system_events()* functions return
|
||
|
|
an array of strings. The last element in that array is a NULL pointer. The array
|
||
|
|
must be freed with *tracefs_list_free()* API. In case of an error, NULL is returned.
|
||
|
|
|
||
|
|
Both *tracefs_event_enable()* and *tracefs_event_disable()* return 0 if they found
|
||
|
|
any matching events (Note it does not check the previous status of the event. If
|
||
|
|
*tracefs_event_enable()* finds an event that is already enabled, and there are no
|
||
|
|
other errors, then it will return 0). If an error occurs, even if other events were
|
||
|
|
found, it will return -1 and errno will be set. If no errors occur, but no events
|
||
|
|
are found that match the _system_ and _event_ parameters, then -1 is returned
|
||
|
|
and errno is not set.
|
||
|
|
|
||
|
|
The *tracefs_event_is_enabled()* returns the enabled status of the matching events
|
||
|
|
or TRACEFS_ERROR on error.
|
||
|
|
|
||
|
|
EXAMPLE
|
||
|
|
-------
|
||
|
|
[source,c]
|
||
|
|
--
|
||
|
|
#include <tracefs.h>
|
||
|
|
|
||
|
|
char **systems = tracefs_event_systems(NULL);
|
||
|
|
|
||
|
|
if (systems) {
|
||
|
|
int i = 0;
|
||
|
|
/* Got registered trace systems from the top trace instance */
|
||
|
|
while (systems[i]) {
|
||
|
|
char **events = tracefs_system_events(NULL, systems[i]);
|
||
|
|
if (events) {
|
||
|
|
/* Got registered events in system[i] from the top trace instance */
|
||
|
|
int j = 0;
|
||
|
|
|
||
|
|
while (events[j]) {
|
||
|
|
/* Got event[j] in system[i] from the top trace instance */
|
||
|
|
j++;
|
||
|
|
}
|
||
|
|
tracefs_list_free(events);
|
||
|
|
}
|
||
|
|
i++;
|
||
|
|
}
|
||
|
|
tracefs_list_free(systems);
|
||
|
|
}
|
||
|
|
....
|
||
|
|
static int records_walk(struct tep_event *tep, struct tep_record *record, int cpu, void *context)
|
||
|
|
{
|
||
|
|
/* Got recorded event on cpu */
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
...
|
||
|
|
struct tep_handle *tep = tracefs_local_events(NULL);
|
||
|
|
|
||
|
|
if (!tep) {
|
||
|
|
/* Failed to initialise tep handler with local events */
|
||
|
|
...
|
||
|
|
}
|
||
|
|
|
||
|
|
errno = 0;
|
||
|
|
ret = tracefs_event_enable(NULL, "sched", NULL);
|
||
|
|
if (ret < 0 && !errno)
|
||
|
|
printf("Could not find 'sched' events\n");
|
||
|
|
tracefs_event_enable(NULL, "irq", "irq_handler_\(enter\|exit\)");
|
||
|
|
|
||
|
|
if (tracefs_iterate_raw_events(tep, NULL, NULL, 0, records_walk, NULL) < 0) {
|
||
|
|
/* Error walking through the recorded raw events */
|
||
|
|
}
|
||
|
|
|
||
|
|
/* Disable all events */
|
||
|
|
tracefs_event_disable(NULL, NULL, NULL);
|
||
|
|
tep_free(tep);
|
||
|
|
--
|
||
|
|
FILES
|
||
|
|
-----
|
||
|
|
[verse]
|
||
|
|
--
|
||
|
|
*tracefs.h*
|
||
|
|
Header file to include in order to have access to the library APIs.
|
||
|
|
*-ltracefs*
|
||
|
|
Linker switch to add when building a program that uses the library.
|
||
|
|
--
|
||
|
|
|
||
|
|
SEE ALSO
|
||
|
|
--------
|
||
|
|
*libtracefs*(3),
|
||
|
|
*libtraceevent*(3),
|
||
|
|
*trace-cmd*(1)
|
||
|
|
|
||
|
|
AUTHOR
|
||
|
|
------
|
||
|
|
[verse]
|
||
|
|
--
|
||
|
|
*Steven Rostedt* <rostedt@goodmis.org>
|
||
|
|
*Tzvetomir Stoyanov* <tz.stoyanov@gmail.com>
|
||
|
|
--
|
||
|
|
REPORTING BUGS
|
||
|
|
--------------
|
||
|
|
Report bugs to <linux-trace-devel@vger.kernel.org>
|
||
|
|
|
||
|
|
LICENSE
|
||
|
|
-------
|
||
|
|
libtracefs is Free Software licensed under the GNU LGPL 2.1
|
||
|
|
|
||
|
|
RESOURCES
|
||
|
|
---------
|
||
|
|
https://git.kernel.org/pub/scm/libs/libtrace/libtracefs.git/
|
||
|
|
|
||
|
|
COPYING
|
||
|
|
-------
|
||
|
|
Copyright \(C) 2020 VMware, Inc. Free use of this software is granted under
|
||
|
|
the terms of the GNU Public License (GPL).
|