xref: /linux/tools/testing/selftests/bpf/progs/trigger_bench.c (revision 7df4e597ea2cfd677e65730948153d5544986a10)
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 
28c5d420c3SAndrii Nakryiko SEC("tp/syscalls/sys_enter_getpgid")
29c5d420c3SAndrii Nakryiko int bench_trigger_tp(void *ctx)
30c5d420c3SAndrii Nakryiko {
31520fad2eSAndrii Nakryiko 	inc_counter();
32c5d420c3SAndrii Nakryiko 	return 0;
33c5d420c3SAndrii Nakryiko }
34c5d420c3SAndrii Nakryiko 
35c5d420c3SAndrii Nakryiko SEC("raw_tp/sys_enter")
36c5d420c3SAndrii Nakryiko int BPF_PROG(bench_trigger_raw_tp, struct pt_regs *regs, long id)
37c5d420c3SAndrii Nakryiko {
38c5d420c3SAndrii Nakryiko 	if (id == __NR_getpgid)
39520fad2eSAndrii Nakryiko 		inc_counter();
40c5d420c3SAndrii Nakryiko 	return 0;
41c5d420c3SAndrii Nakryiko }
42c5d420c3SAndrii Nakryiko 
43e91d280cSNaveen N. Rao SEC("kprobe/" SYS_PREFIX "sys_getpgid")
44c5d420c3SAndrii Nakryiko int bench_trigger_kprobe(void *ctx)
45c5d420c3SAndrii Nakryiko {
46520fad2eSAndrii Nakryiko 	inc_counter();
47c5d420c3SAndrii Nakryiko 	return 0;
48c5d420c3SAndrii Nakryiko }
49c5d420c3SAndrii Nakryiko 
50365c2b32SAndrii Nakryiko SEC("kretprobe/" SYS_PREFIX "sys_getpgid")
51365c2b32SAndrii Nakryiko int bench_trigger_kretprobe(void *ctx)
52365c2b32SAndrii Nakryiko {
53520fad2eSAndrii Nakryiko 	inc_counter();
54365c2b32SAndrii Nakryiko 	return 0;
55365c2b32SAndrii Nakryiko }
56365c2b32SAndrii Nakryiko 
57379b97bbSJiri Olsa SEC("kprobe.multi/" SYS_PREFIX "sys_getpgid")
58379b97bbSJiri Olsa int bench_trigger_kprobe_multi(void *ctx)
59379b97bbSJiri Olsa {
60520fad2eSAndrii Nakryiko 	inc_counter();
61379b97bbSJiri Olsa 	return 0;
62379b97bbSJiri Olsa }
63379b97bbSJiri Olsa 
64379b97bbSJiri Olsa SEC("kretprobe.multi/" SYS_PREFIX "sys_getpgid")
65379b97bbSJiri Olsa int bench_trigger_kretprobe_multi(void *ctx)
66379b97bbSJiri Olsa {
67520fad2eSAndrii Nakryiko 	inc_counter();
68379b97bbSJiri Olsa 	return 0;
69379b97bbSJiri Olsa }
70379b97bbSJiri Olsa 
71e91d280cSNaveen N. Rao SEC("fentry/" SYS_PREFIX "sys_getpgid")
72c5d420c3SAndrii Nakryiko int bench_trigger_fentry(void *ctx)
73c5d420c3SAndrii Nakryiko {
74520fad2eSAndrii Nakryiko 	inc_counter();
75c5d420c3SAndrii Nakryiko 	return 0;
76c5d420c3SAndrii Nakryiko }
77c5d420c3SAndrii Nakryiko 
78365c2b32SAndrii Nakryiko SEC("fexit/" SYS_PREFIX "sys_getpgid")
79365c2b32SAndrii Nakryiko int bench_trigger_fexit(void *ctx)
80365c2b32SAndrii Nakryiko {
81520fad2eSAndrii Nakryiko 	inc_counter();
82365c2b32SAndrii Nakryiko 	return 0;
83365c2b32SAndrii Nakryiko }
84365c2b32SAndrii Nakryiko 
85e91d280cSNaveen N. Rao SEC("fentry.s/" SYS_PREFIX "sys_getpgid")
86e68a1445SAlexei Starovoitov int bench_trigger_fentry_sleep(void *ctx)
87e68a1445SAlexei Starovoitov {
88520fad2eSAndrii Nakryiko 	inc_counter();
89e68a1445SAlexei Starovoitov 	return 0;
90e68a1445SAlexei Starovoitov }
91e68a1445SAlexei Starovoitov 
92e91d280cSNaveen N. Rao SEC("fmod_ret/" SYS_PREFIX "sys_getpgid")
93c5d420c3SAndrii Nakryiko int bench_trigger_fmodret(void *ctx)
94c5d420c3SAndrii Nakryiko {
95520fad2eSAndrii Nakryiko 	inc_counter();
96c5d420c3SAndrii Nakryiko 	return -22;
97c5d420c3SAndrii Nakryiko }
98d41bc48bSAndrii Nakryiko 
9939f8dc43SAlan Maguire SEC("uprobe")
100d41bc48bSAndrii Nakryiko int bench_trigger_uprobe(void *ctx)
101d41bc48bSAndrii Nakryiko {
102520fad2eSAndrii Nakryiko 	inc_counter();
103d41bc48bSAndrii Nakryiko 	return 0;
104d41bc48bSAndrii Nakryiko }
105*7df4e597SAndrii Nakryiko 
106*7df4e597SAndrii Nakryiko const volatile int batch_iters = 0;
107*7df4e597SAndrii Nakryiko 
108*7df4e597SAndrii Nakryiko SEC("raw_tp")
109*7df4e597SAndrii Nakryiko int trigger_count(void *ctx)
110*7df4e597SAndrii Nakryiko {
111*7df4e597SAndrii Nakryiko 	int i;
112*7df4e597SAndrii Nakryiko 
113*7df4e597SAndrii Nakryiko 	for (i = 0; i < batch_iters; i++)
114*7df4e597SAndrii Nakryiko 		inc_counter();
115*7df4e597SAndrii Nakryiko 
116*7df4e597SAndrii Nakryiko 	return 0;
117*7df4e597SAndrii Nakryiko }
118*7df4e597SAndrii Nakryiko 
119*7df4e597SAndrii Nakryiko SEC("raw_tp")
120*7df4e597SAndrii Nakryiko int trigger_driver(void *ctx)
121*7df4e597SAndrii Nakryiko {
122*7df4e597SAndrii Nakryiko 	int i;
123*7df4e597SAndrii Nakryiko 
124*7df4e597SAndrii Nakryiko 	for (i = 0; i < batch_iters; i++)
125*7df4e597SAndrii Nakryiko 		(void)bpf_get_numa_node_id(); /* attach point for benchmarking */
126*7df4e597SAndrii Nakryiko 
127*7df4e597SAndrii Nakryiko 	return 0;
128*7df4e597SAndrii Nakryiko }
129*7df4e597SAndrii Nakryiko 
130*7df4e597SAndrii Nakryiko SEC("kprobe/bpf_get_numa_node_id")
131*7df4e597SAndrii Nakryiko int bench_trigger_kprobe_batch(void *ctx)
132*7df4e597SAndrii Nakryiko {
133*7df4e597SAndrii Nakryiko 	inc_counter();
134*7df4e597SAndrii Nakryiko 	return 0;
135*7df4e597SAndrii Nakryiko }
136*7df4e597SAndrii Nakryiko 
137*7df4e597SAndrii Nakryiko SEC("kretprobe/bpf_get_numa_node_id")
138*7df4e597SAndrii Nakryiko int bench_trigger_kretprobe_batch(void *ctx)
139*7df4e597SAndrii Nakryiko {
140*7df4e597SAndrii Nakryiko 	inc_counter();
141*7df4e597SAndrii Nakryiko 	return 0;
142*7df4e597SAndrii Nakryiko }
143*7df4e597SAndrii Nakryiko 
144*7df4e597SAndrii Nakryiko SEC("kprobe.multi/bpf_get_numa_node_id")
145*7df4e597SAndrii Nakryiko int bench_trigger_kprobe_multi_batch(void *ctx)
146*7df4e597SAndrii Nakryiko {
147*7df4e597SAndrii Nakryiko 	inc_counter();
148*7df4e597SAndrii Nakryiko 	return 0;
149*7df4e597SAndrii Nakryiko }
150*7df4e597SAndrii Nakryiko 
151*7df4e597SAndrii Nakryiko SEC("kretprobe.multi/bpf_get_numa_node_id")
152*7df4e597SAndrii Nakryiko int bench_trigger_kretprobe_multi_batch(void *ctx)
153*7df4e597SAndrii Nakryiko {
154*7df4e597SAndrii Nakryiko 	inc_counter();
155*7df4e597SAndrii Nakryiko 	return 0;
156*7df4e597SAndrii Nakryiko }
157*7df4e597SAndrii Nakryiko 
158*7df4e597SAndrii Nakryiko SEC("fentry/bpf_get_numa_node_id")
159*7df4e597SAndrii Nakryiko int bench_trigger_fentry_batch(void *ctx)
160*7df4e597SAndrii Nakryiko {
161*7df4e597SAndrii Nakryiko 	inc_counter();
162*7df4e597SAndrii Nakryiko 	return 0;
163*7df4e597SAndrii Nakryiko }
164*7df4e597SAndrii Nakryiko 
165*7df4e597SAndrii Nakryiko SEC("fexit/bpf_get_numa_node_id")
166*7df4e597SAndrii Nakryiko int bench_trigger_fexit_batch(void *ctx)
167*7df4e597SAndrii Nakryiko {
168*7df4e597SAndrii Nakryiko 	inc_counter();
169*7df4e597SAndrii Nakryiko 	return 0;
170*7df4e597SAndrii Nakryiko }
171