Re: [PATCH -next v3 1/2] perf stat: Support inherit events during fork() for bperf
From: Song Liu
Date: Thu Oct 10 2024 - 23:21:28 EST
On Thu, Oct 10, 2024 at 8:07 PM Tengda Wu <wutengda@xxxxxxxxxxxxxxx> wrote:
[...]
> >>>>
> >>>> +struct bperf_filter_value {
> >>>> + __u32 accum_key;
> >>>> + __u8 exited;
> >>>> +};
> >>> nit:
> >>> Can we use a special value of accum_key to replace exited==1
> >>> case?
> >>
> >> I'm not sure. I guess it still needs to use the accum_key to save the
> >> final value when exited = 1.
> >
> > In theory, it is possible. The accum_key is currently only used to index value
> > in accum_readings map, so if the task is not being counted, the accum_key can
> > be set to an special value.
> >
> > Due to accum_key is of u32 type, there are two special values to choose from: 0
> > or max_entries+1. I think the latter, max_entries+1, may be more suitable because
> > it can avoid memory waste in the accum_readings map and does not require too
> > many changes to bpf_counter.
> >
>
> Sorry, I was wrong. As Namhyung said, 'accum_readings[accum_key]' saves the
> last count of the task when it exits. If accum_key is set to a special value
> at this time, the count will be lost.
>
> So exited==1 is necessary, we can not use a special value of accum_key to
> replace it.
Got it. Thanks for the explanation.
Song