Test that one cycles event is opened for each core PMU when "perf stat"
is run without arguments.
The event line can either be output as "pmu/cycles/" or just "cycles" if
there is only one PMU. Include 2 spaces for padding in the one PMU case
to avoid matching when the word cycles is included in metric
descriptions.
Signed-off-by: James Clark <james.clark@linaro.org>
---
tools/perf/tests/shell/stat.sh | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/tools/perf/tests/shell/stat.sh b/tools/perf/tests/shell/stat.sh
index 525d0c44fdc6..24ace1de71cc 100755
--- a/tools/perf/tests/shell/stat.sh
+++ b/tools/perf/tests/shell/stat.sh
@@ -148,6 +148,26 @@ test_cputype() {
echo "cputype test [Success]"
}
+test_hybrid() {
+ # Test the default stat command on hybrid devices opens one cycles event for
+ # each CPU type.
+ echo "hybrid test"
+
+ # Count the number of core PMUs
+ pmus=$(ls /sys/bus/event_source/devices/*/cpus 2>/dev/null | wc -l)
+
+ # Run default Perf stat
+ cycles_events=$(perf stat -- true 2>&1 | grep -E "/cycles/| cycles " | wc -l)
+
+ if [ "$pmus" -ne "$cycles_events" ]
+ then
+ echo "hybrid test [Found $pmus PMUs but $cycles_events cycles events. Failed]"
+ err=1
+ return
+ fi
+ echo "hybrid test [Success]"
+}
+
test_default_stat
test_stat_record_report
test_stat_record_script
@@ -155,4 +175,5 @@ test_stat_repeat_weak_groups
test_topdown_groups
test_topdown_weak_groups
test_cputype
+test_hybrid
exit $err
--
2.34.1
Hello,
On Wed, Aug 28, 2024 at 03:07:21PM +0100, James Clark wrote:
> Test that one cycles event is opened for each core PMU when "perf stat"
> is run without arguments.
>
> The event line can either be output as "pmu/cycles/" or just "cycles" if
> there is only one PMU. Include 2 spaces for padding in the one PMU case
> to avoid matching when the word cycles is included in metric
> descriptions.
>
> Signed-off-by: James Clark <james.clark@linaro.org>
> ---
> tools/perf/tests/shell/stat.sh | 21 +++++++++++++++++++++
> 1 file changed, 21 insertions(+)
>
> diff --git a/tools/perf/tests/shell/stat.sh b/tools/perf/tests/shell/stat.sh
> index 525d0c44fdc6..24ace1de71cc 100755
> --- a/tools/perf/tests/shell/stat.sh
> +++ b/tools/perf/tests/shell/stat.sh
> @@ -148,6 +148,26 @@ test_cputype() {
> echo "cputype test [Success]"
> }
>
> +test_hybrid() {
> + # Test the default stat command on hybrid devices opens one cycles event for
> + # each CPU type.
> + echo "hybrid test"
> +
> + # Count the number of core PMUs
> + pmus=$(ls /sys/bus/event_source/devices/*/cpus 2>/dev/null | wc -l)
Is it working on non-hybrid systems? I don't think they have cpus file
in the core PMU.
Thanks,
Namhyung
> +
> + # Run default Perf stat
> + cycles_events=$(perf stat -- true 2>&1 | grep -E "/cycles/| cycles " | wc -l)
> +
> + if [ "$pmus" -ne "$cycles_events" ]
> + then
> + echo "hybrid test [Found $pmus PMUs but $cycles_events cycles events. Failed]"
> + err=1
> + return
> + fi
> + echo "hybrid test [Success]"
> +}
> +
> test_default_stat
> test_stat_record_report
> test_stat_record_script
> @@ -155,4 +175,5 @@ test_stat_repeat_weak_groups
> test_topdown_groups
> test_topdown_weak_groups
> test_cputype
> +test_hybrid
> exit $err
> --
> 2.34.1
>
On 30/08/2024 7:32 am, Namhyung Kim wrote:
> Hello,
>
> On Wed, Aug 28, 2024 at 03:07:21PM +0100, James Clark wrote:
>> Test that one cycles event is opened for each core PMU when "perf stat"
>> is run without arguments.
>>
>> The event line can either be output as "pmu/cycles/" or just "cycles" if
>> there is only one PMU. Include 2 spaces for padding in the one PMU case
>> to avoid matching when the word cycles is included in metric
>> descriptions.
>>
>> Signed-off-by: James Clark <james.clark@linaro.org>
>> ---
>> tools/perf/tests/shell/stat.sh | 21 +++++++++++++++++++++
>> 1 file changed, 21 insertions(+)
>>
>> diff --git a/tools/perf/tests/shell/stat.sh b/tools/perf/tests/shell/stat.sh
>> index 525d0c44fdc6..24ace1de71cc 100755
>> --- a/tools/perf/tests/shell/stat.sh
>> +++ b/tools/perf/tests/shell/stat.sh
>> @@ -148,6 +148,26 @@ test_cputype() {
>> echo "cputype test [Success]"
>> }
>>
>> +test_hybrid() {
>> + # Test the default stat command on hybrid devices opens one cycles event for
>> + # each CPU type.
>> + echo "hybrid test"
>> +
>> + # Count the number of core PMUs
>> + pmus=$(ls /sys/bus/event_source/devices/*/cpus 2>/dev/null | wc -l)
>
> Is it working on non-hybrid systems? I don't think they have cpus file
> in the core PMU.
>
> Thanks,
> Namhyung
>
Good point I only tested on Arm non-hybrid. I can change it to assume 1
PMU for no cpus files?
On 30/08/2024 9:29 am, James Clark wrote:
>
>
> On 30/08/2024 7:32 am, Namhyung Kim wrote:
>> Hello,
>>
>> On Wed, Aug 28, 2024 at 03:07:21PM +0100, James Clark wrote:
>>> Test that one cycles event is opened for each core PMU when "perf stat"
>>> is run without arguments.
>>>
>>> The event line can either be output as "pmu/cycles/" or just "cycles" if
>>> there is only one PMU. Include 2 spaces for padding in the one PMU case
>>> to avoid matching when the word cycles is included in metric
>>> descriptions.
>>>
>>> Signed-off-by: James Clark <james.clark@linaro.org>
>>> ---
>>> tools/perf/tests/shell/stat.sh | 21 +++++++++++++++++++++
>>> 1 file changed, 21 insertions(+)
>>>
>>> diff --git a/tools/perf/tests/shell/stat.sh
>>> b/tools/perf/tests/shell/stat.sh
>>> index 525d0c44fdc6..24ace1de71cc 100755
>>> --- a/tools/perf/tests/shell/stat.sh
>>> +++ b/tools/perf/tests/shell/stat.sh
>>> @@ -148,6 +148,26 @@ test_cputype() {
>>> echo "cputype test [Success]"
>>> }
>>> +test_hybrid() {
>>> + # Test the default stat command on hybrid devices opens one cycles
>>> event for
>>> + # each CPU type.
>>> + echo "hybrid test"
>>> +
>>> + # Count the number of core PMUs
>>> + pmus=$(ls /sys/bus/event_source/devices/*/cpus 2>/dev/null | wc -l)
>>
>> Is it working on non-hybrid systems? I don't think they have cpus file
>> in the core PMU.
>>
>> Thanks,
>> Namhyung
>>
>
> Good point I only tested on Arm non-hybrid. I can change it to assume 1
> PMU for no cpus files?
Or maybe assume 1 if a /sys/bus/event_source/devices/cpu folder exists?
Not sure which is best but either will work.
On Fri, Aug 30, 2024 at 09:45:11AM +0100, James Clark wrote:
>
>
> On 30/08/2024 9:29 am, James Clark wrote:
> >
> >
> > On 30/08/2024 7:32 am, Namhyung Kim wrote:
> > > Hello,
> > >
> > > On Wed, Aug 28, 2024 at 03:07:21PM +0100, James Clark wrote:
> > > > Test that one cycles event is opened for each core PMU when "perf stat"
> > > > is run without arguments.
> > > >
> > > > The event line can either be output as "pmu/cycles/" or just "cycles" if
> > > > there is only one PMU. Include 2 spaces for padding in the one PMU case
> > > > to avoid matching when the word cycles is included in metric
> > > > descriptions.
> > > >
> > > > Signed-off-by: James Clark <james.clark@linaro.org>
> > > > ---
> > > > tools/perf/tests/shell/stat.sh | 21 +++++++++++++++++++++
> > > > 1 file changed, 21 insertions(+)
> > > >
> > > > diff --git a/tools/perf/tests/shell/stat.sh
> > > > b/tools/perf/tests/shell/stat.sh
> > > > index 525d0c44fdc6..24ace1de71cc 100755
> > > > --- a/tools/perf/tests/shell/stat.sh
> > > > +++ b/tools/perf/tests/shell/stat.sh
> > > > @@ -148,6 +148,26 @@ test_cputype() {
> > > > echo "cputype test [Success]"
> > > > }
> > > > +test_hybrid() {
> > > > + # Test the default stat command on hybrid devices opens one
> > > > cycles event for
> > > > + # each CPU type.
> > > > + echo "hybrid test"
> > > > +
> > > > + # Count the number of core PMUs
> > > > + pmus=$(ls /sys/bus/event_source/devices/*/cpus 2>/dev/null | wc -l)
> > >
> > > Is it working on non-hybrid systems? I don't think they have cpus file
> > > in the core PMU.
> > >
> > > Thanks,
> > > Namhyung
> > >
> >
> > Good point I only tested on Arm non-hybrid. I can change it to assume 1
> > PMU for no cpus files?
>
> Or maybe assume 1 if a /sys/bus/event_source/devices/cpu folder exists? Not
> sure which is best but either will work.
Some arch might not have a cpu PMU, I think we can assume 1 and update
only if it finds cpus files.
Thanks,
Namhyung
© 2016 - 2025 Red Hat, Inc.