Messages in this thread | | | Date | Tue, 24 Mar 2015 13:27:22 +0200 | From | Adrian Hunter <> | Subject | Re: [PATCH v9 06/14] perf: Add AUX record |
| |
On 24/03/15 13:07, Jiri Olsa wrote: > On Wed, Jan 14, 2015 at 02:18:15PM +0200, Alexander Shishkin wrote: >> When there's new data in the AUX space, output a record indicating its >> offset and size and a set of flags, such as PERF_AUX_FLAG_TRUNCATED, to >> mean the described data was truncated to fit in the ring buffer. >> >> Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com> >> Cc: Arnaldo Carvalho de Melo <acme@infradead.org> >> --- >> include/uapi/linux/perf_event.h | 19 +++++++++++++++++++ >> kernel/events/core.c | 34 ++++++++++++++++++++++++++++++++++ >> kernel/events/internal.h | 3 +++ >> 3 files changed, 56 insertions(+) >> >> diff --git a/include/uapi/linux/perf_event.h b/include/uapi/linux/perf_event.h >> index b7ccdf5e93..2d40e2aa07 100644 >> --- a/include/uapi/linux/perf_event.h >> +++ b/include/uapi/linux/perf_event.h >> @@ -746,6 +746,20 @@ enum perf_event_type { >> */ >> PERF_RECORD_MMAP2 = 10, >> >> + /* >> + * Records that new data landed in the AUX buffer part. >> + * >> + * struct { >> + * struct perf_event_header header; >> + * >> + * u64 aux_offset; >> + * u64 aux_size; >> + * u64 flags; >> + * struct sample_id sample_id; > > hum, I dont see sample_id below in implementation
Alex is away, so I will take the liberty of answering.
perf_event_aux_event() calls perf_event__output_id_sample() That's it isn't it?
> > jirka > >> + * }; >> + */ >> + PERF_RECORD_AUX = 11, >> + >> PERF_RECORD_MAX, /* non-ABI */ >> }; >> >> @@ -763,6 +777,11 @@ enum perf_callchain_context { >> PERF_CONTEXT_MAX = (__u64)-4095, >> }; >> >> +/** >> + * PERF_RECORD_AUX::flags bits >> + */ >> +#define PERF_AUX_FLAG_TRUNCATED 0x01 /* record was truncated to fit */ >> + >> #define PERF_FLAG_FD_NO_GROUP (1UL << 0) >> #define PERF_FLAG_FD_OUTPUT (1UL << 1) >> #define PERF_FLAG_PID_CGROUP (1UL << 2) /* pid=cgroup id, per-cpu mode only */ >> diff --git a/kernel/events/core.c b/kernel/events/core.c >> index a6a145ad0b..4e17393264 100644 >> --- a/kernel/events/core.c >> +++ b/kernel/events/core.c >> @@ -5648,6 +5648,40 @@ void perf_event_mmap(struct vm_area_struct *vma) >> perf_event_mmap_event(&mmap_event); >> } >> >> +void perf_event_aux_event(struct perf_event *event, unsigned long head, >> + unsigned long size, u64 flags) >> +{ >> + struct perf_output_handle handle; >> + struct perf_sample_data sample; >> + struct perf_aux_event { >> + struct perf_event_header header; >> + u64 offset; >> + u64 size; >> + u64 flags; >> + } rec = { >> + .header = { >> + .type = PERF_RECORD_AUX, >> + .misc = 0, >> + .size = sizeof(rec), >> + }, >> + .offset = head, >> + .size = size, >> + .flags = flags, >> + }; >> + int ret; >> + >> + perf_event_header__init_id(&rec.header, &sample, event); >> + ret = perf_output_begin(&handle, event, rec.header.size); >> + >> + if (ret) >> + return; >> + >> + perf_output_put(&handle, rec); >> + perf_event__output_id_sample(event, &handle, &sample); >> + >> + perf_output_end(&handle); >> +} >> + >> /* >> * IRQ throttle logging >> */ >> diff --git a/kernel/events/internal.h b/kernel/events/internal.h >> index 0f6d080159..4d117a9814 100644 >> --- a/kernel/events/internal.h >> +++ b/kernel/events/internal.h >> @@ -62,6 +62,9 @@ static inline bool rb_has_aux(struct ring_buffer *rb) >> return !!rb->aux_nr_pages; >> } >> >> +void perf_event_aux_event(struct perf_event *event, unsigned long head, >> + unsigned long size, u64 flags); >> + >> extern void >> perf_event_header__init_id(struct perf_event_header *header, >> struct perf_sample_data *data, >> -- >> 2.1.4 >> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in >> the body of a message to majordomo@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html >> Please read the FAQ at http://www.tux.org/lkml/ > >
| |