2023-11-20 19:04:41

by Ian Rogers

[permalink] [raw]
Subject: [PATCH v1] perf test: Add basic perf diff test

There are some old bug reports on perf diff crashing:
https://rhaas.blogspot.com/2012/06/perf-good-bad-ugly.html

Happening across them I was prompted to add two very basic tests that
will give some perf diff coverage.

Signed-off-by: Ian Rogers <[email protected]>
---
tools/perf/tests/shell/diff.sh | 101 +++++++++++++++++++++++++++++++++
1 file changed, 101 insertions(+)
create mode 100755 tools/perf/tests/shell/diff.sh

diff --git a/tools/perf/tests/shell/diff.sh b/tools/perf/tests/shell/diff.sh
new file mode 100755
index 000000000000..213185763688
--- /dev/null
+++ b/tools/perf/tests/shell/diff.sh
@@ -0,0 +1,101 @@
+#!/bin/sh
+# perf diff tests
+# SPDX-License-Identifier: GPL-2.0
+
+set -e
+
+err=0
+perfdata1=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
+perfdata2=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
+perfdata3=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
+testprog="perf test -w thloop"
+testsym="test_loop"
+
+cleanup() {
+ rm -rf "${perfdata1}"
+ rm -rf "${perfdata1}".old
+ rm -rf "${perfdata2}"
+ rm -rf "${perfdata2}".old
+ rm -rf "${perfdata3}"
+ rm -rf "${perfdata3}".old
+
+ trap - EXIT TERM INT
+}
+
+trap_cleanup() {
+ cleanup
+ exit 1
+}
+trap trap_cleanup EXIT TERM INT
+
+make_data() {
+ file="$1"
+ if ! perf record -o "${file}" ${testprog} 2> /dev/null
+ then
+ echo "Workload record [Failed record]"
+ echo 1
+ return
+ fi
+ if ! perf report -i "${file}" -q | grep -q "${testsym}"
+ then
+ echo "Workload record [Failed missing output]"
+ echo 1
+ return
+ fi
+ echo 0
+}
+
+test_two_files() {
+ echo "Basic two file diff test"
+ err=$(make_data "${perfdata1}")
+ if [ $err != 0 ]
+ then
+ return
+ fi
+ err=$(make_data "${perfdata2}")
+ if [ $err != 0 ]
+ then
+ return
+ fi
+
+ if ! perf diff "${perfdata1}" "${perfdata2}" | grep -q "${testsym}"
+ then
+ echo "Basic two file diff test [Failed diff]"
+ err=1
+ return
+ fi
+ echo "Basic two file diff test [Success]"
+}
+
+test_three_files() {
+ echo "Basic three file diff test"
+ err=$(make_data "${perfdata1}")
+ if [ $err != 0 ]
+ then
+ return
+ fi
+ err=$(make_data "${perfdata2}")
+ if [ $err != 0 ]
+ then
+ return
+ fi
+ err=$(make_data "${perfdata3}")
+ if [ $err != 0 ]
+ then
+ return
+ fi
+
+ if ! perf diff "${perfdata1}" "${perfdata2}" "${perfdata3}" | grep -q "${testsym}"
+ then
+ echo "Basic three file diff test [Failed diff]"
+ err=1
+ return
+ fi
+ echo "Basic three file diff test [Success]"
+}
+
+test_two_files
+test_three_files
+
+cleanup
+exit $err
--
2.43.0.rc1.413.gea7ed67945-goog


2023-12-04 16:01:15

by Ian Rogers

[permalink] [raw]
Subject: Re: [PATCH v1] perf test: Add basic perf diff test

On Mon, Nov 20, 2023 at 11:04 AM Ian Rogers <[email protected]> wrote:
>
> There are some old bug reports on perf diff crashing:
> https://rhaas.blogspot.com/2012/06/perf-good-bad-ugly.html
>
> Happening across them I was prompted to add two very basic tests that
> will give some perf diff coverage.
>
> Signed-off-by: Ian Rogers <[email protected]>

Ping.

Thanks,
Ian

