Messages in this thread | | | Subject | Re: [PATCH v11 2/3]: perf record: enable asynchronous trace writing | From | Alexey Budankov <> | Date | Mon, 8 Oct 2018 15:15:05 +0300 |
| |
Hi,
On 08.10.2018 13:57, Jiri Olsa wrote: > On Mon, Oct 08, 2018 at 09:17:11AM +0300, Alexey Budankov wrote: > > SNIP > >> static int record__mmap_read_evlist(struct record *rec, struct perf_evlist *evlist, >> bool overwrite) >> { >> @@ -520,7 +644,10 @@ static int record__mmap_read_evlist(struct record *rec, struct perf_evlist *evli >> int i; >> int rc = 0; >> struct perf_mmap *maps; >> - >> +#ifdef HAVE_AIO_SUPPORT >> + int trace_fd = rec->data.file.fd; >> + off_t off; >> +#endif >> if (!evlist) >> return 0; >> >> @@ -531,14 +658,34 @@ static int record__mmap_read_evlist(struct record *rec, struct perf_evlist *evli >> if (overwrite && evlist->bkw_mmap_state != BKW_MMAP_DATA_PENDING) >> return 0; >> >> +#ifdef HAVE_AIO_SUPPORT >> + off = lseek(trace_fd, 0, SEEK_CUR); >> +#endif >> for (i = 0; i < evlist->nr_mmaps; i++) { >> struct perf_mmap *map = &maps[i]; >> >> if (map->base) { >> - if (perf_mmap__push(map, rec, record__pushfn) != 0) { >> - rc = -1; >> - goto out; >> +#ifdef HAVE_AIO_SUPPORT >> + if (!rec->opts.nr_cblocks) { >> +#endif >> + if (perf_mmap__push(map, rec, record__pushfn) != 0) { >> + rc = -1; >> + goto out; >> + } >> +#ifdef HAVE_AIO_SUPPORT >> + } else { >> + /* >> + * Call record__aio_sync() to wait till map->data buffer >> + * becomes available after previous aio write request. >> + */ >> + record__aio_sync(map); >> + if (perf_mmap__aio_push(map, rec, record__aio_pushfn, &off) != 0) { >> + lseek(trace_fd, off, SEEK_SET); >> + rc = -1; >> + goto out; >> + } >> } >> +#endif > > I really don't like this.. let's have some aio_... function with its > dummy counterpart to be called in here.. and again.. if we realyl must > have this compiled optionaly, which I'm not convinced of
Accepted.
Thanks, Alexey
> > jirka >
| |