[v1] perf test: Add basic perf diff test

Message ID 20231120190408.281826-1-irogers@google.com
State New
Headers
Series [v1] perf test: Add basic perf diff test |

Commit Message

Ian Rogers Nov. 20, 2023, 7:04 p.m. UTC
  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 <irogers@google.com>
---
 tools/perf/tests/shell/diff.sh | 101 +++++++++++++++++++++++++++++++++
 1 file changed, 101 insertions(+)
 create mode 100755 tools/perf/tests/shell/diff.sh
  

Comments

Ian Rogers Dec. 4, 2023, 4 p.m. UTC | #1
On Mon, Nov 20, 2023 at 11:04 AM Ian Rogers <irogers@google.com> 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 <irogers@google.com>

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
>
  
Arnaldo Carvalho de Melo Dec. 4, 2023, 8:24 p.m. UTC | #2
Em Mon, Dec 04, 2023 at 08:00:35AM -0800, Ian Rogers escreveu:
> On Mon, Nov 20, 2023 at 11:04 AM Ian Rogers <irogers@google.com> 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 <irogers@google.com>
> 
> Ping.

Thanks, applied to perf-tools-next.

- Arnaldo
  
Adrian Hunter Dec. 5, 2023, 5:44 a.m. UTC | #3
On 4/12/23 18:00, Ian Rogers wrote:
> On Mon, Nov 20, 2023 at 11:04 AM Ian Rogers <irogers@google.com> 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 <irogers@google.com>
> 
> 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
>>
  
Ian Rogers Dec. 5, 2023, 4:52 p.m. UTC | #4
On Mon, Dec 4, 2023 at 9:44 PM Adrian Hunter <adrian.hunter@intel.com> wrote:
>
> On 4/12/23 18:00, Ian Rogers wrote:
> > On Mon, Nov 20, 2023 at 11:04 AM Ian Rogers <irogers@google.com> 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 <irogers@google.com>
> >
> > 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/20231205164924.835682-1-irogers@google.com/

Thanks,
Ian
  
Arnaldo Carvalho de Melo Dec. 6, 2023, 1:26 p.m. UTC | #5
Em Tue, Dec 05, 2023 at 08:52:04AM -0800, Ian Rogers escreveu:
> On Mon, Dec 4, 2023 at 9:44 PM Adrian Hunter <adrian.hunter@intel.com> wrote:
> >
> > On 4/12/23 18:00, Ian Rogers wrote:
> > > On Mon, Nov 20, 2023 at 11:04 AM Ian Rogers <irogers@google.com> 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 <irogers@google.com>
> > >
> > > 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/20231205164924.835682-1-irogers@google.com/

Applied, and added this:

Suggested-by: Adrian Hunter <adrian.hunter@intel.com>

Thanks,

- Arnaldo
  

Patch

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