Skip to content

Commit

Permalink
trace: Add wildcard trace event support
Browse files Browse the repository at this point in the history
A basic wildcard matching is supported in both the monitor command
"trace-event" and the events list file. That means you can enable/disable
the events having a common prefix in a batch. For example, virtio-blk trace
events could be enabled using:
    trace-event virtio_blk_* on

Signed-off-by: Mark Wu <wudxw@linux.vnet.ibm.com>
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
  • Loading branch information
Mark Wu authored and Stefan Hajnoczi committed Nov 1, 2011
1 parent ff74c5a commit 454e202
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 4 deletions.
9 changes: 8 additions & 1 deletion docs/tracing.txt
Original file line number Diff line number Diff line change
Expand Up @@ -132,12 +132,19 @@ This functionality is also provided through monitor commands:
means disabled.

* trace-event NAME on|off
Enable/disable a given trace event.
Enable/disable a given trace event or a group of events having common prefix
through wildcard.

The "-trace events=<file>" command line argument can be used to enable the
events listed in <file> from the very beginning of the program. This file must
contain one event name per line.

A basic wildcard matching is supported in both the monitor command "trace
-event" and the events list file. That means you can enable/disable the events
having a common prefix in a batch. For example, virtio-blk trace events could
be enabled using:
trace-event virtio_blk_* on

== Trace backends ==

The "tracetool" script automates tedious trace event code generation and also
Expand Down
19 changes: 17 additions & 2 deletions trace/simple.c
Original file line number Diff line number Diff line change
Expand Up @@ -324,14 +324,29 @@ void trace_print_events(FILE *stream, fprintf_function stream_printf)
bool trace_event_set_state(const char *name, bool state)
{
unsigned int i;

unsigned int len;
bool wildcard = false;
bool matched = false;

len = strlen(name);
if (len > 0 && name[len - 1] == '*') {
wildcard = true;
len -= 1;
}
for (i = 0; i < NR_TRACE_EVENTS; i++) {
if (wildcard) {
if (!strncmp(trace_list[i].tp_name, name, len)) {
trace_list[i].state = state;
matched = true;
}
continue;
}
if (!strcmp(trace_list[i].tp_name, name)) {
trace_list[i].state = state;
return true;
}
}
return false;
return matched;
}

/* Helper function to create a thread with signals blocked. Use glib's
Expand Down
17 changes: 16 additions & 1 deletion trace/stderr.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,29 @@ void trace_print_events(FILE *stream, fprintf_function stream_printf)
bool trace_event_set_state(const char *name, bool state)
{
unsigned int i;
unsigned int len;
bool wildcard = false;
bool matched = false;

len = strlen(name);
if (len > 0 && name[len - 1] == '*') {
wildcard = true;
len -= 1;
}
for (i = 0; i < NR_TRACE_EVENTS; i++) {
if (wildcard) {
if (!strncmp(trace_list[i].tp_name, name, len)) {
trace_list[i].state = state;
matched = true;
}
continue;
}
if (!strcmp(trace_list[i].tp_name, name)) {
trace_list[i].state = state;
return true;
}
}
return false;
return matched;
}

bool trace_backend_init(const char *events, const char *file)
Expand Down

0 comments on commit 454e202

Please sign in to comment.