perf record: Extend trace writing to multi AIO
Multi AIO trace writing allows caching more kernel data into userspace memory postponing trace writing for the sake of overall profiling data thruput increase. It could be seen as kernel data buffer extension into userspace memory. With an --aio option value different from 0 (default value is 1) the tool has capability to cache more and more data into user space along with delegating spill to AIO. That allows avoiding to suspend at record__aio_sync() between calls of record__mmap_read_evlist() and increases profiling data thruput at the cost of userspace memory. Signed-off-by: Alexey Budankov <alexey.budankov@linux.intel.com> Reviewed-by: Jiri Olsa <jolsa@redhat.com> Acked-by: Namhyung Kim <namhyung@kernel.org> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/050bb053-e7f3-aa83-fde7-f27ff90be7f6@linux.intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:

committed by
Arnaldo Carvalho de Melo

parent
d3d1af6f01
commit
93f20c0fe3
@@ -32,8 +32,9 @@ struct perf_mmap {
|
||||
char event_copy[PERF_SAMPLE_MAX_SIZE] __aligned(8);
|
||||
#ifdef HAVE_AIO_SUPPORT
|
||||
struct {
|
||||
void *data;
|
||||
struct aiocb cblock;
|
||||
void **data;
|
||||
struct aiocb *cblocks;
|
||||
struct aiocb **aiocb;
|
||||
int nr_cblocks;
|
||||
} aio;
|
||||
#endif
|
||||
@@ -97,11 +98,11 @@ union perf_event *perf_mmap__read_event(struct perf_mmap *map);
|
||||
int perf_mmap__push(struct perf_mmap *md, void *to,
|
||||
int push(struct perf_mmap *map, void *to, void *buf, size_t size));
|
||||
#ifdef HAVE_AIO_SUPPORT
|
||||
int perf_mmap__aio_push(struct perf_mmap *md, void *to,
|
||||
int perf_mmap__aio_push(struct perf_mmap *md, void *to, int idx,
|
||||
int push(void *to, struct aiocb *cblock, void *buf, size_t size, off_t off),
|
||||
off_t *off);
|
||||
#else
|
||||
static inline int perf_mmap__aio_push(struct perf_mmap *md __maybe_unused, void *to __maybe_unused,
|
||||
static inline int perf_mmap__aio_push(struct perf_mmap *md __maybe_unused, void *to __maybe_unused, int idx __maybe_unused,
|
||||
int push(void *to, struct aiocb *cblock, void *buf, size_t size, off_t off) __maybe_unused,
|
||||
off_t *off __maybe_unused)
|
||||
{
|
||||
|
Reference in New Issue
Block a user