perf test: Add libbpf pinning test
Add a test for the newly added BPF object pinning functionality. For example: # tools/perf/perf test 37 37: BPF filter : 37.1: Basic BPF filtering : Ok 37.2: BPF pinning : Ok 37.3: BPF prologue generation : Ok 37.4: BPF relocation checker : Ok # tools/perf/perf test 37 -v 2>&1 | grep pinned libbpf: pinned map '/sys/fs/bpf/perf_test/flip_table' libbpf: pinned program '/sys/fs/bpf/perf_test/func=SyS_epoll_wait/0' Signed-off-by: Joe Stringer <joe@ovn.org> Requested-and-Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Alexei Starovoitov <ast@fb.com> Cc: Daniel Borkmann <daniel@iogearbox.net> Cc: Wang Nan <wangnan0@huawei.com> Cc: netdev@vger.kernel.org Link: http://lkml.kernel.org/r/20170126212001.14103-7-joe@ovn.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
71dc4c3068
commit
a26305363d
@ -5,11 +5,13 @@
|
|||||||
#include <util/evlist.h>
|
#include <util/evlist.h>
|
||||||
#include <linux/bpf.h>
|
#include <linux/bpf.h>
|
||||||
#include <linux/filter.h>
|
#include <linux/filter.h>
|
||||||
|
#include <api/fs/fs.h>
|
||||||
#include <bpf/bpf.h>
|
#include <bpf/bpf.h>
|
||||||
#include "tests.h"
|
#include "tests.h"
|
||||||
#include "llvm.h"
|
#include "llvm.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#define NR_ITERS 111
|
#define NR_ITERS 111
|
||||||
|
#define PERF_TEST_BPF_PATH "/sys/fs/bpf/perf_test"
|
||||||
|
|
||||||
#ifdef HAVE_LIBBPF_SUPPORT
|
#ifdef HAVE_LIBBPF_SUPPORT
|
||||||
|
|
||||||
@ -54,6 +56,7 @@ static struct {
|
|||||||
const char *msg_load_fail;
|
const char *msg_load_fail;
|
||||||
int (*target_func)(void);
|
int (*target_func)(void);
|
||||||
int expect_result;
|
int expect_result;
|
||||||
|
bool pin;
|
||||||
} bpf_testcase_table[] = {
|
} bpf_testcase_table[] = {
|
||||||
{
|
{
|
||||||
LLVM_TESTCASE_BASE,
|
LLVM_TESTCASE_BASE,
|
||||||
@ -63,6 +66,17 @@ static struct {
|
|||||||
"load bpf object failed",
|
"load bpf object failed",
|
||||||
&epoll_wait_loop,
|
&epoll_wait_loop,
|
||||||
(NR_ITERS + 1) / 2,
|
(NR_ITERS + 1) / 2,
|
||||||
|
false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
LLVM_TESTCASE_BASE,
|
||||||
|
"BPF pinning",
|
||||||
|
"[bpf_pinning]",
|
||||||
|
"fix kbuild first",
|
||||||
|
"check your vmlinux setting?",
|
||||||
|
&epoll_wait_loop,
|
||||||
|
(NR_ITERS + 1) / 2,
|
||||||
|
true,
|
||||||
},
|
},
|
||||||
#ifdef HAVE_BPF_PROLOGUE
|
#ifdef HAVE_BPF_PROLOGUE
|
||||||
{
|
{
|
||||||
@ -73,6 +87,7 @@ static struct {
|
|||||||
"check your vmlinux setting?",
|
"check your vmlinux setting?",
|
||||||
&llseek_loop,
|
&llseek_loop,
|
||||||
(NR_ITERS + 1) / 4,
|
(NR_ITERS + 1) / 4,
|
||||||
|
false,
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
@ -83,6 +98,7 @@ static struct {
|
|||||||
"libbpf error when dealing with relocation",
|
"libbpf error when dealing with relocation",
|
||||||
NULL,
|
NULL,
|
||||||
0,
|
0,
|
||||||
|
false,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -226,10 +242,34 @@ static int __test__bpf(int idx)
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (obj)
|
if (obj) {
|
||||||
ret = do_test(obj,
|
ret = do_test(obj,
|
||||||
bpf_testcase_table[idx].target_func,
|
bpf_testcase_table[idx].target_func,
|
||||||
bpf_testcase_table[idx].expect_result);
|
bpf_testcase_table[idx].expect_result);
|
||||||
|
if (ret != TEST_OK)
|
||||||
|
goto out;
|
||||||
|
if (bpf_testcase_table[idx].pin) {
|
||||||
|
int err;
|
||||||
|
|
||||||
|
if (!bpf_fs__mount()) {
|
||||||
|
pr_debug("BPF filesystem not mounted\n");
|
||||||
|
ret = TEST_FAIL;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
err = mkdir(PERF_TEST_BPF_PATH, 0777);
|
||||||
|
if (err && errno != EEXIST) {
|
||||||
|
pr_debug("Failed to make perf_test dir: %s\n",
|
||||||
|
strerror(errno));
|
||||||
|
ret = TEST_FAIL;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
if (bpf_object__pin(obj, PERF_TEST_BPF_PATH))
|
||||||
|
ret = TEST_FAIL;
|
||||||
|
if (rm_rf(PERF_TEST_BPF_PATH))
|
||||||
|
ret = TEST_FAIL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
bpf__clear();
|
bpf__clear();
|
||||||
return ret;
|
return ret;
|
||||||
|
Loading…
Reference in New Issue
Block a user