From: Alexey Budankov <alexey.budankov@linux.intel.com>
To: Jiri Olsa <jolsa@redhat.com>
Cc: Ingo Molnar <mingo@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Namhyung Kim <namhyung@kernel.org>,
Andi Kleen <ak@linux.intel.com>,
linux-kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v3 2/2]: perf record: enable asynchronous trace writing
Date: Tue, 28 Aug 2018 13:28:30 +0300 [thread overview]
Message-ID: <1c950a87-2224-080e-329e-cf9536ccef02@linux.intel.com> (raw)
In-Reply-To: <20180828085343.GF23727@krava>
Hi,
On 28.08.2018 11:53, Jiri Olsa wrote:
> On Mon, Aug 27, 2018 at 09:16:55PM +0300, Alexey Budankov wrote:
>
> SNIP
>
>> if ((md->start & md->mask) + size != (md->end & md->mask)) {
>> buf = &data[md->start & md->mask];
>> - size = md->mask + 1 - (md->start & md->mask);
>> - md->start += size;
>> -
>> - if (push(to, buf, size) < 0) {
>> - rc = -1;
>> - goto out;
>> - }
>> + size0 = md->mask + 1 - (md->start & md->mask);
>> + md->start += size0;
>> + memcpy(md->data, buf, size0);
>> }
>>
>> buf = &data[md->start & md->mask];
>> size = md->end - md->start;
>> md->start += size;
>> + memcpy(md->data + size0, buf, size);
>>
>> - if (push(to, buf, size) < 0) {
>> - rc = -1;
>> + rc = push(to, md, size0 + size, *off) < 0 ? -1 : 1;
>> + if (rc == -1)
>> goto out;
>> - }
>> +
>> + perf_mmap__get(md);
>> + *off += size0 + size;
>
> this get is for the perf_mmap pointer storage in the mmap_aio array right?
Right. perf_mmap__get() here guards whole perf_mmap object and memory
referenced thru it from premature deallocation because mmap->base kernel
buffer can be released earlier than aio requests started on mmap->data
complete and the both buffers are referenced thru the same perf_mmap object.
>
> I see it's released in record__mmap_read_sync, which might also return
> without releasing it.. this needs to be fixed and explained in here,
> why we take the reference in the first place
So we increment after successful push() from map->base to map->data
with following aio_write() and decrement when aio_write() is fully
complete, because it may require restart if the kernel didn't write
whole chunk at once.
Probably we are still missing one more perf_mmap__put() after:
pr_err("failed to write perf data, error: %m\n");
prior nullifying the appropriate cblock.
Updated [PATCH v4 2/2]:
- Written comment in perf_mmap__push() just before perf_mmap__get();
- Written comment in record__mmap_read_sync() on possible restarting
of aio_write() operation and releasing perf_mmap object after all;
- added perf_mmap__put() for the cases of failed aio_write();
Thanks!
>
> thanks,
> jirka
>
next prev parent reply other threads:[~2018-08-28 10:28 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <bdd669cd-a6dc-d592-4655-33b7bfc46cbb@linux.intel.com>
2018-08-27 18:16 ` [PATCH v3 1/2]: perf util: map data buffer for preserving collected data Alexey Budankov
2018-08-27 18:16 ` [PATCH v3 2/2]: perf record: enable asynchronous trace writing Alexey Budankov
2018-08-28 8:50 ` Jiri Olsa
2018-08-28 9:39 ` Alexey Budankov
2018-08-28 8:53 ` Jiri Olsa
2018-08-28 10:28 ` Alexey Budankov [this message]
2018-08-28 8:57 ` Jiri Olsa
2018-08-28 11:31 ` Alexey Budankov
2018-08-28 12:21 ` Jiri Olsa
2018-08-28 9:01 ` Jiri Olsa
2018-08-28 12:37 ` Alexey Budankov
2018-08-28 8:59 ` [PATCH v3 0/2]: perf: reduce data loss when profiling highly parallel CPU bound workloads Jiri Olsa
2018-08-28 11:58 ` Alexey Budankov
2018-08-28 14:17 ` Alexey Budankov
2018-08-28 14:08 ` Alexey Budankov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1c950a87-2224-080e-329e-cf9536ccef02@linux.intel.com \
--to=alexey.budankov@linux.intel.com \
--cc=acme@kernel.org \
--cc=ak@linux.intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=jolsa@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.