From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Leo Yan <leo.yan@linaro.org>
Cc: Namhyung Kim <namhyung@kernel.org>,
Ravi Bangoria <ravi.bangoria@amd.com>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Mark Rutland <mark.rutland@arm.com>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Jiri Olsa <jolsa@kernel.org>,
linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org
Subject: Re: [PATCH v5] perf test: Introduce script for data symbol testing
Date: Thu, 6 Oct 2022 08:18:40 -0300 [thread overview]
Message-ID: <Yz65kF01XYLayp9E@kernel.org> (raw)
In-Reply-To: <20221006101039.47870-1-leo.yan@linaro.org>
Em Thu, Oct 06, 2022 at 06:10:39PM +0800, Leo Yan escreveu:
> This commit introduces a shell script for data symbol testing.
>
> The testing is designed a data structure with 64-byte alignment, it has
> two fields "data1" and "data2", and other fields are reserved.
>
> Using "perf mem" command, we can record and report memory samples for a
> self-contained workload with 1 second duration. If have no any memory
> sample for the data structure "buf1", it reports failure; and by
> checking the offset in structure "buf1", if any memory accessing is not
> for "data1" and "data2" fields, it means wrong data symbol parsing and
> returns failure.
Replaced the one I had merged with v5 and added this:
Committer testing:
[root@quaco ~]# grep -m1 "model name" /proc/cpuinfo
model name : Intel(R) Core(TM) i7-8650U CPU @ 1.90GHz
[root@quaco ~]#
[root@quaco ~]# perf test -v "data symbol"
104: Test data symbol :
--- start ---
test child forked, pid 192318
Compiling test program...
Recording workload...
[ perf record: Woken up 2 times to write data ]
[ perf record: Captured and wrote 0.389 MB /tmp/__perf_test.perf.data.LIuQl (5570 samples) ]
Cleaning up files...
test child finished with 0
---- end ----
Test data symbol: Ok
[root@quaco ~]#
Signed-off-by: Leo Yan <leo.yan@linaro.org>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-------------
The verbose mode could show the 'perf report' output, I think, but this
can be done later, if agreed.
Thanks, applied!
- Arnaldo
> Signed-off-by: Leo Yan <leo.yan@linaro.org>
> ---
>
> Changes from v4:
> - Remove the redundant argument "--" before CPU list (Namhyung).
> This patch is dependent on the fixing:
> https://lore.kernel.org/lkml/20221004200211.1444521-1-namhyung@kernel.org/
>
> Changes from v3:
> - Add specific testing chunk for AMD CPUs (Ravi).
>
> tools/perf/tests/shell/test_data_symbol.sh | 93 ++++++++++++++++++++++
> 1 file changed, 93 insertions(+)
> create mode 100755 tools/perf/tests/shell/test_data_symbol.sh
>
> diff --git a/tools/perf/tests/shell/test_data_symbol.sh b/tools/perf/tests/shell/test_data_symbol.sh
> new file mode 100755
> index 000000000000..cd6eb54d235d
> --- /dev/null
> +++ b/tools/perf/tests/shell/test_data_symbol.sh
> @@ -0,0 +1,93 @@
> +#!/bin/bash
> +# Test data symbol
> +
> +# SPDX-License-Identifier: GPL-2.0
> +# Leo Yan <leo.yan@linaro.org>, 2022
> +
> +skip_if_no_mem_event() {
> + perf mem record -e list 2>&1 | egrep -q 'available' && return 0
> + return 2
> +}
> +
> +skip_if_no_mem_event || exit 2
> +
> +# skip if there's no compiler
> +if ! [ -x "$(command -v cc)" ]; then
> + echo "skip: no compiler, install gcc"
> + exit 2
> +fi
> +
> +TEST_PROGRAM=$(mktemp /tmp/__perf_test.program.XXXXX)
> +PERF_DATA=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
> +
> +check_result() {
> + # The memory report format is as below:
> + # 99.92% ... [.] buf1+0x38
> + result=$(perf mem report -i ${PERF_DATA} -s symbol_daddr -q 2>&1 |
> + awk '/buf1/ { print $4 }')
> +
> + # Testing is failed if has no any sample for "buf1"
> + [ -z "$result" ] && return 1
> +
> + while IFS= read -r line; do
> + # The "data1" and "data2" fields in structure "buf1" have
> + # offset "0x0" and "0x38", returns failure if detect any
> + # other offset value.
> + if [ "$line" != "buf1+0x0" ] && [ "$line" != "buf1+0x38" ]; then
> + return 1
> + fi
> + done <<< "$result"
> +
> + return 0
> +}
> +
> +cleanup_files()
> +{
> + echo "Cleaning up files..."
> + rm -f ${PERF_DATA}
> + rm -f ${TEST_PROGRAM}
> +}
> +
> +trap cleanup_files exit term int
> +
> +# compile test program
> +echo "Compiling test program..."
> +cat << EOF | cc -o ${TEST_PROGRAM} -x c -
> +typedef struct _buf {
> + char data1;
> + char reserved[55];
> + char data2;
> +} buf __attribute__((aligned(64)));
> +
> +static buf buf1;
> +
> +int main(void) {
> + for (;;) {
> + buf1.data1++;
> + buf1.data2 += buf1.data1;
> + }
> + return 0;
> +}
> +EOF
> +
> +echo "Recording workload..."
> +
> +# perf mem/c2c internally uses IBS PMU on AMD CPU which doesn't support
> +# user/kernel filtering and per-process monitoring, spin program on
> +# specific CPU and test in per-CPU mode.
> +is_amd=$(egrep -c 'vendor_id.*AuthenticAMD' /proc/cpuinfo)
> +if (($is_amd >= 1)); then
> + perf mem record -o ${PERF_DATA} -C 0 -- taskset -c 0 $TEST_PROGRAM &
> +else
> + perf mem record --all-user -o ${PERF_DATA} -- $TEST_PROGRAM &
> +fi
> +
> +PERFPID=$!
> +
> +sleep 1
> +
> +kill $PERFPID
> +wait $PERFPID
> +
> +check_result
> +exit $?
> --
> 2.34.1
--
- Arnaldo
next prev parent reply other threads:[~2022-10-06 11:18 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-06 10:10 [PATCH v5] perf test: Introduce script for data symbol testing Leo Yan
2022-10-06 11:18 ` Arnaldo Carvalho de Melo [this message]
2022-10-06 13:17 ` Leo Yan
2022-10-06 11:34 ` Ravi Bangoria
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Yz65kF01XYLayp9E@kernel.org \
--to=acme@kernel.org \
--cc=alexander.shishkin@linux.intel.com \
--cc=jolsa@kernel.org \
--cc=leo.yan@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=ravi.bangoria@amd.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.