perf bpf examples: With no BPF events remove examples
The examples were used to give demonstrations of BPF events but such functionality is now subsumed by using --filter with 'perf record' or the direct use of BPF skeletons. Signed-off-by: Ian Rogers <irogers@google.com> Acked-by: Jiri Olsa <jolsa@kernel.org> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Andrii Nakryiko <andrii@kernel.org> Cc: Anshuman Khandual <anshuman.khandual@arm.com> Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com> Cc: Brendan Gregg <brendan.d.gregg@gmail.com> Cc: Carsten Haitzler <carsten.haitzler@arm.com> Cc: Eduard Zingerman <eddyz87@gmail.com> Cc: Fangrui Song <maskray@google.com> Cc: He Kuang <hekuang@huawei.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: James Clark <james.clark@arm.com> Cc: Kan Liang <kan.liang@linux.intel.com> Cc: Leo Yan <leo.yan@linaro.org> Cc: Madhavan Srinivasan <maddy@linux.ibm.com> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Nathan Chancellor <nathan@kernel.org> Cc: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> Cc: Nick Desaulniers <ndesaulniers@google.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Ravi Bangoria <ravi.bangoria@amd.com> Cc: Rob Herring <robh@kernel.org> Cc: Tiezhu Yang <yangtiezhu@loongson.cn> Cc: Tom Rix <trix@redhat.com> Cc: Wang Nan <wangnan0@huawei.com> Cc: Wang ShaoBo <bobo.shaobowang@huawei.com> Cc: Yang Jihong <yangjihong1@huawei.com> Cc: Yonghong Song <yhs@fb.com> Cc: YueHaibing <yuehaibing@huawei.com> Cc: bpf@vger.kernel.org Cc: llvm@lists.linux.dev Link: https://lore.kernel.org/r/20230810184853.2860737-4-irogers@google.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
5e6da6be30
commit
5056c99e8d
@ -958,11 +958,6 @@ ifndef NO_JVMTI
|
||||
endif
|
||||
$(call QUIET_INSTALL, libexec) \
|
||||
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
|
||||
ifndef NO_LIBBPF
|
||||
$(call QUIET_INSTALL, bpf-examples) \
|
||||
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perf_examples_instdir_SQ)/bpf'; \
|
||||
$(INSTALL) examples/bpf/*.c -m 644 -t '$(DESTDIR_SQ)$(perf_examples_instdir_SQ)/bpf'
|
||||
endif
|
||||
$(call QUIET_INSTALL, perf-archive) \
|
||||
$(INSTALL) $(OUTPUT)perf-archive -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
|
||||
$(call QUIET_INSTALL, perf-iostat) \
|
||||
|
@ -1,53 +0,0 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
Description:
|
||||
|
||||
. Disable strace like syscall tracing (--no-syscalls), or try tracing
|
||||
just some (-e *sleep).
|
||||
|
||||
. Attach a filter function to a kernel function, returning when it should
|
||||
be considered, i.e. appear on the output.
|
||||
|
||||
. Run it system wide, so that any sleep of >= 5 seconds and < than 6
|
||||
seconds gets caught.
|
||||
|
||||
. Ask for callgraphs using DWARF info, so that userspace can be unwound
|
||||
|
||||
. While this is running, run something like "sleep 5s".
|
||||
|
||||
. If we decide to add tv_nsec as well, then it becomes:
|
||||
|
||||
int probe(hrtimer_nanosleep, rqtp->tv_sec rqtp->tv_nsec)(void *ctx, int err, long sec, long nsec)
|
||||
|
||||
I.e. add where it comes from (rqtp->tv_nsec) and where it will be
|
||||
accessible in the function body (nsec)
|
||||
|
||||
# perf trace --no-syscalls -e tools/perf/examples/bpf/5sec.c/call-graph=dwarf/
|
||||
0.000 perf_bpf_probe:func:(ffffffff9811b5f0) tv_sec=5
|
||||
hrtimer_nanosleep ([kernel.kallsyms])
|
||||
__x64_sys_nanosleep ([kernel.kallsyms])
|
||||
do_syscall_64 ([kernel.kallsyms])
|
||||
entry_SYSCALL_64 ([kernel.kallsyms])
|
||||
__GI___nanosleep (/usr/lib64/libc-2.26.so)
|
||||
rpl_nanosleep (/usr/bin/sleep)
|
||||
xnanosleep (/usr/bin/sleep)
|
||||
main (/usr/bin/sleep)
|
||||
__libc_start_main (/usr/lib64/libc-2.26.so)
|
||||
_start (/usr/bin/sleep)
|
||||
^C#
|
||||
|
||||
Copyright (C) 2018 Red Hat, Inc., Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||
*/
|
||||
|
||||
#include <linux/bpf.h>
|
||||
#include <bpf/bpf_helpers.h>
|
||||
|
||||
#define NSEC_PER_SEC 1000000000L
|
||||
|
||||
SEC("hrtimer_nanosleep=hrtimer_nanosleep rqtp")
|
||||
int hrtimer_nanosleep(void *ctx, int err, long long sec)
|
||||
{
|
||||
return sec / NSEC_PER_SEC == 5ULL;
|
||||
}
|
||||
|
||||
char _license[] SEC("license") = "GPL";
|
@ -1,12 +0,0 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
#include <linux/bpf.h>
|
||||
#include <bpf/bpf_helpers.h>
|
||||
|
||||
struct syscall_enter_args;
|
||||
|
||||
SEC("raw_syscalls:sys_enter")
|
||||
int sys_enter(struct syscall_enter_args *args)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
char _license[] SEC("license") = "GPL";
|
@ -1,27 +0,0 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
#include <linux/bpf.h>
|
||||
#include <bpf/bpf_helpers.h>
|
||||
|
||||
struct __bpf_stdout__ {
|
||||
__uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY);
|
||||
__type(key, int);
|
||||
__type(value, __u32);
|
||||
__uint(max_entries, __NR_CPUS__);
|
||||
} __bpf_stdout__ SEC(".maps");
|
||||
|
||||
#define puts(from) \
|
||||
({ const int __len = sizeof(from); \
|
||||
char __from[sizeof(from)] = from; \
|
||||
bpf_perf_event_output(args, &__bpf_stdout__, BPF_F_CURRENT_CPU, \
|
||||
&__from, __len & (sizeof(from) - 1)); })
|
||||
|
||||
struct syscall_enter_args;
|
||||
|
||||
SEC("raw_syscalls:sys_enter")
|
||||
int sys_enter(struct syscall_enter_args *args)
|
||||
{
|
||||
puts("Hello, world\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
char _license[] SEC("license") = "GPL";
|
@ -1,33 +0,0 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Hook into 'openat' syscall entry tracepoint
|
||||
*
|
||||
* Test it with:
|
||||
*
|
||||
* perf trace -e tools/perf/examples/bpf/sys_enter_openat.c cat /etc/passwd > /dev/null
|
||||
*
|
||||
* It'll catch some openat syscalls related to the dynamic linked and
|
||||
* the last one should be the one for '/etc/passwd'.
|
||||
*
|
||||
* The syscall_enter_openat_args can be used to get the syscall fields
|
||||
* and use them for filtering calls, i.e. use in expressions for
|
||||
* the return value.
|
||||
*/
|
||||
|
||||
#include <bpf/bpf.h>
|
||||
|
||||
struct syscall_enter_openat_args {
|
||||
unsigned long long unused;
|
||||
long syscall_nr;
|
||||
long dfd;
|
||||
char *filename_ptr;
|
||||
long flags;
|
||||
long mode;
|
||||
};
|
||||
|
||||
int syscall_enter(openat)(struct syscall_enter_openat_args *args)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
license(GPL);
|
Loading…
x
Reference in New Issue
Block a user