From: Namhyung Kim <namhyung@kernel.org>
To: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Ingo Molnar <mingo@kernel.org>,
Thomas Gleixner <tglx@linutronix.de>,
Jiri Olsa <jolsa@kernel.org>, Ian Rogers <irogers@google.com>,
Adrian Hunter <adrian.hunter@intel.com>,
Kan Liang <kan.liang@linux.intel.com>,
Clark Williams <williams@redhat.com>,
linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
Arnaldo Carvalho de Melo <acme@redhat.com>,
Athira Rajeev <atrajeev@linux.vnet.ibm.com>,
Howard Chu <howardchu95@gmail.com>,
James Clark <james.clark@linaro.org>, Leo Yan <leo.yan@linux.dev>,
Thomas Richter <tmricht@linux.ibm.com>,
Veronika Molnarova <vmolnaro@redhat.com>
Subject: Re: [PATCH v2 3/4] perf test: Don't suppress the libtraceevent tests, skip them
Date: Fri, 8 Nov 2024 16:14:30 -0800 [thread overview]
Message-ID: <Zy6pZoMbDFrV_QaC@google.com> (raw)
In-Reply-To: <20241105142616.761042-4-acme@kernel.org>
Hi Arnaldo,
On Tue, Nov 05, 2024 at 11:26:15AM -0300, Arnaldo Carvalho de Melo wrote:
> From: Arnaldo Carvalho de Melo <acme@redhat.com>
>
> As suggested by Namhyung for the "import perf" python binding test, skip
> the tests that require perf being linked with libtraceevent, telling the
> reason:
>
> $ make -C tools/perf NO_LIBTRACEEVENT=1
> # perf check feature libtraceevent
> libtraceevent: [ OFF ] # HAVE_LIBTRACEEVENT
> # ldd ~/bin/perf | grep traceevent
> #
> # perf test
> 1: vmlinux symtab matches kallsyms : Ok
> 2: Detect openat syscall event : Skip (not linked with libtraceevent)
> 3: Detect openat syscall event on all cpus : Skip (not linked with libtraceevent)
> 4: mmap interface tests :
> 4.1: Read samples using the mmap interface : Skip (not linked with libtraceevent)
> 4.2: User space counter reading of instructions : Skip (not linked with libtraceevent)
> 4.3: User space counter reading of cycles : Skip (not linked with libtraceevent)
> <SNIP>
> 14: Parse sched tracepoints fields : Skip (not linked with libtraceevent)
> 15: syscalls:sys_enter_openat event fields : Skip (not linked with libtraceevent)
> <SNIP>
> 32: Track with sched_switch : Skip (not linked with libtraceevent)
> <SNIP>
>
> Cc: Adrian Hunter <adrian.hunter@intel.com>
> Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
> Cc: Howard Chu <howardchu95@gmail.com>
> Cc: Ian Rogers <irogers@google.com>
> Cc: James Clark <james.clark@linaro.org>
> Cc: Jiri Olsa <jolsa@kernel.org>
> Cc: Kan Liang <kan.liang@linux.intel.com>
> Cc: Leo Yan <leo.yan@linux.dev>
> Cc: Namhyung Kim <namhyung@kernel.org>
> Cc: Thomas Richter <tmricht@linux.ibm.com>
> Cc: Veronika Molnarova <vmolnaro@redhat.com>
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> ---
> tools/perf/tests/Build | 12 +++++-----
> tools/perf/tests/builtin-test.c | 6 -----
> tools/perf/tests/evsel-tp-sched.c | 16 +++++++++++--
> tools/perf/tests/mmap-basic.c | 26 +++++++++++++++++++--
> tools/perf/tests/openat-syscall-all-cpus.c | 11 ++++++++-
> tools/perf/tests/openat-syscall-tp-fields.c | 11 ++++++++-
> tools/perf/tests/openat-syscall.c | 11 ++++++++-
> tools/perf/tests/switch-tracking.c | 23 +++++++++++++++++-
> 8 files changed, 96 insertions(+), 20 deletions(-)
>
> diff --git a/tools/perf/tests/Build b/tools/perf/tests/Build
> index 01ed9335db4dba4e..c57ac14e7114e291 100644
> --- a/tools/perf/tests/Build
> +++ b/tools/perf/tests/Build
> @@ -5,13 +5,13 @@ perf-test-y += tests-scripts.o
> perf-test-y += parse-events.o
> perf-test-y += dso-data.o
> perf-test-y += vmlinux-kallsyms.o
> -perf-test-$(CONFIG_LIBTRACEEVENT) += openat-syscall.o
> -perf-test-$(CONFIG_LIBTRACEEVENT) += openat-syscall-all-cpus.o
> -perf-test-$(CONFIG_LIBTRACEEVENT) += openat-syscall-tp-fields.o
> -perf-test-$(CONFIG_LIBTRACEEVENT) += mmap-basic.o
> +perf-test-y += openat-syscall.o
> +perf-test-y += openat-syscall-all-cpus.o
> +perf-test-y += openat-syscall-tp-fields.o
> +perf-test-y += mmap-basic.o
> perf-test-y += perf-record.o
> perf-test-y += evsel-roundtrip-name.o
> -perf-test-$(CONFIG_LIBTRACEEVENT) += evsel-tp-sched.o
> +perf-test-y += evsel-tp-sched.o
> perf-test-y += fdarray.o
> perf-test-y += pmu.o
> perf-test-y += pmu-events.o
> @@ -29,7 +29,7 @@ perf-test-y += task-exit.o
> perf-test-y += sw-clock.o
> perf-test-y += mmap-thread-lookup.o
> perf-test-y += thread-maps-share.o
> -perf-test-$(CONFIG_LIBTRACEEVENT) += switch-tracking.o
> +perf-test-y += switch-tracking.o
> perf-test-y += keep-tracking.o
> perf-test-y += code-reading.o
> perf-test-y += sample-parsing.o
> diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-test.c
> index d2cabaa8ad922d68..5ebeaf3d7b69a8d0 100644
> --- a/tools/perf/tests/builtin-test.c
> +++ b/tools/perf/tests/builtin-test.c
> @@ -60,11 +60,9 @@ static struct test_suite *arch_tests[] = {
>
> static struct test_suite *generic_tests[] = {
> &suite__vmlinux_matches_kallsyms,
> -#ifdef HAVE_LIBTRACEEVENT
> &suite__openat_syscall_event,
> &suite__openat_syscall_event_on_all_cpus,
> &suite__basic_mmap,
> -#endif
> &suite__mem,
> &suite__parse_events,
> &suite__expr,
> @@ -74,10 +72,8 @@ static struct test_suite *generic_tests[] = {
> &suite__tool_pmu,
> &suite__dso_data,
> &suite__perf_evsel__roundtrip_name_test,
> -#ifdef HAVE_LIBTRACEEVENT
> &suite__perf_evsel__tp_sched_test,
> &suite__syscall_openat_tp_fields,
> -#endif
> &suite__hists_link,
> &suite__python_use,
> &suite__bp_signal,
> @@ -95,9 +91,7 @@ static struct test_suite *generic_tests[] = {
> &suite__thread_maps_share,
> &suite__hists_output,
> &suite__hists_cumulate,
> -#ifdef HAVE_LIBTRACEEVENT
> &suite__switch_tracking,
> -#endif
> &suite__fdarray__filter,
> &suite__fdarray__add,
> &suite__kmod_path__parse,
> diff --git a/tools/perf/tests/evsel-tp-sched.c b/tools/perf/tests/evsel-tp-sched.c
> index 3da6a76eac3856d1..a7d3a59f01217280 100644
> --- a/tools/perf/tests/evsel-tp-sched.c
> +++ b/tools/perf/tests/evsel-tp-sched.c
> @@ -1,10 +1,12 @@
> // SPDX-License-Identifier: GPL-2.0
> #include <linux/err.h>
> -#include <traceevent/event-parse.h>
> #include "evsel.h"
> #include "tests.h"
> #include "debug.h"
>
> +#ifdef HAVE_LIBTRACEEVENT
> +#include <traceevent/event-parse.h>
I'm about to process this for the header path.
https://lore.kernel.org/linux-perf-users/20241105105649.45399-1-yangyicong@huawei.com/
> +
> static int evsel__test_field(struct evsel *evsel, const char *name, int size, bool should_be_signed)
> {
> struct tep_format_field *field = evsel__field(evsel, name);
> @@ -31,10 +33,12 @@ static int evsel__test_field(struct evsel *evsel, const char *name, int size, bo
>
> return ret;
> }
> +#endif // HAVE_LIBTRACEEVENT
>
> static int test__perf_evsel__tp_sched_test(struct test_suite *test __maybe_unused,
> int subtest __maybe_unused)
> {
> +#ifdef HAVE_LIBTRACEEVENT
It doesn't look good we need #ifdef every places. Is it possible to
check it as an integer value and return early if it's not available?
if (!HAVE_LIBTRACEEVENT)
return TEST_SKIP;
I guess it'd break where it just checks if it's defined. Probably we
need a separate global variable to be set using the value.
Obviously it cannot be applied if it needs to see the definition of
data type in the libtraceevent. But I think encapsulated things
already.
> struct evsel *evsel = evsel__newtp("sched", "sched_switch");
> int ret = TEST_OK;
>
> @@ -87,12 +91,20 @@ static int test__perf_evsel__tp_sched_test(struct test_suite *test __maybe_unuse
>
> evsel__delete(evsel);
> return ret;
> +#else
> + return TEST_SKIP;
> +#endif // HAVE_LIBTRACEEVENT
> }
>
> static struct test_case tests__perf_evsel__tp_sched_test[] = {
> TEST_CASE_REASON("Parse sched tracepoints fields",
> perf_evsel__tp_sched_test,
> - "permissions"),
> +#ifdef HAVE_LIBTRACEEVENT
> + "permissions"
> +#else
> + "not linked with libtraceevent"
> +#endif
Hmm.. maybe it needs to update the reason of the skip. Something like
this?
if (!IS_ENABLED(CONFIG_LIBTRACEEVENT)) {
test->skip_reason = "not linked with libtraceevent";
return TEST_SKIP;
}
Thanks,
Namhyung
> + ),
> { .name = NULL, }
> };
>
> diff --git a/tools/perf/tests/mmap-basic.c b/tools/perf/tests/mmap-basic.c
> index 012c8ae439fdcf56..f87ec3c40e091d5d 100644
> --- a/tools/perf/tests/mmap-basic.c
> +++ b/tools/perf/tests/mmap-basic.c
> @@ -10,6 +10,7 @@
> #include "evsel.h"
> #include "thread_map.h"
> #include "tests.h"
> +#include "tests/tests.h"
> #include "util/mmap.h"
> #include "util/sample.h"
> #include <linux/err.h>
> @@ -31,6 +32,7 @@
> */
> static int test__basic_mmap(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
> {
> +#ifdef HAVE_LIBTRACEEVENT
> int err = TEST_FAIL;
> union perf_event *event;
> struct perf_thread_map *threads;
> @@ -167,10 +169,14 @@ static int test__basic_mmap(struct test_suite *test __maybe_unused, int subtest
> out_free_threads:
> perf_thread_map__put(threads);
> return err;
> +#else
> + return TEST_SKIP;
> +#endif // HAVE_LIBTRACEEVENT
> }
>
> -static int test_stat_user_read(int event)
> +static int test_stat_user_read(int event __maybe_unused)
> {
> +#ifdef HAVE_LIBTRACEEVENT
> struct perf_counts_values counts = { .val = 0 };
> struct perf_thread_map *threads;
> struct perf_evsel *evsel;
> @@ -264,6 +270,9 @@ static int test_stat_user_read(int event)
>
> perf_thread_map__put(threads);
> return ret;
> +#else
> + return TEST_SKIP;
> +#endif // HAVE_LIBTRACEEVENT
> }
>
> static int test__mmap_user_read_instr(struct test_suite *test __maybe_unused,
> @@ -281,23 +290,36 @@ static int test__mmap_user_read_cycles(struct test_suite *test __maybe_unused,
> static struct test_case tests__basic_mmap[] = {
> TEST_CASE_REASON("Read samples using the mmap interface",
> basic_mmap,
> - "permissions"),
> +#ifdef HAVE_LIBTRACEEVENT
> + "permissions"
> +#else
> + "not linked with libtraceevent"
> +#endif
> + ),
> TEST_CASE_REASON("User space counter reading of instructions",
> mmap_user_read_instr,
> +#ifdef HAVE_LIBTRACEEVENT
> #if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__) || \
> (defined(__riscv) && __riscv_xlen == 64)
> "permissions"
> #else
> "unsupported"
> +#endif
> +#else
> + "not linked with libtraceevent"
> #endif
> ),
> TEST_CASE_REASON("User space counter reading of cycles",
> mmap_user_read_cycles,
> +#ifdef HAVE_LIBTRACEEVENT
> #if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__) || \
> (defined(__riscv) && __riscv_xlen == 64)
> "permissions"
> #else
> "unsupported"
> +#endif
> +#else
> + "not linked with libtraceevent"
> #endif
> ),
> { .name = NULL, }
> diff --git a/tools/perf/tests/openat-syscall-all-cpus.c b/tools/perf/tests/openat-syscall-all-cpus.c
> index fb114118c87640b8..72dc22bef917f17d 100644
> --- a/tools/perf/tests/openat-syscall-all-cpus.c
> +++ b/tools/perf/tests/openat-syscall-all-cpus.c
> @@ -22,6 +22,7 @@
> static int test__openat_syscall_event_on_all_cpus(struct test_suite *test __maybe_unused,
> int subtest __maybe_unused)
> {
> +#ifdef HAVE_LIBTRACEEVENT
> int err = TEST_FAIL, fd, idx;
> struct perf_cpu cpu;
> struct perf_cpu_map *cpus;
> @@ -122,13 +123,21 @@ static int test__openat_syscall_event_on_all_cpus(struct test_suite *test __mayb
> out_thread_map_delete:
> perf_thread_map__put(threads);
> return err;
> +#else
> + return TEST_SKIP;
> +#endif // HAVE_LIBTRACEEVENT
> }
>
>
> static struct test_case tests__openat_syscall_event_on_all_cpus[] = {
> TEST_CASE_REASON("Detect openat syscall event on all cpus",
> openat_syscall_event_on_all_cpus,
> - "permissions"),
> +#ifdef HAVE_LIBTRACEEVENT
> + "permissions"
> +#else
> + "not linked with libtraceevent"
> +#endif
> + ),
> { .name = NULL, }
> };
>
> diff --git a/tools/perf/tests/openat-syscall-tp-fields.c b/tools/perf/tests/openat-syscall-tp-fields.c
> index 3943da441979c0fc..cc0e31958646e88c 100644
> --- a/tools/perf/tests/openat-syscall-tp-fields.c
> +++ b/tools/perf/tests/openat-syscall-tp-fields.c
> @@ -26,6 +26,7 @@
> static int test__syscall_openat_tp_fields(struct test_suite *test __maybe_unused,
> int subtest __maybe_unused)
> {
> +#ifdef HAVE_LIBTRACEEVENT
> struct record_opts opts = {
> .target = {
> .uid = UINT_MAX,
> @@ -144,12 +145,20 @@ static int test__syscall_openat_tp_fields(struct test_suite *test __maybe_unused
> evlist__delete(evlist);
> out:
> return ret;
> +#else
> + return TEST_SKIP;
> +#endif // HAVE_LIBTRACEEVENT
> }
>
> static struct test_case tests__syscall_openat_tp_fields[] = {
> TEST_CASE_REASON("syscalls:sys_enter_openat event fields",
> syscall_openat_tp_fields,
> - "permissions"),
> +#ifdef HAVE_LIBTRACEEVENT
> + "permissions"
> +#else
> + "not linked with libtraceevent"
> +#endif
> + ),
> { .name = NULL, }
> };
>
> diff --git a/tools/perf/tests/openat-syscall.c b/tools/perf/tests/openat-syscall.c
> index 131b62271bfa270b..2ca0b7d2cca7672e 100644
> --- a/tools/perf/tests/openat-syscall.c
> +++ b/tools/perf/tests/openat-syscall.c
> @@ -17,6 +17,7 @@
> static int test__openat_syscall_event(struct test_suite *test __maybe_unused,
> int subtest __maybe_unused)
> {
> +#ifdef HAVE_LIBTRACEEVENT
> int err = TEST_FAIL, fd;
> struct evsel *evsel;
> unsigned int nr_openat_calls = 111, i;
> @@ -69,12 +70,20 @@ static int test__openat_syscall_event(struct test_suite *test __maybe_unused,
> out_thread_map_delete:
> perf_thread_map__put(threads);
> return err;
> +#else
> + return TEST_SKIP;
> +#endif // HAVE_LIBTRACEEVENT
> }
>
> static struct test_case tests__openat_syscall_event[] = {
> TEST_CASE_REASON("Detect openat syscall event",
> openat_syscall_event,
> - "permissions"),
> +#ifdef HAVE_LIBTRACEEVENT
> + "permissions"
> +#else
> + "not linked with libtraceevent"
> +#endif
> + ),
> { .name = NULL, }
> };
>
> diff --git a/tools/perf/tests/switch-tracking.c b/tools/perf/tests/switch-tracking.c
> index 5cab17a1942e67d7..591ae74b663af3c1 100644
> --- a/tools/perf/tests/switch-tracking.c
> +++ b/tools/perf/tests/switch-tracking.c
> @@ -22,6 +22,7 @@
> #include "util/sample.h"
> #include "pmus.h"
>
> +#ifdef HAVE_LIBTRACEEVENT
> static int spin_sleep(void)
> {
> struct timeval start, now, diff, maxtime;
> @@ -314,6 +315,7 @@ static int process_events(struct evlist *evlist,
> free_event_nodes(&events);
> return ret;
> }
> +#endif // HAVE_LIBTRACEEVENT
>
> /**
> * test__switch_tracking - test using sched_switch and tracking events.
> @@ -325,6 +327,7 @@ static int process_events(struct evlist *evlist,
> */
> static int test__switch_tracking(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
> {
> +#ifdef HAVE_LIBTRACEEVENT
> const char *sched_switch = "sched:sched_switch";
> const char *cycles = "cycles:u";
> struct switch_tracking switch_tracking = { .tids = NULL, };
> @@ -581,6 +584,24 @@ static int test__switch_tracking(struct test_suite *test __maybe_unused, int sub
> out_err:
> err = -1;
> goto out;
> +#else
> + return TEST_SKIP;
> +#endif // HAVE_LIBTRACEEVENT
> }
>
> -DEFINE_SUITE("Track with sched_switch", switch_tracking);
> +static struct test_case tests__switch_tracking[] = {
> + {
> + .name = "switch_tracking",
> + .desc = "Track with sched_switch",
> + .run_case = test__switch_tracking,
> +#ifndef HAVE_LIBTRACEEVENT
> + .skip_reason = "not linked with libtraceevent",
> +#endif
> + },
> + { .name = NULL, }
> +};
> +
> +struct test_suite suite__switch_tracking = {
> + .desc = "Track with sched_switch",
> + .test_cases = tests__switch_tracking,
> +};
> --
> 2.47.0
>
next prev parent reply other threads:[~2024-11-09 0:14 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-05 14:26 [PATCH v2 perf-tools-next 0/4] 'perf test' fixes/improvements Arnaldo Carvalho de Melo
2024-11-05 14:26 ` [PATCH v2 1/4] perf test python: Robustify the 'perf test python' test case Arnaldo Carvalho de Melo
2024-11-05 14:26 ` [PATCH v2 2/4] perf test: Skip the python binding builtin test case with NO_LIBPYTHON=1 Arnaldo Carvalho de Melo
2024-11-05 14:26 ` [PATCH v2 3/4] perf test: Don't suppress the libtraceevent tests, skip them Arnaldo Carvalho de Melo
2024-11-05 15:50 ` Ian Rogers
2024-11-08 17:50 ` Namhyung Kim
2024-11-09 0:14 ` Namhyung Kim [this message]
2024-11-05 14:26 ` [PATCH v2 4/4] perf build: Emit a warning when libtraceevent is explicitely disabled 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=Zy6pZoMbDFrV_QaC@google.com \
--to=namhyung@kernel.org \
--cc=acme@kernel.org \
--cc=acme@redhat.com \
--cc=adrian.hunter@intel.com \
--cc=atrajeev@linux.vnet.ibm.com \
--cc=howardchu95@gmail.com \
--cc=irogers@google.com \
--cc=james.clark@linaro.org \
--cc=jolsa@kernel.org \
--cc=kan.liang@linux.intel.com \
--cc=leo.yan@linux.dev \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=tglx@linutronix.de \
--cc=tmricht@linux.ibm.com \
--cc=vmolnaro@redhat.com \
--cc=williams@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).