Re: [PATCH 1/2] perf script: Fix PERF_SAMPLE_WEIGHT_STRUCT support

From: Joe Mario
Date: Wed Sep 29 2021 - 16:22:33 EST




On 9/29/21 2:42 PM, Jiri Olsa wrote:
> On Wed, Sep 29, 2021 at 01:54:39PM -0300, Arnaldo Carvalho de Melo wrote:
>> Em Wed, Sep 29, 2021 at 08:38:13AM -0700, kan.liang@xxxxxxxxxxxxxxx escreveu:
>>> From: Kan Liang <kan.liang@xxxxxxxxxxxxxxx>
>>>
>>> -F weight in perf script is broken.
>>>
>>> # ./perf mem record
>>> # ./perf script -F weight
>>> Samples for 'dummy:HG' event do not have WEIGHT attribute set. Cannot
>>> print 'weight' field.
>>>
>>> The sample type, PERF_SAMPLE_WEIGHT_STRUCT, is an alternative of the
>>> PERF_SAMPLE_WEIGHT sample type. They share the same space, weight. The
>>> lower 32 bits are exactly the same for both sample type. The higher 32
>>> bits may be different for different architecture. For a new kernel on
>>> x86, the PERF_SAMPLE_WEIGHT_STRUCT is used. For an old kernel or other
>>> ARCHs, the PERF_SAMPLE_WEIGHT is used.
>>>
>>> With -F weight, current perf script will only check the input string
>>> "weight" with the PERF_SAMPLE_WEIGHT sample type. Because the commit
>>> ea8d0ed6eae3 ("perf tools: Support PERF_SAMPLE_WEIGHT_STRUCT") didn't
>>> update the PERF_SAMPLE_WEIGHT_STRUCT sample type for perf script. For a
>>> new kernel on x86, the check fails.
>>>
>>> Use PERF_SAMPLE_WEIGHT_TYPE, which supports both sample types, to
>>> replace PERF_SAMPLE_WEIGHT.
>>>
>>> Reported-by: Joe Mario <jmario@xxxxxxxxxx>
>>> Fixes: ea8d0ed6eae3 ("perf tools: Support PERF_SAMPLE_WEIGHT_STRUCT")
>>
>> Hey Joe, Jiri,
>>
>> Can I have your Tested-by?
>
> Acked/Tested-by: Jiri Olsa <jolsa@xxxxxxxxxx>
>
> thanks,
> jirka

Acked/Tested-by: Joe Mario <jmario@xxxxxxxxxx>

The "perf script -F weight" command works correctly.

And I also verified that when just issuing "perf script", that the weight (cycle latency)
column that was missing with this bug, is now fixed and working properly.

Thanks,
Joe
>
>>
>> Thanks,
>>
>> - Arnaldo
>>
>>> Signed-off-by: Kan Liang <kan.liang@xxxxxxxxxxxxxxx>
>>> ---
>>> tools/perf/builtin-script.c | 2 +-
>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
>>> index 6211d0b..9f62ac6 100644
>>> --- a/tools/perf/builtin-script.c
>>> +++ b/tools/perf/builtin-script.c
>>> @@ -459,7 +459,7 @@ static int evsel__check_attr(struct evsel *evsel, struct perf_session *session)
>>> return -EINVAL;
>>>
>>> if (PRINT_FIELD(WEIGHT) &&
>>> - evsel__check_stype(evsel, PERF_SAMPLE_WEIGHT, "WEIGHT", PERF_OUTPUT_WEIGHT))
>>> + evsel__check_stype(evsel, PERF_SAMPLE_WEIGHT_TYPE, "WEIGHT", PERF_OUTPUT_WEIGHT))
>>> return -EINVAL;
>>>
>>> if (PRINT_FIELD(SYM) &&
>>> --
>>> 2.7.4
>>
>> --
>>
>> - Arnaldo
>>
>