selftests/bpf: Add a test for a large global function
authorAlexei Starovoitov <ast@kernel.org>
Fri, 10 Jan 2020 06:41:22 +0000 (22:41 -0800)
committerDaniel Borkmann <daniel@iogearbox.net>
Fri, 10 Jan 2020 16:20:07 +0000 (17:20 +0100)
test results:
pyperf50 with always_inlined the same function five times: processed 46378 insns
pyperf50 with global function: processed 6102 insns

Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Song Liu <songliubraving@fb.com>
Link: https://lore.kernel.org/bpf/20200110064124.1760511-5-ast@kernel.org
tools/testing/selftests/bpf/prog_tests/bpf_verif_scale.c
tools/testing/selftests/bpf/progs/pyperf.h
tools/testing/selftests/bpf/progs/pyperf_global.c [new file with mode: 0644]

index 9486c13..e9f2f12 100644 (file)
@@ -48,6 +48,8 @@ void test_bpf_verif_scale(void)
                { "test_verif_scale2.o", BPF_PROG_TYPE_SCHED_CLS },
                { "test_verif_scale3.o", BPF_PROG_TYPE_SCHED_CLS },
 
+               { "pyperf_global.o", BPF_PROG_TYPE_RAW_TRACEPOINT },
+
                /* full unroll by llvm */
                { "pyperf50.o", BPF_PROG_TYPE_RAW_TRACEPOINT },
                { "pyperf100.o", BPF_PROG_TYPE_RAW_TRACEPOINT },
index 71d383c..e186899 100644 (file)
@@ -154,7 +154,12 @@ struct {
        __uint(value_size, sizeof(long long) * 127);
 } stackmap SEC(".maps");
 
-static __always_inline int __on_event(struct pt_regs *ctx)
+#ifdef GLOBAL_FUNC
+__attribute__((noinline))
+#else
+static __always_inline
+#endif
+int __on_event(struct bpf_raw_tracepoint_args *ctx)
 {
        uint64_t pid_tgid = bpf_get_current_pid_tgid();
        pid_t pid = (pid_t)(pid_tgid >> 32);
@@ -254,7 +259,7 @@ static __always_inline int __on_event(struct pt_regs *ctx)
 }
 
 SEC("raw_tracepoint/kfree_skb")
-int on_event(struct pt_regs* ctx)
+int on_event(struct bpf_raw_tracepoint_args* ctx)
 {
        int i, ret = 0;
        ret |= __on_event(ctx);
diff --git a/tools/testing/selftests/bpf/progs/pyperf_global.c b/tools/testing/selftests/bpf/progs/pyperf_global.c
new file mode 100644 (file)
index 0000000..079e78a
--- /dev/null
@@ -0,0 +1,5 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright (c) 2020 Facebook */
+#define STACK_MAX_LEN 50
+#define GLOBAL_FUNC
+#include "pyperf.h"