samples/bpf: replace broken overhead microbenchmark with fib_table_lookup
authorDaniel T. Lee <danieltimlee@gmail.com>
Sun, 15 Jan 2023 07:16:08 +0000 (16:16 +0900)
committerAlexei Starovoitov <ast@kernel.org>
Sun, 15 Jan 2023 21:32:45 +0000 (13:32 -0800)
commit58e975d014e1e31bd1586be7d2be6d61bd3e3ada
tree6dddedfb3da5bfcd686fe1463f69e12e93469e68
parent31b12a4159fae818ac1043539ec9656da57b2e2c
samples/bpf: replace broken overhead microbenchmark with fib_table_lookup

The test_overhead bpf program is designed to compare performance
between tracepoint and kprobe. Initially it used task_rename and
urandom_read tracepoint.

However, commit 14c174633f34 ("random: remove unused tracepoints")
removed urandom_read tracepoint, and for this reason the test_overhead
got broken.

This commit introduces new microbenchmark using fib_table_lookup.
This microbenchmark sends UDP packets to localhost in order to invoke
fib_table_lookup.

In a nutshell:
fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
addr.sin_addr.s_addr = inet_addr(DUMMY_IP);
addr.sin_port = htons(DUMMY_PORT);
for() {
    sendto(fd, buf, strlen(buf), 0,
            (struct sockaddr *)&addr, sizeof(addr));
}

on 4 cpus in parallel:
                                            lookup per sec
base (no tracepoints, no kprobes)               381k
with kprobe at fib_table_lookup()               325k
with tracepoint at fib:fib_table_lookup         330k
with raw_tracepoint at fib:fib_table_lookup     365k

Fixes: 14c174633f34 ("random: remove unused tracepoints")

Signed-off-by: Daniel T. Lee <danieltimlee@gmail.com>
Link: https://lore.kernel.org/r/20230115071613.125791-6-danieltimlee@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
samples/bpf/test_overhead_kprobe_kern.c
samples/bpf/test_overhead_raw_tp_kern.c
samples/bpf/test_overhead_tp_kern.c
samples/bpf/test_overhead_user.c