> ---
> tools/perf/tests/shell/diff.sh | 101 +++++++++++++++++++++++++++++++++
> 1 file changed, 101 insertions(+)
> create mode 100755 tools/perf/tests/shell/diff.sh
>
> diff --git a/tools/perf/tests/shell/diff.sh b/tools/perf/tests/shell/diff.sh
> new file mode 100755
> index 000000000000..213185763688
> --- /dev/null
> +++ b/tools/perf/tests/shell/diff.sh
> @@ -0,0 +1,101 @@
> +#!/bin/sh
> +# perf diff tests
> +# SPDX-License-Identifier: GPL-2.0
> +
> +set -e
> +
> +err=0
> +perfdata1=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
> +perfdata2=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
> +perfdata3=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
> +testprog="perf test -w thloop"
> +testsym="test_loop"
> +
> +cleanup() {
> + rm -rf "${perfdata1}"
> + rm -rf "${perfdata1}".old
> + rm -rf "${perfdata2}"
> + rm -rf "${perfdata2}".old
> + rm -rf "${perfdata3}"
> + rm -rf "${perfdata3}".old
> +
> + trap - EXIT TERM INT
> +}
> +
> +trap_cleanup() {
> + cleanup
> + exit 1
> +}
> +trap trap_cleanup EXIT TERM INT
> +
> +make_data() {
> + file="$1"
> + if ! perf record -o "${file}" ${testprog} 2> /dev/null
> + then
> + echo "Workload record [Failed record]"
> + echo 1
> + return
> + fi
> + if ! perf report -i "${file}" -q | grep -q "${testsym}"
> + then
> + echo "Workload record [Failed missing output]"
> + echo 1
> + return
> + fi
> + echo 0
> +}
> +
> +test_two_files() {
> + echo "Basic two file diff test"
> + err=$(make_data "${perfdata1}")
> + if [ $err != 0 ]
> + then
> + return
> + fi
> + err=$(make_data "${perfdata2}")
> + if [ $err != 0 ]
> + then
> + return
> + fi
> +
> + if ! perf diff "${perfdata1}" "${perfdata2}" | grep -q "${testsym}"
> + then
> + echo "Basic two file diff test [Failed diff]"
> + err=1
> + return
> + fi
> + echo "Basic two file diff test [Success]"
> +}
> +
> +test_three_files() {
> + echo "Basic three file diff test"
> + err=$(make_data "${perfdata1}")
> + if [ $err != 0 ]
> + then
> + return
> + fi
> + err=$(make_data "${perfdata2}")
> + if [ $err != 0 ]
> + then
> + return
> + fi
> + err=$(make_data "${perfdata3}")
> + if [ $err != 0 ]
> + then
> + return
> + fi
> +
> + if ! perf diff "${perfdata1}" "${perfdata2}" "${perfdata3}" | grep -q "${testsym}"
> + then
> + echo "Basic three file diff test [Failed diff]"
> + err=1
> + return
> + fi
> + echo "Basic three file diff test [Success]"
> +}
> +
> +test_two_files
> +test_three_files
> +
> +cleanup
> +exit $err
> --
> 2.43.0.rc1.413.gea7ed67945-goog
>

2023-12-04 20:24:29

by Arnaldo Carvalho de Melo

[permalink] [raw]
Subject: Re: [PATCH v1] perf test: Add basic perf diff test

Em Mon, Dec 04, 2023 at 08:00:35AM -0800, Ian Rogers escreveu:
> On Mon, Nov 20, 2023 at 11:04 AM Ian Rogers <[email protected]> wrote:
> >
> > There are some old bug reports on perf diff crashing:
> > https://rhaas.blogspot.com/2012/06/perf-good-bad-ugly.html
> >
> > Happening across them I was prompted to add two very basic tests that
> > will give some perf diff coverage.
> >
> > Signed-off-by: Ian Rogers <[email protected]>
>
> Ping.

Thanks, applied to perf-tools-next.

- Arnaldo

2023-12-05 05:44:55

by Adrian Hunter

[permalink] [raw]
Subject: Re: [PATCH v1] perf test: Add basic perf diff test

