Re: [PATCH v7 0/2]: perf: reduce data loss when profiling highly parallel CPU bound workloads
From: Alexey Budankov
Date: Wed Sep 05 2018 - 13:39:16 EST
Hi,
On 05.09.2018 14:28, Jiri Olsa wrote:
> On Wed, Sep 05, 2018 at 10:16:42AM +0300, Alexey Budankov wrote:
>>
>> Currently in record mode the tool implements trace writing serially.
>> The algorithm loops over mapped per-cpu data buffers and stores
>> ready data chunks into a trace file using write() system call.
>>
>> At some circumstances the kernel may lack free space in a buffer
>> because the other buffer's half is not yet written to disk due to
>> some other buffer's data writing by the tool at the moment.
>>
>> Thus serial trace writing implementation may cause the kernel
>> to loose profiling data and that is what observed when profiling
>> highly parallel CPU bound workloads on machines with big number
>> of cores.
>>
>> Experiment with profiling matrix multiplication code executing 128
>> threads on Intel Xeon Phi (KNM) with 272 cores, like below,
>> demonstrates data loss metrics value of 98%:
>>
>> /usr/bin/time perf record -o /tmp/perf-ser.data -a -N -B -T -R -g \
>> --call-graph dwarf,1024 --user-regs=IP,SP,BP \
>> --switch-events -e cycles,instructions,ref-cycles,software/period=1,name=cs,config=0x3/Duk -- \
>> matrix.gcc
>>
>> Data loss metrics is the ratio lost_time/elapsed_time where
>> lost_time is the sum of time intervals containing PERF_RECORD_LOST
>> records and elapsed_time is the elapsed application run time
>> under profiling.
>>
>> Applying asynchronous trace streaming thru Posix AIO API
>> (http://man7.org/linux/man-pages/man7/aio.7.html)
>> lowers data loss metrics value providing 2x improvement -
>> lowering 98% loss to almost 0%.
>>
>> ---
>> Alexey Budankov (2):
>> perf util: map data buffer for preserving collected data
>> perf record: enable asynchronous trace writing
>>
>> tools/perf/builtin-record.c | 197 +++++++++++++++++++++++++++++++++++++++++++-
>> tools/perf/perf.h | 1 +
>> tools/perf/util/evlist.c | 7 +-
>> tools/perf/util/evlist.h | 3 +-
>> tools/perf/util/mmap.c | 110 +++++++++++++++++++++----
>> tools/perf/util/mmap.h | 10 ++-
>> 6 files changed, 302 insertions(+), 26 deletions(-)
>>
>> ---
>> Changes in v7:
>> - implemented handling record.aio setting from perfconfig file
>
> can't apply this version on Arnaldo's perf/core...
my git remote -v
origin git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip (fetch)
origin git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip (push)
branch is perf/core, according to MAINTAINERS content.
What is Arnaldo's perf/core? This one?
git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux
and branch is perf/core?
>
> [jolsa@krava linux-perf]$ git am /tmp/ab/
> Applying: perf util: map data buffer for preserving collected data
> error: patch failed: tools/perf/util/mmap.c:166
> error: tools/perf/util/mmap.c: patch does not apply
>
> thanks,
> jirka
>