From: Namhyung Kim <namhyung@kernel.org>
To: Arnaldo Carvalho de Melo <acme@kernel.org>, Jiri Olsa <jolsa@kernel.org>
Cc: Ingo Molnar <mingo@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
LKML <linux-kernel@vger.kernel.org>,
Ian Rogers <irogers@google.com>,
linux-perf-users@vger.kernel.org,
Adrian Hunter <adrian.hunter@intel.com>
Subject: [PATCH 2/6] perf test: Use a test program in perf record tests
Date: Tue, 6 Sep 2022 23:46:41 -0700 [thread overview]
Message-ID: <20220907064645.1197894-3-namhyung@kernel.org> (raw)
In-Reply-To: <20220907064645.1197894-1-namhyung@kernel.org>
If the system has cc it could build a test program with two threads
and then use it for more detailed testing. Also it adds initial delay
of 3ms to profile a multi-threaded target. This change make the test
failing but that's what we want to check for now.
If cc is not found, it falls back to use the default value 'true'.
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
tools/perf/tests/shell/record.sh | 58 +++++++++++++++++++++++++++++---
1 file changed, 54 insertions(+), 4 deletions(-)
diff --git a/tools/perf/tests/shell/record.sh b/tools/perf/tests/shell/record.sh
index 40b087bfdb76..cea3c7b7e2cd 100755
--- a/tools/perf/tests/shell/record.sh
+++ b/tools/perf/tests/shell/record.sh
@@ -6,10 +6,18 @@ set -e
err=0
perfdata=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
+testprog=$(mktemp /tmp/__perf_test.prog.XXXXXX)
+testsym="test_loop"
+testopt="-D 3"
cleanup() {
rm -f ${perfdata}
rm -f ${perfdata}.old
+
+ if [ "${testprog}" != "true" ]; then
+ rm -f ${testprog}
+ fi
+
trap - exit term int
}
@@ -19,9 +27,49 @@ trap_cleanup() {
}
trap trap_cleanup exit term int
+build_test_program() {
+ if ! [ -x "$(command -v cc)" ]; then
+ # No CC found. Fall back to 'true'
+ testprog=true
+ testsym=true
+ testopt=''
+ return
+ fi
+
+ echo "Build a test program"
+ cat <<EOF | cc -o ${testprog} -xc - -pthread
+#include <stdio.h>
+#include <unistd.h>
+#include <pthread.h>
+
+void test_loop(void) {
+ volatile int count = 1000000;
+
+ // wait for perf record
+ usleep(5000);
+
+ while (count--)
+ continue;
+}
+
+void *thfunc(void *arg) {
+ test_loop();
+ return NULL;
+}
+
+int main(void) {
+ pthread_t th;
+ pthread_create(&th, NULL, thfunc, NULL);
+ test_loop();
+ pthread_join(th, NULL);
+ return 0;
+}
+EOF
+}
+
test_per_thread() {
echo "Basic --per-thread mode test"
- if ! perf record -o /dev/null --quiet true 2> /dev/null
+ if ! perf record -o /dev/null --quiet ${testprog} 2> /dev/null
then
echo "Per-thread record [Skipped event not supported]"
if [ $err -ne 1 ]
@@ -30,13 +78,13 @@ test_per_thread() {
fi
return
fi
- if ! perf record --per-thread -o ${perfdata} true 2> /dev/null
+ if ! perf record --per-thread ${testopt} -o ${perfdata} ${testprog} 2> /dev/null
then
echo "Per-thread record [Failed record]"
err=1
return
fi
- if ! perf report -i ${perfdata} -q | egrep -q true
+ if ! perf report -i ${perfdata} -q | egrep -q ${testsym}
then
echo "Per-thread record [Failed missing output]"
err=1
@@ -62,7 +110,7 @@ test_register_capture() {
return
fi
if ! perf record -o - --intr-regs=di,r8,dx,cx -e cpu/br_inst_retired.near_call/p \
- -c 1000 --per-thread true 2> /dev/null \
+ -c 1000 --per-thread ${testopt} ${testprog} 2> /dev/null \
| perf script -F ip,sym,iregs -i - 2> /dev/null \
| egrep -q "DI:"
then
@@ -73,6 +121,8 @@ test_register_capture() {
echo "Register capture test [Success]"
}
+build_test_program
+
test_per_thread
test_register_capture
--
2.37.2.789.g6183377224-goog
next prev parent reply other threads:[~2022-09-07 6:47 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-07 6:46 [PATCHSET 0/6] perf test: Improve perf record tests (v1) Namhyung Kim
2022-09-07 6:46 ` [PATCH 1/6] perf test: Do not use instructions:u explicitly Namhyung Kim
2022-09-07 7:56 ` Adrian Hunter
2022-09-07 6:46 ` Namhyung Kim [this message]
2022-09-07 10:44 ` [PATCH 2/6] perf test: Use a test program in perf record tests Adrian Hunter
2022-09-07 17:38 ` Namhyung Kim
2022-09-07 13:16 ` Adrian Hunter
2022-09-07 13:24 ` Adrian Hunter
2022-09-07 17:40 ` Namhyung Kim
2022-09-07 6:46 ` [PATCH 3/6] perf test: Test record with --threads option Namhyung Kim
2022-09-07 13:33 ` Adrian Hunter
2022-09-07 17:41 ` Namhyung Kim
2022-09-07 6:46 ` [PATCH 4/6] perf test: Add system-wide mode in perf record tests Namhyung Kim
2022-09-07 15:20 ` Adrian Hunter
2022-09-07 6:46 ` [PATCH 5/6] perf test: Add target workload test " Namhyung Kim
2022-09-13 11:03 ` Adrian Hunter
2022-09-13 17:28 ` Namhyung Kim
2022-09-07 6:46 ` [PATCH 6/6] perf test: Do not set TEST_SKIP for record subtests Namhyung Kim
2022-09-13 11:28 ` Adrian Hunter
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=20220907064645.1197894-3-namhyung@kernel.org \
--to=namhyung@kernel.org \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=irogers@google.com \
--cc=jolsa@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®