[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Thu, 5 May 2022 16:27:11 -0400
From: "Liang, Kan" <kan.liang@...ux.intel.com>
To: Ian Rogers <irogers@...gle.com>
Cc: Caleb Biggers <caleb.biggers@...el.com>,
Perry Taylor <perry.taylor@...el.com>,
Kshipra Bopardikar <kshipra.bopardikar@...el.com>,
Peter Zijlstra <peterz@...radead.org>,
Ingo Molnar <mingo@...hat.com>,
Arnaldo Carvalho de Melo <acme@...nel.org>,
Mark Rutland <mark.rutland@....com>,
Alexander Shishkin <alexander.shishkin@...ux.intel.com>,
Jiri Olsa <jolsa@...nel.org>,
Namhyung Kim <namhyung@...nel.org>,
Ravi Bangoria <ravi.bangoria@....com>,
Andi Kleen <ak@...ux.intel.com>,
Haowen Bai <baihaowen@...zu.com>,
Riccardo Mancini <rickyman7@...il.com>,
Kim Phillips <kim.phillips@....com>,
Madhavan Srinivasan <maddy@...ux.ibm.com>,
Shunsuke Nakamura <nakamura.shun@...itsu.com>,
Florian Fischer <florian.fischer@...q.space>,
linux-kernel@...r.kernel.org, linux-perf-users@...r.kernel.org,
Zhengjun Xing <zhengjun.xing@...ux.intel.com>,
Stephane Eranian <eranian@...gle.com>
Subject: Re: [PATCH 2/2] perf test: Add basic stat and topdown group test
On 5/5/2022 2:35 PM, Ian Rogers wrote:
> On Thu, May 5, 2022 at 11:19 AM Liang, Kan <kan.liang@...ux.intel.com> wrote:
>>
>> On 5/5/2022 11:22 AM, Ian Rogers wrote:
>>> On Thu, May 5, 2022 at 5:12 AM Liang, Kan <kan.liang@...ux.intel.com> wrote:
>>>>
>>>> On 5/5/2022 12:38 AM, Ian Rogers wrote:
>>>>> Add a basic stat test.
>>>>> Add two tests of grouping behavior for topdown events. Topdown events
>>>>> are special as they must be grouped with the slots event first.
>>>>>
>>>>> Signed-off-by: Ian Rogers <irogers@...gle.com>
>>>>> ---
>>>>> tools/perf/tests/shell/stat.sh | 65 ++++++++++++++++++++++++++++++++++
>>>>> 1 file changed, 65 insertions(+)
>>>>> create mode 100755 tools/perf/tests/shell/stat.sh
>>>>>
>>>>> diff --git a/tools/perf/tests/shell/stat.sh b/tools/perf/tests/shell/stat.sh
>>>>> new file mode 100755
>>>>> index 000000000000..80869ea6debc
>>>>> --- /dev/null
>>>>> +++ b/tools/perf/tests/shell/stat.sh
>>>>> @@ -0,0 +1,65 @@
>>>>> +#!/bin/sh
>>>>> +# perf stat tests
>>>>> +# SPDX-License-Identifier: GPL-2.0
>>>>> +
>>>>> +set -e
>>>>> +
>>>>> +err=0
>>>>> +test_default_stat() {
>>>>> + echo "Basic stat command test"
>>>>> + if ! perf stat true 2>&1 | egrep -q "Performance counter stats for 'true':"
>>>>> + then
>>>>> + echo "Basic stat command test [Failed]"
>>>>> + err=1
>>>>> + return
>>>>> + fi
>>>>> + echo "Basic stat command test [Success]"
>>>>> +}
>>>>> +
>>>>> +test_topdown_groups() {
>>>>> + # Topdown events must be grouped with the slots event first. Test that
>>>>> + # parse-events reorders this.
>>>>> + echo "Topdown event group test"
>>>>> + if ! perf stat -e '{slots,topdown-retiring}' true > /dev/null 2>&1
>>>>> + then
>>>>> + echo "Topdown event group test [Skipped event parsing failed]"
>>>>> + return
>>>>> + fi
>>>>> + if perf stat -e '{slots,topdown-retiring}' true 2>&1 | egrep -q "<not supported>"
>>>>> + then
>>>>> + echo "Topdown event group test [Failed events not supported]"
>>>>> + err=1
>>>>> + return
>>>>> + fi
>>>>> + if perf stat -e '{topdown-retiring,slots}' true 2>&1 | egrep -q "<not supported>"
>>>>> + then
>>>>> + echo "Topdown event group test [Failed slots not reordered first]"
>>>>> + err=1
>>>>> + return
>>>>> + fi
>>>>> + echo "Topdown event group test [Success]"
>>>>> +}
>>>>> +
>>>>> +test_topdown_weak_groups() {
>>>>> + # Weak groups break if the perf_event_open of multiple grouped events
>>>>> + # fails. Breaking a topdown group causes the events to fail. Test a very large
>>>>> + # grouping to see that the topdown events aren't broken out.
>>>>> + echo "Topdown weak groups test"
>>>>> + if ! perf stat -e '{slots,topdown-bad-spec,topdown-be-bound,topdown-fe-bound,topdown-retiring},branch-instructions,branch-misses,bus-cycles,cache-misses,cache-references,cpu-cycles,instructions,mem-loads,mem-stores,ref-cycles,baclears.any,ARITH.DIVIDER_ACTIVE' true > /dev/null 2>&1
>>>>> + then
>>>>> + echo "Topdown weak groups test [Skipped event parsing failed]"
>>>>> + return
>>>>> + fi
>>>>> + if perf stat -e '{slots,topdown-bad-spec,topdown-be-bound,topdown-fe-bound,topdown-retiring,branch-instructions,branch-misses,bus-cycles,cache-misses,cache-references,cpu-cycles,instructions,mem-loads,mem-stores,ref-cycles,baclears.any,ARITH.DIVIDER_ACTIVE}:W' true 2>&1 | egrep -q "<not supported>"
>>>>> + then
>>>>> + echo "Topdown weak groups test [Failed events not supported]"
>>>>> + err=1
>>>>> + return
>>>>> + fi
>>>>> + echo "Topdown weak groups test [Success]"
>>>>> +}
>>>>> +
>>>>
>>>> Should we check the existence of the slots event before the test?
>>>> The perf metrics feature only be available on the new platform after
>>>> ICL. It doesn't work on Atom.
>>>>
>>>> Also, I think the test may fails on the hybrid platform, since big core
>>>> and small core have different formula for the topdown. I think we should
>>>> avoid the test for the hybrid platform for now.
>>>> +Zhengjun, who is fixing the topdown gap for the hybrid platform. I
>>>> think he may take care of the hybrid support later.
>>>
>>> Thanks Kan, the test filters out systems that don't support the events
>>> and silently skips the test. The main purpose of the test is to make
>>> sure the somewhat complicated grouping operations for Icelake have
>>> some coverage. Adding more coverage for hybrid would be great, but not
>>> something I think gates this change.
>>>
>>
>> Sure, we can add the coverage for hybrid later. But please make sure the
>> test can filter out both the systems which doesn't support perf metircs
>> and the hybrid system.
>>
>> Thanks,
>> Kan
>
> If the test fails on hybrid then that feels like value add :-)
Indeed. The test case is valid.
Could you please use architecture events to replace the
baclears.any,ARITH.DIVIDER_ACTIVE?
It's not guaranteed that the two events are supported for the future
platforms.
I use the duplicated cache-misses,cache-references events to replace
baclears.any,ARITH.DIVIDER_ACTIVE and tested on the ADL. The results
look good.
./perf stat -e
'{slots,topdown-bad-spec,topdown-be-bound,topdown-fe-bound,topdown-retiring,branch-instructions,branch-misses,bus-cycles,cache-misses,cache-references,cpu-cycles,instructions,mem-loads,mem-stores,ref-cycles,cache-misses,cache-references}:W'
true
WARNING: events in group from different hybrid PMUs!
Performance counter stats for 'true':
3,603,798 cpu_core/slots/
480,506 cpu_core/topdown-bad-spec/ # 13.3% bad
speculation
<not counted> cpu_atom/topdown-bad-spec/
(0.00%)
833,819 cpu_core/topdown-be-bound/ # 23.0% backend
bound
<not counted> cpu_atom/topdown-be-bound/
(0.00%)
1,483,916 cpu_core/topdown-fe-bound/ # 41.0% frontend
bound
<not counted> cpu_atom/topdown-fe-bound/
(0.00%)
819,687 cpu_core/topdown-retiring/ # 22.7% retiring
<not counted> cpu_atom/topdown-retiring/
(0.00%)
151,010 cpu_core/branch-instructions/
<not counted> cpu_atom/branch-instructions/
(0.00%)
4,402 cpu_core/branch-misses/
<not counted> cpu_atom/branch-misses/
(0.00%)
1,456,308 cpu_core/bus-cycles/
<not counted> cpu_atom/bus-cycles/
(0.00%)
1,132 cpu_core/cache-misses/
<not counted> cpu_atom/cache-misses/
(0.00%)
14,226 cpu_core/cache-references/
<not counted> cpu_atom/cache-references/
(0.00%)
600,633 cpu_core/cpu-cycles/
<not counted> cpu_atom/cpu-cycles/
(0.00%)
737,806 cpu_core/instructions/
<not counted> cpu_atom/instructions/
(0.00%)
0 cpu_core/mem-loads/
<not counted> cpu_atom/mem-loads/
(0.00%)
120,151 cpu_core/mem-stores/
<not counted> cpu_atom/mem-stores/
(0.00%)
1,456,308 cpu_core/ref-cycles/
<not counted> cpu_atom/ref-cycles/
(0.00%)
<not counted> cpu_core/cache-misses/
(0.00%)
<not counted> cpu_atom/cache-misses/
(0.00%)
<not counted> cpu_core/cache-references/
(0.00%)
<not counted> cpu_atom/cache-references/
(0.00%)
0.001518955 seconds time elapsed
0.001531000 seconds user
0.000000000 seconds sys
Thanks,
Kan
> We
> genuinely have broken grouping functions. We could just add to the
> test a skip if /sys/devices/cpu_core and /sys/devices/cpu_atom
> directories exist (making assumptions on where sysfs is mounted). I'm
> not yet able to test on Alderlake hence not wanting to have a lot of
> untested code.
>
> Thanks,
> Ian
>
>>> Thanks,
>>> Ian
>>>
>>>> Thanks,
>>>> Kan
>>>>> +test_default_stat
>>>>> +test_topdown_groups
>>>>> +test_topdown_weak_groups
>>>>> +exit $err
Powered by blists - more mailing lists