mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-06 09:04:22 -04:00
rtla/tests: Test BPF action program
Add a test that implements a BPF program writing to a test map, which is attached to RTLA via --bpf-action to be executed on theshold overflow. A combination of --on-threshold shell with bpftool (which is always present if BPF support is enabled) is used to check whether the BPF program has executed successfully. Suggested-by: Crystal Wood <crwood@redhat.com> Link: https://lore.kernel.org/r/20251126144205.331954-5-tglozar@redhat.com Signed-off-by: Tomas Glozar <tglozar@redhat.com>
This commit is contained in:
@@ -76,12 +76,18 @@ src/timerlat.skel.h: src/timerlat.bpf.o
|
||||
|
||||
example/timerlat_bpf_action.o: example/timerlat_bpf_action.c
|
||||
$(QUIET_CLANG)$(CLANG) -g -O2 -target bpf -c $(filter %.c,$^) -o $@
|
||||
|
||||
tests/bpf/bpf_action_map.o: tests/bpf/bpf_action_map.c
|
||||
$(QUIET_CLANG)$(CLANG) -g -O2 -target bpf -c $(filter %.c,$^) -o $@
|
||||
else
|
||||
src/timerlat.skel.h:
|
||||
$(Q)echo '/* BPF skeleton is disabled */' > src/timerlat.skel.h
|
||||
|
||||
example/timerlat_bpf_action.o: example/timerlat_bpf_action.c
|
||||
$(Q)echo "BPF skeleton support is disabled, skipping example/timerlat_bpf_action.o"
|
||||
|
||||
tests/bpf/bpf_action_map.o: tests/bpf/bpf_action_map.c
|
||||
$(Q)echo "BPF skeleton support is disabled, skipping tests/bpf/bpf_action_map.o"
|
||||
endif
|
||||
|
||||
$(RTLA): $(RTLA_IN)
|
||||
@@ -103,7 +109,7 @@ clean: doc_clean fixdep-clean
|
||||
$(Q)rm -f rtla rtla-static fixdep FEATURE-DUMP rtla-*
|
||||
$(Q)rm -rf feature
|
||||
$(Q)rm -f src/timerlat.bpf.o src/timerlat.skel.h example/timerlat_bpf_action.o
|
||||
check: $(RTLA)
|
||||
RTLA=$(RTLA) prove -o -f tests/
|
||||
check: $(RTLA) tests/bpf/bpf_action_map.o
|
||||
RTLA=$(RTLA) BPFTOOL=$(SYSTEM_BPFTOOL) prove -o -f tests/
|
||||
examples: example/timerlat_bpf_action.o
|
||||
.PHONY: FORCE clean check
|
||||
|
||||
25
tools/tracing/rtla/tests/bpf/bpf_action_map.c
Normal file
25
tools/tracing/rtla/tests/bpf/bpf_action_map.c
Normal file
@@ -0,0 +1,25 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
#include <linux/bpf.h>
|
||||
#include <bpf/bpf_tracing.h>
|
||||
|
||||
char LICENSE[] SEC("license") = "GPL";
|
||||
|
||||
struct {
|
||||
__uint(type, BPF_MAP_TYPE_ARRAY);
|
||||
__uint(max_entries, 1);
|
||||
__type(key, unsigned int);
|
||||
__type(value, unsigned long long);
|
||||
} rtla_test_map SEC(".maps");
|
||||
|
||||
struct trace_event_raw_timerlat_sample;
|
||||
|
||||
SEC("tp/timerlat_action")
|
||||
int action_handler(struct trace_event_raw_timerlat_sample *tp_args)
|
||||
{
|
||||
unsigned int key = 0;
|
||||
unsigned long long value = 42;
|
||||
|
||||
bpf_map_update_elem(&rtla_test_map, &key, &value, BPF_ANY);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -67,6 +67,21 @@ check "hist with trace output at end" \
|
||||
"timerlat hist -d 1s --on-end trace" 0 "^ Saving trace to timerlat_trace.txt$"
|
||||
check "top with trace output at end" \
|
||||
"timerlat top -d 1s --on-end trace" 0 "^ Saving trace to timerlat_trace.txt$"
|
||||
|
||||
# BPF action program tests
|
||||
if [ "$option" -eq 0 ]
|
||||
then
|
||||
# Test BPF action program properly in BPF mode
|
||||
[ -z "$BPFTOOL" ] && BPFTOOL=bpftool
|
||||
check "hist with BPF action program (BPF mode)" \
|
||||
"timerlat hist -T 2 --bpf-action tests/bpf/bpf_action_map.o --on-threshold shell,command='$BPFTOOL map dump name rtla_test_map'" \
|
||||
2 '"value": 42'
|
||||
else
|
||||
# Test BPF action program failure in non-BPF mode
|
||||
check "hist with BPF action program (non-BPF mode)" \
|
||||
"timerlat hist -T 2 --bpf-action tests/bpf/bpf_action_map.o" \
|
||||
1 "BPF actions are not supported in tracefs-only mode"
|
||||
fi
|
||||
done
|
||||
|
||||
test_end
|
||||
|
||||
Reference in New Issue
Block a user