Re: [PATCH v11 09/24] perf record: Introduce bytes written stats to support --max-size option

From: Bayduraev, Alexey V
Date: Mon Sep 20 2021 - 08:54:51 EST



On 12.09.2021 23:46, Jiri Olsa wrote:
> On Tue, Aug 17, 2021 at 11:23:12AM +0300, Alexey Bayduraev wrote:

<SNIP>

>> static bool record__output_max_size_exceeded(struct record *rec)
>> {
>> return rec->output_max_size &&
>> - (rec->bytes_written >= rec->output_max_size);
>> + (record__bytes_written(rec) >= rec->output_max_size);
>> }
>>
>> static int record__write(struct record *rec, struct mmap *map __maybe_unused,
>> @@ -205,15 +223,21 @@ static int record__write(struct record *rec, struct mmap *map __maybe_unused,
>> return -1;
>> }
>>
>> - rec->bytes_written += size;
>> + if (map && map->file)
>> + map->bytes_written += size;
>
> could we instead have bytes_written in thread data? so we don't
> need to iterate all the maps?

Hi,

As I remember the main issue is that bytes_written should be atomic64_t.
Unfortunately we don't have atomic64 framework in tools/lib (even
atomic32_add is missing). Thus I decided to calculate total size on each
iteration. But I think your suggestion to move record__output_max_size_exceeded
to trigger framework is better.

>
>> + else
>> + rec->bytes_written += size;
>>
>> if (record__output_max_size_exceeded(rec) && !done) {
>> fprintf(stderr, "[ perf record: perf size limit reached (%" PRIu64 " KB),"
>> " stopping session ]\n",
>> - rec->bytes_written >> 10);
>> + record__bytes_written(rec) >> 10);
>
> you're calling record__bytes_written twice.. could we just save the
> bytes_written from the first call and use it in the printf?
>
>> done = 1;
>> }
>>
>> + if (map && map->file)
>> + return 0;
>
> please make comment why quit in here, we don't support switch-output for
> threads?

Yes, parallel streaming mode doesn't support switch-output and there is
a special warning in [PATCH v11 14/24]

Thanks,
Alexey


>
> jirka
>
>> +
>> if (switch_output_size(rec))
>> trigger_hit(&switch_output_trigger);
>>
>> diff --git a/tools/perf/util/mmap.h b/tools/perf/util/mmap.h
>> index c4aed6e89549..67d41003d82e 100644
>> --- a/tools/perf/util/mmap.h
>> +++ b/tools/perf/util/mmap.h
>> @@ -46,6 +46,7 @@ struct mmap {
>> int comp_level;
>> struct perf_data_file *file;
>> struct zstd_data zstd_data;
>> + u64 bytes_written;
>> };
>>
>> struct mmap_params {
>> --
>> 2.19.0
>>
>