From: tip-bot for Wang Nan <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: hpa@zytor.com, acme@redhat.com, mingo@kernel.org, ast@kernel.org,
masami.hiramatsu.pt@hitachi.com, lizefan@huawei.com,
tglx@linutronix.de, wangnan0@huawei.com,
linux-kernel@vger.kernel.org
Subject: [tip:perf/core] perf test: Print result for each LLVM subtest
Date: Mon, 23 Nov 2015 08:09:27 -0800 [thread overview]
Message-ID: <tip-e8c6d500447c577e669c24ec04cd4173fe9f9afb@git.kernel.org> (raw)
In-Reply-To: <1447749170-175898-4-git-send-email-wangnan0@huawei.com>
Commit-ID: e8c6d500447c577e669c24ec04cd4173fe9f9afb
Gitweb: http://git.kernel.org/tip/e8c6d500447c577e669c24ec04cd4173fe9f9afb
Author: Wang Nan <wangnan0@huawei.com>
AuthorDate: Tue, 17 Nov 2015 08:32:48 +0000
Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Thu, 19 Nov 2015 13:19:16 -0300
perf test: Print result for each LLVM subtest
Currently 'perf test llvm' and 'perf test BPF' have multiple sub-tests,
but the result is provided in only one line:
# perf test LLVM
35: Test LLVM searching and compiling : Ok
This patch introduces sub-tests support, allowing 'perf test' to report
result for each sub-tests:
# perf test LLVM
35: Test LLVM searching and compiling :
35.1: Basic BPF llvm compiling test : Ok
35.2: Test kbuild searching : Ok
35.3: Compile source for BPF prologue generation test : Ok
When a failure happens:
# cat ~/.perfconfig
[llvm]
clang-path = "/bin/false"
# perf test LLVM
35: Test LLVM searching and compiling :
35.1: Basic BPF llvm compiling test : FAILED!
35.2: Test kbuild searching : Skip
35.3: Compile source for BPF prologue generation test : Skip
And:
# rm ~/.perfconfig
# ./perf test LLVM
35: Test LLVM searching and compiling :
35.1: Basic BPF llvm compiling test : Skip
35.2: Test kbuild searching : Skip
35.3: Compile source for BPF prologue generation test : Skip
Skip by user:
# ./perf test -s 1,`seq -s , 3 42`
1: vmlinux symtab matches kallsyms : Skip (user override)
2: detect openat syscall event : Ok
...
35: Test LLVM searching and compiling : Skip (user override)
...
Suggested-and-Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Wang Nan <wangnan0@huawei.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Zefan Li <lizefan@huawei.com>
Cc: pi3orama@163.com
Link: http://lkml.kernel.org/r/1447749170-175898-4-git-send-email-wangnan0@huawei.com
[ Changed so that func is not on an anonymous union ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/tests/builtin-test.c | 91 ++++++++++++++++++++++++++++++++++-------
tools/perf/tests/llvm.c | 65 ++++++++++++++---------------
tools/perf/tests/tests.h | 9 ++++
3 files changed, 115 insertions(+), 50 deletions(-)
diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-test.c
index 9cf4892..8136609 100644
--- a/tools/perf/tests/builtin-test.c
+++ b/tools/perf/tests/builtin-test.c
@@ -160,6 +160,11 @@ static struct test generic_tests[] = {
{
.desc = "Test LLVM searching and compiling",
.func = test__llvm,
+ .subtest = {
+ .skip_if_fail = true,
+ .get_nr = test__llvm_subtest_get_nr,
+ .get_desc = test__llvm_subtest_get_desc,
+ },
},
{
.desc = "Test topology in session",
@@ -237,6 +242,40 @@ static int run_test(struct test *test, int subtest)
for (j = 0; j < ARRAY_SIZE(tests); j++) \
for (t = &tests[j][0]; t->func; t++)
+static int test_and_print(struct test *t, bool force_skip, int subtest)
+{
+ int err;
+
+ if (!force_skip) {
+ pr_debug("\n--- start ---\n");
+ err = run_test(t, subtest);
+ pr_debug("---- end ----\n");
+ } else {
+ pr_debug("\n--- force skipped ---\n");
+ err = TEST_SKIP;
+ }
+
+ if (!t->subtest.get_nr)
+ pr_debug("%s:", t->desc);
+ else
+ pr_debug("%s subtest %d:", t->desc, subtest);
+
+ switch (err) {
+ case TEST_OK:
+ pr_info(" Ok\n");
+ break;
+ case TEST_SKIP:
+ color_fprintf(stderr, PERF_COLOR_YELLOW, " Skip\n");
+ break;
+ case TEST_FAIL:
+ default:
+ color_fprintf(stderr, PERF_COLOR_RED, " FAILED!\n");
+ break;
+ }
+
+ return err;
+}
+
static int __cmd_test(int argc, const char *argv[], struct intlist *skiplist)
{
struct test *t;
@@ -264,21 +303,43 @@ static int __cmd_test(int argc, const char *argv[], struct intlist *skiplist)
continue;
}
- pr_debug("\n--- start ---\n");
- err = run_test(t, i);
- pr_debug("---- end ----\n%s:", t->desc);
-
- switch (err) {
- case TEST_OK:
- pr_info(" Ok\n");
- break;
- case TEST_SKIP:
- color_fprintf(stderr, PERF_COLOR_YELLOW, " Skip\n");
- break;
- case TEST_FAIL:
- default:
- color_fprintf(stderr, PERF_COLOR_RED, " FAILED!\n");
- break;
+ if (!t->subtest.get_nr) {
+ test_and_print(t, false, -1);
+ } else {
+ int subn = t->subtest.get_nr();
+ /*
+ * minus 2 to align with normal testcases.
+ * For subtest we print additional '.x' in number.
+ * for example:
+ *
+ * 35: Test LLVM searching and compiling :
+ * 35.1: Basic BPF llvm compiling test : Ok
+ */
+ int subw = width > 2 ? width - 2 : width;
+ bool skip = false;
+ int subi;
+
+ if (subn <= 0) {
+ color_fprintf(stderr, PERF_COLOR_YELLOW,
+ " Skip (not compiled in)\n");
+ continue;
+ }
+ pr_info("\n");
+
+ for (subi = 0; subi < subn; subi++) {
+ int len = strlen(t->subtest.get_desc(subi));
+
+ if (subw < len)
+ subw = len;
+ }
+
+ for (subi = 0; subi < subn; subi++) {
+ pr_info("%2d.%1d: %-*s:", i, subi + 1, subw,
+ t->subtest.get_desc(subi));
+ err = test_and_print(t, skip, subi);
+ if (err != TEST_OK && t->subtest.skip_if_fail)
+ skip = true;
+ }
}
}
diff --git a/tools/perf/tests/llvm.c b/tools/perf/tests/llvm.c
index 4350c45..06f45c1 100644
--- a/tools/perf/tests/llvm.c
+++ b/tools/perf/tests/llvm.c
@@ -46,7 +46,7 @@ static struct {
},
[LLVM_TESTCASE_BPF_PROLOGUE] = {
.source = test_llvm__bpf_test_prologue_prog,
- .desc = "Test BPF prologue generation",
+ .desc = "Compile source for BPF prologue generation test",
},
};
@@ -131,44 +131,39 @@ out:
return ret;
}
-int test__llvm(int subtest __maybe_unused)
+int test__llvm(int subtest)
{
- enum test_llvm__testcase i;
+ int ret;
+ void *obj_buf = NULL;
+ size_t obj_buf_sz = 0;
- for (i = 0; i < __LLVM_TESTCASE_MAX; i++) {
- int ret;
- void *obj_buf = NULL;
- size_t obj_buf_sz = 0;
+ if ((subtest < 0) || (subtest >= __LLVM_TESTCASE_MAX))
+ return TEST_FAIL;
- ret = test_llvm__fetch_bpf_obj(&obj_buf, &obj_buf_sz,
- i, false);
+ ret = test_llvm__fetch_bpf_obj(&obj_buf, &obj_buf_sz,
+ subtest, false);
- if (ret == TEST_OK) {
- ret = test__bpf_parsing(obj_buf, obj_buf_sz);
- if (ret != TEST_OK)
- pr_debug("Failed to parse test case '%s'\n",
- bpf_source_table[i].desc);
- }
- free(obj_buf);
-
- switch (ret) {
- case TEST_SKIP:
- return TEST_SKIP;
- case TEST_OK:
- break;
- default:
- /*
- * Test 0 is the basic LLVM test. If test 0
- * fail, the basic LLVM support not functional
- * so the whole test should fail. If other test
- * case fail, it can be fixed by adjusting
- * config so don't report error.
- */
- if (i == 0)
- return TEST_FAIL;
- else
- return TEST_SKIP;
+ if (ret == TEST_OK) {
+ ret = test__bpf_parsing(obj_buf, obj_buf_sz);
+ if (ret != TEST_OK) {
+ pr_debug("Failed to parse test case '%s'\n",
+ bpf_source_table[subtest].desc);
}
}
- return TEST_OK;
+ free(obj_buf);
+
+ return ret;
+}
+
+int test__llvm_subtest_get_nr(void)
+{
+ return __LLVM_TESTCASE_MAX;
+}
+
+const char *test__llvm_subtest_get_desc(int subtest)
+{
+ if ((subtest < 0) || (subtest >= __LLVM_TESTCASE_MAX))
+ return NULL;
+
+ return bpf_source_table[subtest].desc;
}
diff --git a/tools/perf/tests/tests.h b/tools/perf/tests/tests.h
index 204e4ee..f92af52 100644
--- a/tools/perf/tests/tests.h
+++ b/tools/perf/tests/tests.h
@@ -1,6 +1,8 @@
#ifndef TESTS_H
#define TESTS_H
+#include <stdbool.h>
+
#define TEST_ASSERT_VAL(text, cond) \
do { \
if (!(cond)) { \
@@ -27,6 +29,11 @@ enum {
struct test {
const char *desc;
int (*func)(int subtest);
+ struct {
+ bool skip_if_fail;
+ int (*get_nr)(void);
+ const char *(*get_desc)(int subtest);
+ } subtest;
};
/* Tests */
@@ -66,6 +73,8 @@ int test__fdarray__add(int subtest);
int test__kmod_path__parse(int subtest);
int test__thread_map(int subtest);
int test__llvm(int subtest);
+const char *test__llvm_subtest_get_desc(int subtest);
+int test__llvm_subtest_get_nr(void);
int test__bpf(int subtest);
int test_session_topology(int subtest);
next prev parent reply other threads:[~2015-11-23 16:09 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-16 12:10 [PATCH 00/13] perf tools: bpf: Improve BPF program ability Wang Nan
2015-11-16 12:10 ` [PATCH 01/13] perf probe: Fix memory leaking on faiulre by clearing all probe_trace_events Wang Nan
2015-11-16 12:10 ` [PATCH 02/13] perf probe: Clear probe_trace_event when add_probe_trace_event() fails Wang Nan
2015-11-16 12:10 ` [PATCH 03/13] perf tools: Allow BPF program attach to uprobe events Wang Nan
2015-11-16 14:14 ` Arnaldo Carvalho de Melo
2015-11-23 16:06 ` [tip:perf/core] perf bpf: " tip-bot for Wang Nan
2015-11-16 12:10 ` [PATCH 04/13] perf tools: Allow BPF program attach to modules Wang Nan
2015-11-23 16:06 ` [tip:perf/core] perf bpf: Allow attaching BPF programs to modules symbols tip-bot for Wang Nan
2015-11-16 12:10 ` [PATCH 05/13] perf tools: Introduce strtobool() to string.c Wang Nan
2015-11-16 14:17 ` Arnaldo Carvalho de Melo
2015-11-16 14:49 ` Arnaldo Carvalho de Melo
2015-11-16 15:55 ` Arnaldo Carvalho de Melo
2015-11-23 16:04 ` [tip:perf/core] tools: Clone the kernel's strtobool function tip-bot for Wang Nan
2015-11-16 12:10 ` [PATCH 06/13] perf tools: Allow BPF program config probing options Wang Nan
2015-11-23 16:06 ` [tip:perf/core] perf bpf: " tip-bot for Wang Nan
2015-11-16 12:10 ` [PATCH 07/13] bpf tools: Load a program with different instances using preprocessor Wang Nan
2015-11-16 19:02 ` Arnaldo Carvalho de Melo
2015-11-17 3:53 ` Wangnan (F)
2015-11-23 16:05 ` [tip:perf/core] " tip-bot for Wang Nan
2015-11-16 12:10 ` [PATCH 08/13] perf tools: Add BPF_PROLOGUE config options for further patches Wang Nan
2015-11-23 16:05 ` [tip:perf/core] perf bpf: " tip-bot for Wang Nan
2015-11-16 12:10 ` [PATCH 09/13] perf tools: Compile dwarf-regs.c if CONFIG_BPF_PROLOGUE is on Wang Nan
2015-11-23 16:05 ` [tip:perf/core] perf bpf: " tip-bot for Wang Nan
2015-11-16 12:10 ` [PATCH 10/13] perf tools: Add prologue for BPF programs for fetching arguments Wang Nan
2015-11-23 16:07 ` [tip:perf/core] perf bpf: " tip-bot for He Kuang
2015-11-16 12:10 ` [PATCH 11/13] perf tools: Generate prologue for BPF programs Wang Nan
2015-11-23 16:07 ` [tip:perf/core] perf bpf: " tip-bot for Wang Nan
2015-11-16 12:10 ` [PATCH 12/13] perf test: Test BPF prologue Wang Nan
2015-11-17 1:29 ` Arnaldo Carvalho de Melo
2015-11-17 1:31 ` Wangnan (F)
2015-11-17 4:38 ` Wangnan (F)
2015-11-17 12:20 ` Arnaldo Carvalho de Melo
2015-11-17 8:32 ` [PATCH 0/5] perf tools: Improve BPF support Wang Nan
2015-11-17 8:32 ` [PATCH 1/5] perf test: Fix 2 bugs in 'perf test BPF' Wang Nan
2015-11-17 12:56 ` Arnaldo Carvalho de Melo
2015-11-17 13:01 ` pi3orama
2015-11-17 13:34 ` Arnaldo Carvalho de Melo
2015-11-23 16:08 ` [tip:perf/core] perf test: Fix 'perf test BPF' when it fails to find a suitable vmlinux tip-bot for Wang Nan
2015-11-17 8:32 ` [PATCH 2/5] perf tools: Use same BPF program if arguments are identical Wang Nan
2015-11-23 16:08 ` [tip:perf/core] perf bpf: " tip-bot for Wang Nan
2015-11-17 8:32 ` [PATCH 3/5] perf test: Print result for each subtest for llvm Wang Nan
2015-11-17 13:03 ` Arnaldo Carvalho de Melo
2015-11-23 16:09 ` tip-bot for Wang Nan [this message]
2015-11-17 8:32 ` [PATCH 4/5] perf test: Print result for each subtest for BPF Wang Nan
2015-11-23 16:09 ` [tip:perf/core] perf test: Print result for each BPF subtest tip-bot for Wang Nan
2015-11-17 8:32 ` [PATCH 5/5] perf test: Mute test cases if verbose == 0 Wang Nan
2015-11-17 13:11 ` Arnaldo Carvalho de Melo
2015-11-23 16:10 ` [tip:perf/core] perf test: Mute test cases error messages " tip-bot for Wang Nan
2015-11-17 8:38 ` [PATCH 12/13] perf test: Test BPF prologue Wangnan (F)
2015-11-17 9:44 ` [PATCH] perf record: Support custom vmlinux path Wang Nan
2015-11-17 12:33 ` Arnaldo Carvalho de Melo
2015-11-17 12:42 ` Arnaldo Carvalho de Melo
2015-11-17 12:45 ` pi3orama
2015-11-19 14:03 ` [PATCH 0/2] perf tools: Builtin options related improvements Wang Nan
2015-11-19 14:03 ` [PATCH 1/2] perf tools: Always give options even it not compiled Wang Nan
2015-11-20 10:54 ` 平松雅巳 / HIRAMATU,MASAMI
2015-11-26 8:05 ` Wangnan (F)
2015-11-26 9:06 ` Wangnan (F)
2015-11-19 14:03 ` [PATCH 2/2] perf record: Support custom vmlinux path Wang Nan
2015-11-23 16:08 ` [tip:perf/core] perf test: Test the BPF prologue adding infrastructure tip-bot for Wang Nan
2015-11-16 12:10 ` [PATCH 13/13] perf tools: Use same BPF program if arguments are identical Wang Nan
2015-11-17 3:05 ` Wangnan (F)
2015-11-17 13:16 ` Arnaldo Carvalho de Melo
2015-11-16 14:09 ` [PATCH 00/13] perf tools: bpf: Improve BPF program ability 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=tip-e8c6d500447c577e669c24ec04cd4173fe9f9afb@git.kernel.org \
--to=tipbot@zytor.com \
--cc=acme@redhat.com \
--cc=ast@kernel.org \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=lizefan@huawei.com \
--cc=masami.hiramatsu.pt@hitachi.com \
--cc=mingo@kernel.org \
--cc=tglx@linutronix.de \
--cc=wangnan0@huawei.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).