On 4/12/23 18:00, Ian Rogers wrote:
> On Mon, Nov 20, 2023 at 11:04 AM Ian Rogers <[email protected]> wrote:
>>
>> There are some old bug reports on perf diff crashing:
>> https://rhaas.blogspot.com/2012/06/perf-good-bad-ugly.html
>>
>> Happening across them I was prompted to add two very basic tests that
>> will give some perf diff coverage.
>>
>> Signed-off-by: Ian Rogers <[email protected]>
>
> Ping.
>
> Thanks,
> Ian
>
>> ---
>> tools/perf/tests/shell/diff.sh | 101 +++++++++++++++++++++++++++++++++
>> 1 file changed, 101 insertions(+)
>> create mode 100755 tools/perf/tests/shell/diff.sh
>>
>> diff --git a/tools/perf/tests/shell/diff.sh b/tools/perf/tests/shell/diff.sh
>> new file mode 100755
>> index 000000000000..213185763688
>> --- /dev/null
>> +++ b/tools/perf/tests/shell/diff.sh
>> @@ -0,0 +1,101 @@
>> +#!/bin/sh
>> +# perf diff tests
>> +# SPDX-License-Identifier: GPL-2.0
>> +
>> +set -e
>> +
>> +err=0
>> +perfdata1=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
>> +perfdata2=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
>> +perfdata3=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
>> +testprog="perf test -w thloop"
>> +testsym="test_loop"

Could it benefit from skip_test_missing_symbol

>> +
>> +cleanup() {
>> + rm -rf "${perfdata1}"
>> + rm -rf "${perfdata1}".old
>> + rm -rf "${perfdata2}"
>> + rm -rf "${perfdata2}".old
>> + rm -rf "${perfdata3}"
>> + rm -rf "${perfdata3}".old
>> +
>> + trap - EXIT TERM INT
>> +}
>> +
>> +trap_cleanup() {
>> + cleanup
>> + exit 1
>> +}
>> +trap trap_cleanup EXIT TERM INT
>> +
>> +make_data() {
>> + file="$1"
>> + if ! perf record -o "${file}" ${testprog} 2> /dev/null
>> + then
>> + echo "Workload record [Failed record]"
>> + echo 1
>> + return
>> + fi
>> + if ! perf report -i "${file}" -q | grep -q "${testsym}"
>> + then
>> + echo "Workload record [Failed missing output]"
>> + echo 1
>> + return
>> + fi
>> + echo 0
>> +}
>> +
>> +test_two_files() {
>> + echo "Basic two file diff test"
>> + err=$(make_data "${perfdata1}")
>> + if [ $err != 0 ]
>> + then
>> + return
>> + fi
>> + err=$(make_data "${perfdata2}")
>> + if [ $err != 0 ]
>> + then
>> + return
>> + fi
>> +
>> + if ! perf diff "${perfdata1}" "${perfdata2}" | grep -q "${testsym}"
>> + then
>> + echo "Basic two file diff test [Failed diff]"
>> + err=1
>> + return
>> + fi
>> + echo "Basic two file diff test [Success]"
>> +}
>> +
>> +test_three_files() {
>> + echo "Basic three file diff test"
>> + err=$(make_data "${perfdata1}")
>> + if [ $err != 0 ]
>> + then
>> + return
>> + fi
>> + err=$(make_data "${perfdata2}")
>> + if [ $err != 0 ]
>> + then
>> + return
>> + fi
>> + err=$(make_data "${perfdata3}")
>> + if [ $err != 0 ]
>> + then
>> + return
>> + fi
>> +
>> + if ! perf diff "${perfdata1}" "${perfdata2}" "${perfdata3}" | grep -q "${testsym}"
>> + then
>> + echo "Basic three file diff test [Failed diff]"
>> + err=1
>> + return
>> + fi
>> + echo "Basic three file diff test [Success]"
>> +}
>> +
>> +test_two_files
>> +test_three_files
>> +
>> +cleanup
>> +exit $err
>> --
>> 2.43.0.rc1.413.gea7ed67945-goog
>>

2023-12-05 16:54:16

by Ian Rogers

[permalink] [raw]
Subject: Re: [PATCH v1] perf test: Add basic perf diff test

