Re: [PATCH v1] perf test: Add basic perf diff test

From: Ian Rogers
Date: Mon Dec 04 2023 - 11:00:56 EST


On Mon, Nov 20, 2023 at 11:04 AM Ian Rogers <irogers@xxxxxxxxxx> 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@xxxxxxxxxx>

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
>