selftests/bpf: Add a test for a large global function
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
This commit is contained in:
parent
7608e4db6d
commit
6db2d81a46
@ -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 },
|
||||
|
@ -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);
|
||||
|
5
tools/testing/selftests/bpf/progs/pyperf_global.c
Normal file
5
tools/testing/selftests/bpf/progs/pyperf_global.c
Normal file
@ -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"
|
Loading…
Reference in New Issue
Block a user