On Mon, Dec 4, 2023 at 9:44 PM Adrian Hunter <[email protected]> wrote:
>
> On 4/12/23 18:00, Ian Rogers wrote:
> > On Mon, Nov 20, 2023 at 11:04 AM Ian Rogers <[email protected]> wrote:
> >>
> >> There are some old bug reports on perf diff crashing:
> >> https://rhaas.blogspot.com/2012/06/perf-good-bad-ugly.html
> >>
> >> Happening across them I was prompted to add two very basic tests that
> >> will give some perf diff coverage.
> >>
> >> Signed-off-by: Ian Rogers <[email protected]>
> >
> > Ping.
> >
> > Thanks,
> > Ian
> >
> >> ---
> >> tools/perf/tests/shell/diff.sh | 101 +++++++++++++++++++++++++++++++++
> >> 1 file changed, 101 insertions(+)
> >> create mode 100755 tools/perf/tests/shell/diff.sh
> >>
> >> diff --git a/tools/perf/tests/shell/diff.sh b/tools/perf/tests/shell/diff.sh
> >> new file mode 100755
> >> index 000000000000..213185763688
> >> --- /dev/null
> >> +++ b/tools/perf/tests/shell/diff.sh
> >> @@ -0,0 +1,101 @@
> >> +#!/bin/sh
> >> +# perf diff tests
> >> +# SPDX-License-Identifier: GPL-2.0
> >> +
> >> +set -e
> >> +
> >> +err=0
> >> +perfdata1=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
> >> +perfdata2=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
> >> +perfdata3=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
> >> +testprog="perf test -w thloop"
> >> +testsym="test_loop"
>
> Could it benefit from skip_test_missing_symbol

Good idea, sent:
https://lore.kernel.org/lkml/[email protected]/

Thanks,
Ian

2023-12-06 13:26:33

by Arnaldo Carvalho de Melo

[permalink] [raw]
Subject: Re: [PATCH v1] perf test: Add basic perf diff test

Em Tue, Dec 05, 2023 at 08:52:04AM -0800, Ian Rogers escreveu:
> On Mon, Dec 4, 2023 at 9:44 PM Adrian Hunter <[email protected]> wrote:
> >
> > On 4/12/23 18:00, Ian Rogers wrote:
> > > On Mon, Nov 20, 2023 at 11:04 AM Ian Rogers <[email protected]> wrote:
> > >>
> > >> There are some old bug reports on perf diff crashing:
> > >> https://rhaas.blogspot.com/2012/06/perf-good-bad-ugly.html
> > >>
> > >> Happening across them I was prompted to add two very basic tests that
> > >> will give some perf diff coverage.
> > >>
> > >> Signed-off-by: Ian Rogers <[email protected]>
> > >
> > > Ping.
> > >
> > > Thanks,
> > > Ian
> > >
> > >> ---
> > >> tools/perf/tests/shell/diff.sh | 101 +++++++++++++++++++++++++++++++++
> > >> 1 file changed, 101 insertions(+)
> > >> create mode 100755 tools/perf/tests/shell/diff.sh
> > >>
> > >> diff --git a/tools/perf/tests/shell/diff.sh b/tools/perf/tests/shell/diff.sh
> > >> new file mode 100755
> > >> index 000000000000..213185763688
> > >> --- /dev/null
> > >> +++ b/tools/perf/tests/shell/diff.sh
> > >> @@ -0,0 +1,101 @@
> > >> +#!/bin/sh
> > >> +# perf diff tests
> > >> +# SPDX-License-Identifier: GPL-2.0
> > >> +
> > >> +set -e
> > >> +
> > >> +err=0
> > >> +perfdata1=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
> > >> +perfdata2=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
> > >> +perfdata3=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
> > >> +testprog="perf test -w thloop"
> > >> +testsym="test_loop"
> >
> > Could it benefit from skip_test_missing_symbol
>
> Good idea, sent:
> https://lore.kernel.org/lkml/[email protected]/

Applied, and added this:

Suggested-by: Adrian Hunter <[email protected]>

Thanks,

- Arnaldo