From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ian Rogers <irogers@google.com>
Cc: Namhyung Kim <namhyung@kernel.org>, Jiri Olsa <jolsa@kernel.org>,
Ingo Molnar <mingo@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
LKML <linux-kernel@vger.kernel.org>,
Adrian Hunter <adrian.hunter@intel.com>,
linux-perf-users@vger.kernel.org
Subject: Re: [PATCH 3/8] perf test: Use a test program in perf record tests
Date: Mon, 24 Oct 2022 08:33:18 -0300 [thread overview]
Message-ID: <Y1Z3/t4RtnB8r03t@kernel.org> (raw)
In-Reply-To: <CAP-5=fWKCdyFzR8ZZSK_2v6vT_RKngxxnXGieUVb8PBATJ64eQ@mail.gmail.com>
Em Thu, Oct 20, 2022 at 04:52:14PM -0700, Ian Rogers escreveu:
> On Thu, Oct 20, 2022 at 10:26 AM Namhyung Kim <namhyung@kernel.org> wrote:
> > If the system has cc it could build a test program with two threads
> > and then use it for more detailed testing. Also it accepts an option
> > to run a thread forever to ensure multi-thread runs.
> >
> > If cc is not found, it falls back to use the default value 'true'.
> >
> > Signed-off-by: Namhyung Kim <namhyung@kernel.org>
>
> Acked-by: Ian Rogers <irogers@google.com>
>
> I wonder if these utilities should just be built into perf to avoid
> the cc dependency. Perhaps we can have a hidden option built into perf
> test.
Agreed, not depending on a compiler makes 'perf test' usable in more
systems, particularly production ones where we may want to check if perf
is passing all tests applicable to that system.
- Arnaldo
> Thanks,
> Ian
>
> > ---
> > tools/perf/tests/shell/record.sh | 64 ++++++++++++++++++++++++++++++--
> > 1 file changed, 60 insertions(+), 4 deletions(-)
> >
> > diff --git a/tools/perf/tests/shell/record.sh b/tools/perf/tests/shell/record.sh
> > index 464071462809..952981481239 100755
> > --- a/tools/perf/tests/shell/record.sh
> > +++ b/tools/perf/tests/shell/record.sh
> > @@ -6,10 +6,17 @@ set -e
> >
> > err=0
> > perfdata=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
> > +testprog=$(mktemp /tmp/__perf_test.prog.XXXXXX)
> > +testsym="test_loop"
> >
> > cleanup() {
> > rm -f "${perfdata}"
> > rm -f "${perfdata}".old
> > +
> > + if [ "${testprog}" != "true" ]; then
> > + rm -f "${testprog}"
> > + fi
> > +
> > trap - EXIT TERM INT
> > }
> >
> > @@ -19,9 +26,56 @@ 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
> > + return
> > + fi
> > +
> > + echo "Build a test program"
> > + cat <<EOF | cc -o ${testprog} -xc - -pthread
> > +#include <stdio.h>
> > +#include <stdlib.h>
> > +#include <pthread.h>
> > +
> > +void test_loop(void) {
> > + volatile int count = 1000000;
> > +
> > + while (count--)
> > + continue;
> > +}
> > +
> > +void *thfunc(void *arg) {
> > + int forever = *(int *)arg;
> > +
> > + do {
> > + test_loop();
> > + } while (forever);
> > +
> > + return NULL;
> > +}
> > +
> > +int main(int argc, char *argv[]) {
> > + pthread_t th;
> > + int forever = 0;
> > +
> > + if (argc > 1)
> > + forever = atoi(argv[1]);
> > +
> > + pthread_create(&th, NULL, thfunc, &forever);
> > + 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 +84,13 @@ test_per_thread() {
> > fi
> > return
> > fi
> > - if ! perf record --per-thread -o "${perfdata}" true 2> /dev/null
> > + if ! perf record --per-thread -o "${perfdata}" ${testprog} 2> /dev/null
> > then
> > echo "Per-thread record [Failed record]"
> > err=1
> > return
> > fi
> > - if ! perf report -i "${perfdata}" -q | grep -q true
> > + if ! perf report -i "${perfdata}" -q | grep -q "${testsym}"
> > then
> > echo "Per-thread record [Failed missing output]"
> > err=1
> > @@ -62,7 +116,7 @@ test_register_capture() {
> > return
> > fi
> > if ! perf record -o - --intr-regs=di,r8,dx,cx -e br_inst_retired.near_call:p \
> > - -c 1000 --per-thread true 2> /dev/null \
> > + -c 1000 --per-thread ${testprog} 2> /dev/null \
> > | perf script -F ip,sym,iregs -i - 2> /dev/null \
> > | grep -q "DI:"
> > then
> > @@ -73,6 +127,8 @@ test_register_capture() {
> > echo "Register capture test [Success]"
> > }
> >
> > +build_test_program
> > +
> > test_per_thread
> > test_register_capture
> >
> > --
> > 2.38.0.135.g90850a2211-goog
> >
--
- Arnaldo
next prev parent reply other threads:[~2022-10-24 11:34 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-20 17:26 [PATCHSET 0/8] perf test: Improve perf record tests (v2) Namhyung Kim
2022-10-20 17:26 ` [PATCH 1/8] perf test: Do not use instructions:u explicitly Namhyung Kim
2022-10-20 23:47 ` Ian Rogers
2022-10-20 17:26 ` [PATCH 2/8] perf test: Fix shellcheck issues in the record test Namhyung Kim
2022-10-20 23:48 ` Ian Rogers
2022-10-21 8:45 ` Adrian Hunter
2022-10-20 17:26 ` [PATCH 3/8] perf test: Use a test program in perf record tests Namhyung Kim
2022-10-20 23:52 ` Ian Rogers
2022-10-24 11:33 ` Arnaldo Carvalho de Melo [this message]
2022-10-24 14:00 ` Adrian Hunter
2022-10-24 16:00 ` Arnaldo Carvalho de Melo
2022-10-25 4:12 ` Namhyung Kim
2022-10-25 13:10 ` Arnaldo Carvalho de Melo
2022-10-25 13:17 ` Adrian Hunter
2022-10-25 4:18 ` Namhyung Kim
2022-10-21 8:45 ` Adrian Hunter
2022-10-20 17:26 ` [PATCH 4/8] perf test: Wait for a new thread when testing --per-thread record Namhyung Kim
2022-10-20 23:57 ` Ian Rogers
2022-10-21 8:45 ` Adrian Hunter
2022-10-20 17:26 ` [PATCH 5/8] perf test: Add system-wide mode in perf record tests Namhyung Kim
2022-10-21 0:00 ` Ian Rogers
2022-10-26 14:11 ` Arnaldo Carvalho de Melo
2022-10-20 17:26 ` [PATCH 6/8] perf test: Add target workload test " Namhyung Kim
2022-10-21 0:01 ` Ian Rogers
2022-10-21 8:45 ` Adrian Hunter
2022-10-20 17:26 ` [PATCH 7/8] perf test: Test record with --threads option Namhyung Kim
2022-10-21 0:02 ` Ian Rogers
2022-10-21 8:45 ` Adrian Hunter
2022-10-20 17:26 ` [PATCH 8/8] perf test: Do not set TEST_SKIP for record subtests Namhyung Kim
2022-10-21 0:05 ` Ian Rogers
2022-10-24 11:34 ` Arnaldo Carvalho de Melo
2022-10-26 14:15 ` [PATCHSET 0/8] perf test: Improve perf record tests (v2) Arnaldo Carvalho de Melo
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=Y1Z3/t4RtnB8r03t@kernel.org \
--to=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=namhyung@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 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.