xref: /linux/tools/testing/selftests/bpf/progs/trigger_bench.c (revision 208c4391204d25d9178fbc87f216daffad00cd15)
1c5d420c3SAndrii Nakryiko // SPDX-License-Identifier: GPL-2.0
2c5d420c3SAndrii Nakryiko // Copyright (c) 2020 Facebook
3c5d420c3SAndrii Nakryiko #include <linux/bpf.h>
4c5d420c3SAndrii Nakryiko #include <asm/unistd.h>
5c5d420c3SAndrii Nakryiko #include <bpf/bpf_helpers.h>
6c5d420c3SAndrii Nakryiko #include <bpf/bpf_tracing.h>
7e91d280cSNaveen N. Rao #include "bpf_misc.h"
8c5d420c3SAndrii Nakryiko 
9c5d420c3SAndrii Nakryiko char _license[] SEC("license") = "GPL";
10c5d420c3SAndrii Nakryiko 
11520fad2eSAndrii Nakryiko #define CPU_MASK 255
12520fad2eSAndrii Nakryiko #define MAX_CPUS (CPU_MASK + 1) /* should match MAX_BUCKETS in benchs/bench_trigger.c */
13520fad2eSAndrii Nakryiko 
14520fad2eSAndrii Nakryiko /* matches struct counter in bench.h */
15520fad2eSAndrii Nakryiko struct counter {
16520fad2eSAndrii Nakryiko 	long value;
17520fad2eSAndrii Nakryiko } __attribute__((aligned(128)));
18520fad2eSAndrii Nakryiko 
19520fad2eSAndrii Nakryiko struct counter hits[MAX_CPUS];
20520fad2eSAndrii Nakryiko 
21520fad2eSAndrii Nakryiko static __always_inline void inc_counter(void)
22520fad2eSAndrii Nakryiko {
23520fad2eSAndrii Nakryiko 	int cpu = bpf_get_smp_processor_id();
24520fad2eSAndrii Nakryiko 
25520fad2eSAndrii Nakryiko 	__sync_add_and_fetch(&hits[cpu & CPU_MASK].value, 1);
26520fad2eSAndrii Nakryiko }
27c5d420c3SAndrii Nakryiko 
2839f8dc43SAlan Maguire SEC("uprobe")
29d41bc48bSAndrii Nakryiko int bench_trigger_uprobe(void *ctx)
30d41bc48bSAndrii Nakryiko {
31520fad2eSAndrii Nakryiko 	inc_counter();
32d41bc48bSAndrii Nakryiko 	return 0;
33d41bc48bSAndrii Nakryiko }
347df4e597SAndrii Nakryiko 
357df4e597SAndrii Nakryiko const volatile int batch_iters = 0;
367df4e597SAndrii Nakryiko 
377df4e597SAndrii Nakryiko SEC("raw_tp")
387df4e597SAndrii Nakryiko int trigger_count(void *ctx)
397df4e597SAndrii Nakryiko {
407df4e597SAndrii Nakryiko 	int i;
417df4e597SAndrii Nakryiko 
427df4e597SAndrii Nakryiko 	for (i = 0; i < batch_iters; i++)
437df4e597SAndrii Nakryiko 		inc_counter();
447df4e597SAndrii Nakryiko 
457df4e597SAndrii Nakryiko 	return 0;
467df4e597SAndrii Nakryiko }
477df4e597SAndrii Nakryiko 
487df4e597SAndrii Nakryiko SEC("raw_tp")
497df4e597SAndrii Nakryiko int trigger_driver(void *ctx)
507df4e597SAndrii Nakryiko {
517df4e597SAndrii Nakryiko 	int i;
527df4e597SAndrii Nakryiko 
537df4e597SAndrii Nakryiko 	for (i = 0; i < batch_iters; i++)
547df4e597SAndrii Nakryiko 		(void)bpf_get_numa_node_id(); /* attach point for benchmarking */
557df4e597SAndrii Nakryiko 
567df4e597SAndrii Nakryiko 	return 0;
577df4e597SAndrii Nakryiko }
587df4e597SAndrii Nakryiko 
597df4e597SAndrii Nakryiko SEC("kprobe/bpf_get_numa_node_id")
60*208c4391SAndrii Nakryiko int bench_trigger_kprobe(void *ctx)
617df4e597SAndrii Nakryiko {
627df4e597SAndrii Nakryiko 	inc_counter();
637df4e597SAndrii Nakryiko 	return 0;
647df4e597SAndrii Nakryiko }
657df4e597SAndrii Nakryiko 
667df4e597SAndrii Nakryiko SEC("kretprobe/bpf_get_numa_node_id")
67*208c4391SAndrii Nakryiko int bench_trigger_kretprobe(void *ctx)
687df4e597SAndrii Nakryiko {
697df4e597SAndrii Nakryiko 	inc_counter();
707df4e597SAndrii Nakryiko 	return 0;
717df4e597SAndrii Nakryiko }
727df4e597SAndrii Nakryiko 
737df4e597SAndrii Nakryiko SEC("kprobe.multi/bpf_get_numa_node_id")
74*208c4391SAndrii Nakryiko int bench_trigger_kprobe_multi(void *ctx)
757df4e597SAndrii Nakryiko {
767df4e597SAndrii Nakryiko 	inc_counter();
777df4e597SAndrii Nakryiko 	return 0;
787df4e597SAndrii Nakryiko }
797df4e597SAndrii Nakryiko 
807df4e597SAndrii Nakryiko SEC("kretprobe.multi/bpf_get_numa_node_id")
81*208c4391SAndrii Nakryiko int bench_trigger_kretprobe_multi(void *ctx)
827df4e597SAndrii Nakryiko {
837df4e597SAndrii Nakryiko 	inc_counter();
847df4e597SAndrii Nakryiko 	return 0;
857df4e597SAndrii Nakryiko }
867df4e597SAndrii Nakryiko 
877df4e597SAndrii Nakryiko SEC("fentry/bpf_get_numa_node_id")
88*208c4391SAndrii Nakryiko int bench_trigger_fentry(void *ctx)
897df4e597SAndrii Nakryiko {
907df4e597SAndrii Nakryiko 	inc_counter();
917df4e597SAndrii Nakryiko 	return 0;
927df4e597SAndrii Nakryiko }
937df4e597SAndrii Nakryiko 
947df4e597SAndrii Nakryiko SEC("fexit/bpf_get_numa_node_id")
95*208c4391SAndrii Nakryiko int bench_trigger_fexit(void *ctx)
967df4e597SAndrii Nakryiko {
977df4e597SAndrii Nakryiko 	inc_counter();
987df4e597SAndrii Nakryiko 	return 0;
997df4e597SAndrii Nakryiko }
100