Messages in this thread | | | Subject | Re: [PATCH v11 2/3]: perf record: enable asynchronous trace writing | From | Alexey Budankov <> | Date | Mon, 8 Oct 2018 18:39:21 +0300 |
| |
Hi, On 08.10.2018 18:11, Jiri Olsa wrote: > On Mon, Oct 08, 2018 at 05:42:18PM +0300, Alexey Budankov wrote: >> Hi, >> On 08.10.2018 15:53, Jiri Olsa wrote: >>> On Mon, Oct 08, 2018 at 03:24:31PM +0300, Alexey Budankov wrote: >>>> Hi, >>>> >>>> On 08.10.2018 13:52, Jiri Olsa wrote: >>>>> On Mon, Oct 08, 2018 at 09:17:11AM +0300, Alexey Budankov wrote: >>>> <SNIP> >>>>>> +#ifdef HAVE_AIO_SUPPORT >>>>>> + off = lseek(trace_fd, 0, SEEK_CUR); >>>>>> +#endif >>>>> >>>>> I'm still little puzzled why we need to do this, >>>>> when the aio write takes the offset value, but >>>> >>>> pwrite() syscall [1] which is the base for aio_write() doesn't >>>> advance file pos value so it requires to be calculated and >>>> updated by callers of aio_write() API. >>> >>> ok, so aio_write does not need the offset to be updated, >>> who needs it then? >> >> aio_write() needs this offset as an input parameter. >> aio_write() gets offset as a part of cblock object. > > yes, it's an 'arg' to aio_write syscall > >> Adjacent aio_write() records should not overlap in the trace file so >> off value is incremented by size in every loop iteration after >> successful aio_write() call. > > but does the aio_write need the lseek 'set' call? if not, we could
Yes, lseek(,, SEEK_SET) is still required after the loop, so the next synchronous records would go after AIO written parts that might be still *in-flight* by that time.
Thanks, Alexey
> keep the 'offset' value within perf (like in the struct perf_data_file > or struct record) without any need to call lseek > > jirka >
| |