lkml.org 
[lkml]   [2022]   [Nov]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 09/12] perf test: Add 'brstack' test workload
    Date
    The brstack is to run different kinds of branches repeatedly.  This is
    necessary for brstack test case to verify if it has correct branch info.

    $ perf test -w brstack

    I renamed the internal functions to have brstack_ prefix as it's too
    generic name.

    Signed-off-by: Namhyung Kim <namhyung@kernel.org>
    ---
    tools/perf/tests/builtin-test.c | 1 +
    tools/perf/tests/tests.h | 1 +
    tools/perf/tests/workloads/Build | 2 ++
    tools/perf/tests/workloads/brstack.c | 41 ++++++++++++++++++++++++++++
    4 files changed, 45 insertions(+)
    create mode 100644 tools/perf/tests/workloads/brstack.c

    diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-test.c
    index 9acb7a93eeb9..69fa56939309 100644
    --- a/tools/perf/tests/builtin-test.c
    +++ b/tools/perf/tests/builtin-test.c
    @@ -123,6 +123,7 @@ static struct test_workload *workloads[] = {
    &workload__thloop,
    &workload__leafloop,
    &workload__sqrtloop,
    + &workload__brstack,
    };

    static int num_subtests(const struct test_suite *t)
    diff --git a/tools/perf/tests/tests.h b/tools/perf/tests/tests.h
    index 18c40319e67c..dc96f59cac2e 100644
    --- a/tools/perf/tests/tests.h
    +++ b/tools/perf/tests/tests.h
    @@ -204,5 +204,6 @@ DECLARE_WORKLOAD(noploop);
    DECLARE_WORKLOAD(thloop);
    DECLARE_WORKLOAD(leafloop);
    DECLARE_WORKLOAD(sqrtloop);
    +DECLARE_WORKLOAD(brstack);

    #endif /* TESTS_H */
    diff --git a/tools/perf/tests/workloads/Build b/tools/perf/tests/workloads/Build
    index 1ca95cb0fdb5..c933cdcf91d1 100644
    --- a/tools/perf/tests/workloads/Build
    +++ b/tools/perf/tests/workloads/Build
    @@ -4,5 +4,7 @@ perf-y += noploop.o
    perf-y += thloop.o
    perf-y += leafloop.o
    perf-y += sqrtloop.o
    +perf-y += brstack.o

    CFLAGS_leafloop.o = -g -O0 -fno-inline -fno-omit-frame-pointer
    +CFLAGS_brstack.o = -g -O0 -fno-inline
    diff --git a/tools/perf/tests/workloads/brstack.c b/tools/perf/tests/workloads/brstack.c
    new file mode 100644
    index 000000000000..cd0386d58f97
    --- /dev/null
    +++ b/tools/perf/tests/workloads/brstack.c
    @@ -0,0 +1,41 @@
    +/* SPDX-License-Identifier: GPL-2.0 */
    +#include <stdlib.h>
    +#include "../tests.h"
    +
    +
    +#define BENCH_RUNS 999999
    +
    +static volatile int cnt;
    +
    +static void brstack_bar(void) {
    +} /* return */
    +
    +static void brstack_foo(void) {
    + brstack_bar(); /* call */
    +} /* return */
    +
    +static void brstack_bench(void) {
    + void (*brstack_foo_ind)(void) = brstack_foo;
    +
    + if ((cnt++) % 3) /* branch (cond) */
    + brstack_foo(); /* call */
    + brstack_bar(); /* call */
    + brstack_foo_ind(); /* call (ind) */
    +}
    +
    +static int brstack(int argc, const char **argv)
    +{
    + int num_loops = BENCH_RUNS;
    +
    + if (argc > 0)
    + num_loops = atoi(argv[0]);
    +
    + while (1) {
    + if ((cnt++) > num_loops)
    + break;
    + brstack_bench();/* call */
    + } /* branch (uncond) */
    + return 0;
    +}
    +
    +DEFINE_WORKLOAD(brstack);
    --
    2.38.1.584.g0f3c55d4c2-goog
    \
     
     \ /
      Last update: 2022-11-17 00:40    [W:3.991 / U:0.232 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site