diff options
| author | Frederic Weisbecker <fweisbec@gmail.com> | 2009-08-13 04:27:18 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-08-13 04:37:25 -0400 |
| commit | 3a9f131fb00b8ac5950a11ad1599e45edfb5ae44 (patch) | |
| tree | 35e2b425a82c6c160a18554fdd9329618abecc4f | |
| parent | 28402971d869e26271b25301011f667d3a5640c3 (diff) | |
perf tools: Add a per tracepoint counter attribute to get raw sample
Add a new flag field while opening a tracepoint perf counter:
-e tracepoint_subsystem:tracepoint_name:flags
This is intended to be generic although for now it only supports the
r[e[c[o[r[d]]]]] flag:
./perf record -e workqueue:workqueue_insertion:record
./perf record -e workqueue:workqueue_insertion:r
will have the same effect: enabling the raw samples record for
the given tracepoint counter.
In the future, we may want to support further flags, separated
by commas.
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Mike Galbraith <efault@gmx.de>
LKML-Reference: <1250152039-7284-1-git-send-email-fweisbec@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
| -rw-r--r-- | tools/perf/builtin-record.c | 2 | ||||
| -rw-r--r-- | tools/perf/util/parse-events.c | 10 |
2 files changed, 11 insertions, 1 deletions
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c index de76008fbaa2..78adc47da869 100644 --- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c | |||
| @@ -398,7 +398,7 @@ static void create_counter(int counter, int cpu, pid_t pid) | |||
| 398 | PERF_FORMAT_TOTAL_TIME_RUNNING | | 398 | PERF_FORMAT_TOTAL_TIME_RUNNING | |
| 399 | PERF_FORMAT_ID; | 399 | PERF_FORMAT_ID; |
| 400 | 400 | ||
| 401 | attr->sample_type = PERF_SAMPLE_IP | PERF_SAMPLE_TID; | 401 | attr->sample_type |= PERF_SAMPLE_IP | PERF_SAMPLE_TID; |
| 402 | 402 | ||
| 403 | if (freq) { | 403 | if (freq) { |
| 404 | attr->sample_type |= PERF_SAMPLE_PERIOD; | 404 | attr->sample_type |= PERF_SAMPLE_PERIOD; |
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index 4858d83b3b67..044178408783 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c | |||
| @@ -379,6 +379,7 @@ static int parse_tracepoint_event(const char **strp, | |||
| 379 | struct perf_counter_attr *attr) | 379 | struct perf_counter_attr *attr) |
| 380 | { | 380 | { |
| 381 | const char *evt_name; | 381 | const char *evt_name; |
| 382 | char *flags; | ||
| 382 | char sys_name[MAX_EVENT_LENGTH]; | 383 | char sys_name[MAX_EVENT_LENGTH]; |
| 383 | char id_buf[4]; | 384 | char id_buf[4]; |
| 384 | int fd; | 385 | int fd; |
| @@ -400,6 +401,15 @@ static int parse_tracepoint_event(const char **strp, | |||
| 400 | strncpy(sys_name, *strp, sys_length); | 401 | strncpy(sys_name, *strp, sys_length); |
| 401 | sys_name[sys_length] = '\0'; | 402 | sys_name[sys_length] = '\0'; |
| 402 | evt_name = evt_name + 1; | 403 | evt_name = evt_name + 1; |
| 404 | |||
| 405 | flags = strchr(evt_name, ':'); | ||
| 406 | if (flags) { | ||
| 407 | *flags = '\0'; | ||
| 408 | flags++; | ||
| 409 | if (!strncmp(flags, "record", strlen(flags))) | ||
| 410 | attr->sample_type |= PERF_SAMPLE_RAW; | ||
| 411 | } | ||
| 412 | |||
| 403 | evt_length = strlen(evt_name); | 413 | evt_length = strlen(evt_name); |
| 404 | if (evt_length >= MAX_EVENT_LENGTH) | 414 | if (evt_length >= MAX_EVENT_LENGTH) |
| 405 | return 0; | 415 | return 0; |
