netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [bpf-next 0/3] samples/bpf: Remove obsolete tracing-related tests
@ 2024-08-12  0:45 Daniel T. Lee
  2024-08-12  0:45 ` [bpf-next 1/3] selftests/bpf: migrate tracepoint overhead test to prog_tests Daniel T. Lee
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Daniel T. Lee @ 2024-08-12  0:45 UTC (permalink / raw)
  To: Daniel Borkmann, Alexei Starovoitov, Andrii Nakryiko
  Cc: Martin KaFai Lau, Eduard Zingerman, Song Liu, Yonghong Song,
	John Fastabend, KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa,
	Mykola Lysenko, Shuah Khan, Yipeng Zou, linux-kselftest, bpf,
	netdev

The BPF tracing infrastructure has undergone significant evolution,
leading to the introduction of more robust and efficient APIs.
However, some of the existing tests in the samples/bpf directory have
not kept pace with these developments. These outdated tests not only
create confusion among users but also increase maintenance overhead.

For starter, this patchset focuses on cleaning up outdated 'tracing'
related tests within the BPF testing framework. The goal is to
modernize and streamline selftests by removing obsolete tests and
migrating necessaries to more appropriate locations.

Daniel T. Lee (3):
  selftests/bpf: migrate tracepoint overhead test to prog_tests
  selftests/bpf: add rename tracepoint bench test
  samples/bpf: remove obsolete tracing related tests

 samples/bpf/Makefile                          |  12 -
 samples/bpf/test_overhead_kprobe.bpf.c        |  41 ----
 samples/bpf/test_overhead_raw_tp.bpf.c        |  17 --
 samples/bpf/test_overhead_tp.bpf.c            |  23 --
 samples/bpf/test_overhead_user.c              | 225 ------------------
 samples/bpf/test_override_return.sh           |  16 --
 samples/bpf/test_probe_write_user.bpf.c       |  52 ----
 samples/bpf/test_probe_write_user_user.c      | 108 ---------
 samples/bpf/tracex7.bpf.c                     |  15 --
 samples/bpf/tracex7_user.c                    |  56 -----
 tools/testing/selftests/bpf/bench.c           |   2 +
 .../selftests/bpf/benchs/bench_rename.c       |  16 ++
 .../selftests/bpf/benchs/run_bench_rename.sh  |   2 +-
 .../selftests/bpf/prog_tests/test_overhead.c  |  14 +-
 .../selftests/bpf/progs/test_overhead.c       |  11 +-
 15 files changed, 39 insertions(+), 571 deletions(-)
 delete mode 100644 samples/bpf/test_overhead_kprobe.bpf.c
 delete mode 100644 samples/bpf/test_overhead_raw_tp.bpf.c
 delete mode 100644 samples/bpf/test_overhead_tp.bpf.c
 delete mode 100644 samples/bpf/test_overhead_user.c
 delete mode 100755 samples/bpf/test_override_return.sh
 delete mode 100644 samples/bpf/test_probe_write_user.bpf.c
 delete mode 100644 samples/bpf/test_probe_write_user_user.c
 delete mode 100644 samples/bpf/tracex7.bpf.c
 delete mode 100644 samples/bpf/tracex7_user.c

-- 
2.43.0


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [bpf-next 1/3] selftests/bpf: migrate tracepoint overhead test to prog_tests
  2024-08-12  0:45 [bpf-next 0/3] samples/bpf: Remove obsolete tracing-related tests Daniel T. Lee
@ 2024-08-12  0:45 ` Daniel T. Lee
  2024-08-12 11:11   ` Jiri Olsa
  2024-08-12  0:45 ` [bpf-next 2/3] selftests/bpf: add rename tracepoint bench test Daniel T. Lee
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 8+ messages in thread
From: Daniel T. Lee @ 2024-08-12  0:45 UTC (permalink / raw)
  To: Daniel Borkmann, Alexei Starovoitov, Andrii Nakryiko
  Cc: Martin KaFai Lau, Eduard Zingerman, Song Liu, Yonghong Song,
	John Fastabend, KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa,
	Mykola Lysenko, Shuah Khan, Yipeng Zou, linux-kselftest, bpf,
	netdev

As part of the cleanup of outdated test cases in sample/bpf, this
commit migrates test for tracepoint overhead to selftest prog_tests.

The test_overhead in selftest/bpf focus on the 'raw_tracepoint' only,
and do not cover tracepoint-specific tests. To support this, this
commit utilize 'vmlinux.h', and additional test program for tracepoint
has been added.

Signed-off-by: Daniel T. Lee <danieltimlee@gmail.com>
---
 .../selftests/bpf/prog_tests/test_overhead.c       | 14 +++++++++++++-
 tools/testing/selftests/bpf/progs/test_overhead.c  | 11 +++++++----
 2 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/tools/testing/selftests/bpf/prog_tests/test_overhead.c b/tools/testing/selftests/bpf/prog_tests/test_overhead.c
index f27013e38d03..06153602a859 100644
--- a/tools/testing/selftests/bpf/prog_tests/test_overhead.c
+++ b/tools/testing/selftests/bpf/prog_tests/test_overhead.c
@@ -61,9 +61,10 @@ void test_test_overhead(void)
 	const char *raw_tp_name = "prog3";
 	const char *fentry_name = "prog4";
 	const char *fexit_name = "prog5";
+	const char *tp_name = "prog6";
 	const char *kprobe_func = "__set_task_comm";
 	struct bpf_program *kprobe_prog, *kretprobe_prog, *raw_tp_prog;
-	struct bpf_program *fentry_prog, *fexit_prog;
+	struct bpf_program *fentry_prog, *fexit_prog, *tp_prog;
 	struct bpf_object *obj;
 	struct bpf_link *link;
 	int err, duration = 0;
@@ -96,6 +97,10 @@ void test_test_overhead(void)
 	if (CHECK(!fexit_prog, "find_probe",
 		  "prog '%s' not found\n", fexit_name))
 		goto cleanup;
+	tp_prog = bpf_object__find_program_by_name(obj, tp_name);
+	if (CHECK(!tp_prog, "find_probe",
+		  "prog '%s' not found\n", tp_name))
+		goto cleanup;
 	err = bpf_object__load(obj);
 	if (CHECK(err, "obj_load", "err %d\n", err))
 		goto cleanup;
@@ -142,6 +147,13 @@ void test_test_overhead(void)
 	test_run("fexit");
 	bpf_link__destroy(link);
 
+	/* attach tp */
+	link = bpf_program__attach_tracepoint(tp_prog, "task", "task_rename");
+	if (!ASSERT_OK_PTR(link, "attach_tp"))
+		goto cleanup;
+	test_run("tp");
+	bpf_link__destroy(link);
+
 cleanup:
 	prctl(PR_SET_NAME, comm, 0L, 0L, 0L);
 	bpf_object__close(obj);
diff --git a/tools/testing/selftests/bpf/progs/test_overhead.c b/tools/testing/selftests/bpf/progs/test_overhead.c
index abb7344b531f..6dc1f68180e0 100644
--- a/tools/testing/selftests/bpf/progs/test_overhead.c
+++ b/tools/testing/selftests/bpf/progs/test_overhead.c
@@ -1,9 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /* Copyright (c) 2019 Facebook */
-#include <stdbool.h>
-#include <stddef.h>
-#include <linux/bpf.h>
-#include <linux/ptrace.h>
+#include "vmlinux.h"
 #include <bpf/bpf_helpers.h>
 #include <bpf/bpf_tracing.h>
 
@@ -39,4 +36,10 @@ int BPF_PROG(prog5, struct task_struct *tsk, const char *buf, bool exec)
 	return 0;
 }
 
+SEC("tracepoint/task/task_rename")
+int prog6(struct trace_event_raw_task_rename *ctx)
+{
+	return 0;
+}
+
 char _license[] SEC("license") = "GPL";
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [bpf-next 2/3] selftests/bpf: add rename tracepoint bench test
  2024-08-12  0:45 [bpf-next 0/3] samples/bpf: Remove obsolete tracing-related tests Daniel T. Lee
  2024-08-12  0:45 ` [bpf-next 1/3] selftests/bpf: migrate tracepoint overhead test to prog_tests Daniel T. Lee
@ 2024-08-12  0:45 ` Daniel T. Lee
  2024-08-12 11:12   ` Jiri Olsa
  2024-08-12  0:45 ` [bpf-next 3/3] samples/bpf: remove obsolete tracing related tests Daniel T. Lee
  2024-08-12 21:17 ` [bpf-next 0/3] samples/bpf: Remove obsolete tracing-related tests Andrii Nakryiko
  3 siblings, 1 reply; 8+ messages in thread
From: Daniel T. Lee @ 2024-08-12  0:45 UTC (permalink / raw)
  To: Daniel Borkmann, Alexei Starovoitov, Andrii Nakryiko
  Cc: Martin KaFai Lau, Eduard Zingerman, Song Liu, Yonghong Song,
	John Fastabend, KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa,
	Mykola Lysenko, Shuah Khan, Yipeng Zou, linux-kselftest, bpf,
	netdev

In addition to migrating the tracepoint overhead test from sample/bpf
to selftest/bpf, this commit extends benchmarking test with rename
task.

Since previous commit migrated tracepoint based on rename task, this
commit updates the benchmarking program to utilize the newly added
'rename-tp'.

Signed-off-by: Daniel T. Lee <danieltimlee@gmail.com>
---
 tools/testing/selftests/bpf/bench.c              |  2 ++
 .../testing/selftests/bpf/benchs/bench_rename.c  | 16 ++++++++++++++++
 .../selftests/bpf/benchs/run_bench_rename.sh     |  2 +-
 3 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/tools/testing/selftests/bpf/bench.c b/tools/testing/selftests/bpf/bench.c
index 627b74ae041b..e3d17b9b78cc 100644
--- a/tools/testing/selftests/bpf/bench.c
+++ b/tools/testing/selftests/bpf/bench.c
@@ -495,6 +495,7 @@ extern const struct bench bench_rename_kretprobe;
 extern const struct bench bench_rename_rawtp;
 extern const struct bench bench_rename_fentry;
 extern const struct bench bench_rename_fexit;
+extern const struct bench bench_rename_tp;
 
 /* pure counting benchmarks to establish theoretical lmits */
 extern const struct bench bench_trig_usermode_count;
@@ -552,6 +553,7 @@ static const struct bench *benchs[] = {
 	&bench_rename_rawtp,
 	&bench_rename_fentry,
 	&bench_rename_fexit,
+	&bench_rename_tp,
 	/* pure counting benchmarks for establishing theoretical limits */
 	&bench_trig_usermode_count,
 	&bench_trig_kernel_count,
diff --git a/tools/testing/selftests/bpf/benchs/bench_rename.c b/tools/testing/selftests/bpf/benchs/bench_rename.c
index bf66893c7a33..48cd9556ddf8 100644
--- a/tools/testing/selftests/bpf/benchs/bench_rename.c
+++ b/tools/testing/selftests/bpf/benchs/bench_rename.c
@@ -106,6 +106,12 @@ static void setup_fexit(void)
 	attach_bpf(ctx.skel->progs.prog5);
 }
 
+static void setup_tp(void)
+{
+	setup_ctx();
+	attach_bpf(ctx.skel->progs.prog6);
+}
+
 const struct bench bench_rename_base = {
 	.name = "rename-base",
 	.validate = validate,
@@ -136,6 +142,16 @@ const struct bench bench_rename_kretprobe = {
 	.report_final = hits_drops_report_final,
 };
 
+const struct bench bench_rename_tp = {
+	.name = "rename-tp",
+	.validate = validate,
+	.setup = setup_tp,
+	.producer_thread = producer,
+	.measure = measure,
+	.report_progress = hits_drops_report_progress,
+	.report_final = hits_drops_report_final,
+};
+
 const struct bench bench_rename_rawtp = {
 	.name = "rename-rawtp",
 	.validate = validate,
diff --git a/tools/testing/selftests/bpf/benchs/run_bench_rename.sh b/tools/testing/selftests/bpf/benchs/run_bench_rename.sh
index 7b281dbe4165..131e5e6ea8ec 100755
--- a/tools/testing/selftests/bpf/benchs/run_bench_rename.sh
+++ b/tools/testing/selftests/bpf/benchs/run_bench_rename.sh
@@ -2,7 +2,7 @@
 
 set -eufo pipefail
 
-for i in base kprobe kretprobe rawtp fentry fexit
+for i in base kprobe kretprobe rawtp fentry fexit tp
 do
 	summary=$(sudo ./bench -w2 -d5 -a rename-$i | tail -n1 | cut -d'(' -f1 | cut -d' ' -f3-)
 	printf "%-10s: %s\n" $i "$summary"
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [bpf-next 3/3] samples/bpf: remove obsolete tracing related tests
  2024-08-12  0:45 [bpf-next 0/3] samples/bpf: Remove obsolete tracing-related tests Daniel T. Lee
  2024-08-12  0:45 ` [bpf-next 1/3] selftests/bpf: migrate tracepoint overhead test to prog_tests Daniel T. Lee
  2024-08-12  0:45 ` [bpf-next 2/3] selftests/bpf: add rename tracepoint bench test Daniel T. Lee
@ 2024-08-12  0:45 ` Daniel T. Lee
  2024-08-12 21:17 ` [bpf-next 0/3] samples/bpf: Remove obsolete tracing-related tests Andrii Nakryiko
  3 siblings, 0 replies; 8+ messages in thread
From: Daniel T. Lee @ 2024-08-12  0:45 UTC (permalink / raw)
  To: Daniel Borkmann, Alexei Starovoitov, Andrii Nakryiko
  Cc: Martin KaFai Lau, Eduard Zingerman, Song Liu, Yonghong Song,
	John Fastabend, KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa,
	Mykola Lysenko, Shuah Khan, Yipeng Zou, linux-kselftest, bpf,
	netdev

The samples/bpf has become outdated and often does not follow up with
the latest. This commit removes obsolete tracing-related tests.

Specifically, 'test_overhead' is migrated from previous two commits,
and 'test_override_return', 'test_probe_write_user' tests are obsolete
since they have been replaced by kprobe_multi_override and probe_user
from selftests/bpf respectively.

This cleanup will help to streamline the testing framework by removing
redundant tests.

Signed-off-by: Daniel T. Lee <danieltimlee@gmail.com>
---
 samples/bpf/Makefile                     |  12 --
 samples/bpf/test_overhead_kprobe.bpf.c   |  41 -----
 samples/bpf/test_overhead_raw_tp.bpf.c   |  17 --
 samples/bpf/test_overhead_tp.bpf.c       |  23 ---
 samples/bpf/test_overhead_user.c         | 225 -----------------------
 samples/bpf/test_override_return.sh      |  16 --
 samples/bpf/test_probe_write_user.bpf.c  |  52 ------
 samples/bpf/test_probe_write_user_user.c | 108 -----------
 samples/bpf/tracex7.bpf.c                |  15 --
 samples/bpf/tracex7_user.c               |  56 ------
 10 files changed, 565 deletions(-)
 delete mode 100644 samples/bpf/test_overhead_kprobe.bpf.c
 delete mode 100644 samples/bpf/test_overhead_raw_tp.bpf.c
 delete mode 100644 samples/bpf/test_overhead_tp.bpf.c
 delete mode 100644 samples/bpf/test_overhead_user.c
 delete mode 100755 samples/bpf/test_override_return.sh
 delete mode 100644 samples/bpf/test_probe_write_user.bpf.c
 delete mode 100644 samples/bpf/test_probe_write_user_user.c
 delete mode 100644 samples/bpf/tracex7.bpf.c
 delete mode 100644 samples/bpf/tracex7_user.c

diff --git a/samples/bpf/Makefile b/samples/bpf/Makefile
index 3e003dd6bea0..68cc86c1288a 100644
--- a/samples/bpf/Makefile
+++ b/samples/bpf/Makefile
@@ -18,14 +18,11 @@ tprogs-y += tracex3
 tprogs-y += tracex4
 tprogs-y += tracex5
 tprogs-y += tracex6
-tprogs-y += tracex7
-tprogs-y += test_probe_write_user
 tprogs-y += trace_output
 tprogs-y += lathist
 tprogs-y += offwaketime
 tprogs-y += spintest
 tprogs-y += map_perf_test
-tprogs-y += test_overhead
 tprogs-y += test_cgrp2_array_pin
 tprogs-y += test_cgrp2_attach
 tprogs-y += test_cgrp2_sock
@@ -68,14 +65,11 @@ tracex3-objs := tracex3_user.o
 tracex4-objs := tracex4_user.o
 tracex5-objs := tracex5_user.o $(TRACE_HELPERS)
 tracex6-objs := tracex6_user.o
-tracex7-objs := tracex7_user.o
-test_probe_write_user-objs := test_probe_write_user_user.o
 trace_output-objs := trace_output_user.o
 lathist-objs := lathist_user.o
 offwaketime-objs := offwaketime_user.o $(TRACE_HELPERS)
 spintest-objs := spintest_user.o $(TRACE_HELPERS)
 map_perf_test-objs := map_perf_test_user.o
-test_overhead-objs := test_overhead_user.o
 test_cgrp2_array_pin-objs := test_cgrp2_array_pin.o
 test_cgrp2_attach-objs := test_cgrp2_attach.o
 test_cgrp2_sock-objs := test_cgrp2_sock.o
@@ -110,9 +104,7 @@ always-y += tracex3.bpf.o
 always-y += tracex4.bpf.o
 always-y += tracex5.bpf.o
 always-y += tracex6.bpf.o
-always-y += tracex7.bpf.o
 always-y += sock_flags.bpf.o
-always-y += test_probe_write_user.bpf.o
 always-y += trace_output.bpf.o
 always-y += tcbpf1_kern.o
 always-y += tc_l2_redirect_kern.o
@@ -120,9 +112,6 @@ always-y += lathist_kern.o
 always-y += offwaketime.bpf.o
 always-y += spintest.bpf.o
 always-y += map_perf_test.bpf.o
-always-y += test_overhead_tp.bpf.o
-always-y += test_overhead_raw_tp.bpf.o
-always-y += test_overhead_kprobe.bpf.o
 always-y += parse_varlen.o parse_simple.o parse_ldabs.o
 always-y += test_cgrp2_tc.bpf.o
 always-y += test_current_task_under_cgroup.bpf.o
@@ -194,7 +183,6 @@ TPROGLDLIBS_xdp_router_ipv4	+= -lm -pthread
 TPROGLDLIBS_tracex4		+= -lrt
 TPROGLDLIBS_trace_output	+= -lrt
 TPROGLDLIBS_map_perf_test	+= -lrt
-TPROGLDLIBS_test_overhead	+= -lrt
 
 # Allows pointing LLC/CLANG to a LLVM backend with bpf support, redefine on cmdline:
 # make M=samples/bpf LLC=~/git/llvm-project/llvm/build/bin/llc CLANG=~/git/llvm-project/llvm/build/bin/clang
diff --git a/samples/bpf/test_overhead_kprobe.bpf.c b/samples/bpf/test_overhead_kprobe.bpf.c
deleted file mode 100644
index 668cf5259c60..000000000000
--- a/samples/bpf/test_overhead_kprobe.bpf.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright (c) 2016 Facebook
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- */
-#include "vmlinux.h"
-#include <linux/version.h>
-#include <bpf/bpf_helpers.h>
-#include <bpf/bpf_tracing.h>
-#include <bpf/bpf_core_read.h>
-
-SEC("kprobe/__set_task_comm")
-int prog(struct pt_regs *ctx)
-{
-	struct signal_struct *signal;
-	struct task_struct *tsk;
-	char oldcomm[TASK_COMM_LEN] = {};
-	char newcomm[TASK_COMM_LEN] = {};
-	u16 oom_score_adj;
-	u32 pid;
-
-	tsk = (void *)PT_REGS_PARM1_CORE(ctx);
-
-	pid = BPF_CORE_READ(tsk, pid);
-	bpf_core_read_str(oldcomm, sizeof(oldcomm), &tsk->comm);
-	bpf_core_read_str(newcomm, sizeof(newcomm),
-				  (void *)PT_REGS_PARM2(ctx));
-	signal = BPF_CORE_READ(tsk, signal);
-	oom_score_adj = BPF_CORE_READ(signal, oom_score_adj);
-	return 0;
-}
-
-SEC("kprobe/fib_table_lookup")
-int prog2(struct pt_regs *ctx)
-{
-	return 0;
-}
-
-char _license[] SEC("license") = "GPL";
-u32 _version SEC("version") = LINUX_VERSION_CODE;
diff --git a/samples/bpf/test_overhead_raw_tp.bpf.c b/samples/bpf/test_overhead_raw_tp.bpf.c
deleted file mode 100644
index 6af39fe3f8dd..000000000000
--- a/samples/bpf/test_overhead_raw_tp.bpf.c
+++ /dev/null
@@ -1,17 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright (c) 2018 Facebook */
-#include "vmlinux.h"
-#include <bpf/bpf_helpers.h>
-
-SEC("raw_tracepoint/task_rename")
-int prog(struct bpf_raw_tracepoint_args *ctx)
-{
-	return 0;
-}
-
-SEC("raw_tracepoint/fib_table_lookup")
-int prog2(struct bpf_raw_tracepoint_args *ctx)
-{
-	return 0;
-}
-char _license[] SEC("license") = "GPL";
diff --git a/samples/bpf/test_overhead_tp.bpf.c b/samples/bpf/test_overhead_tp.bpf.c
deleted file mode 100644
index 5dc08b587978..000000000000
--- a/samples/bpf/test_overhead_tp.bpf.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Copyright (c) 2016 Facebook
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- */
-#include "vmlinux.h"
-#include <bpf/bpf_helpers.h>
-
-/* from /sys/kernel/tracing/events/task/task_rename/format */
-SEC("tracepoint/task/task_rename")
-int prog(struct trace_event_raw_task_rename *ctx)
-{
-	return 0;
-}
-
-/* from /sys/kernel/tracing/events/fib/fib_table_lookup/format */
-SEC("tracepoint/fib/fib_table_lookup")
-int prog2(struct trace_event_raw_fib_table_lookup *ctx)
-{
-	return 0;
-}
-char _license[] SEC("license") = "GPL";
diff --git a/samples/bpf/test_overhead_user.c b/samples/bpf/test_overhead_user.c
deleted file mode 100644
index dbd86f7b1473..000000000000
--- a/samples/bpf/test_overhead_user.c
+++ /dev/null
@@ -1,225 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/* Copyright (c) 2016 Facebook
- */
-#define _GNU_SOURCE
-#include <sched.h>
-#include <errno.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <asm/unistd.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <assert.h>
-#include <sys/wait.h>
-#include <sys/socket.h>
-#include <arpa/inet.h>
-#include <stdlib.h>
-#include <signal.h>
-#include <linux/bpf.h>
-#include <string.h>
-#include <time.h>
-#include <bpf/bpf.h>
-#include <bpf/libbpf.h>
-
-#define MAX_CNT 1000000
-#define DUMMY_IP "127.0.0.1"
-#define DUMMY_PORT 80
-
-static struct bpf_link *links[2];
-static struct bpf_object *obj;
-static int cnt;
-
-static __u64 time_get_ns(void)
-{
-	struct timespec ts;
-
-	clock_gettime(CLOCK_MONOTONIC, &ts);
-	return ts.tv_sec * 1000000000ull + ts.tv_nsec;
-}
-
-static void test_task_rename(int cpu)
-{
-	char buf[] = "test\n";
-	__u64 start_time;
-	int i, fd;
-
-	fd = open("/proc/self/comm", O_WRONLY|O_TRUNC);
-	if (fd < 0) {
-		printf("couldn't open /proc\n");
-		exit(1);
-	}
-	start_time = time_get_ns();
-	for (i = 0; i < MAX_CNT; i++) {
-		if (write(fd, buf, sizeof(buf)) < 0) {
-			printf("task rename failed: %s\n", strerror(errno));
-			close(fd);
-			return;
-		}
-	}
-	printf("task_rename:%d: %lld events per sec\n",
-	       cpu, MAX_CNT * 1000000000ll / (time_get_ns() - start_time));
-	close(fd);
-}
-
-static void test_fib_table_lookup(int cpu)
-{
-	struct sockaddr_in addr;
-	char buf[] = "test\n";
-	__u64 start_time;
-	int i, fd;
-
-	fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
-	if (fd < 0) {
-		printf("couldn't open socket\n");
-		exit(1);
-	}
-	memset((char *)&addr, 0, sizeof(addr));
-	addr.sin_addr.s_addr = inet_addr(DUMMY_IP);
-	addr.sin_port = htons(DUMMY_PORT);
-	addr.sin_family = AF_INET;
-	start_time = time_get_ns();
-	for (i = 0; i < MAX_CNT; i++) {
-		if (sendto(fd, buf, strlen(buf), 0,
-			   (struct sockaddr *)&addr, sizeof(addr)) < 0) {
-			printf("failed to start ping: %s\n", strerror(errno));
-			close(fd);
-			return;
-		}
-	}
-	printf("fib_table_lookup:%d: %lld events per sec\n",
-	       cpu, MAX_CNT * 1000000000ll / (time_get_ns() - start_time));
-	close(fd);
-}
-
-static void loop(int cpu, int flags)
-{
-	cpu_set_t cpuset;
-
-	CPU_ZERO(&cpuset);
-	CPU_SET(cpu, &cpuset);
-	sched_setaffinity(0, sizeof(cpuset), &cpuset);
-
-	if (flags & 1)
-		test_task_rename(cpu);
-	if (flags & 2)
-		test_fib_table_lookup(cpu);
-}
-
-static void run_perf_test(int tasks, int flags)
-{
-	pid_t pid[tasks];
-	int i;
-
-	for (i = 0; i < tasks; i++) {
-		pid[i] = fork();
-		if (pid[i] == 0) {
-			loop(i, flags);
-			exit(0);
-		} else if (pid[i] == -1) {
-			printf("couldn't spawn #%d process\n", i);
-			exit(1);
-		}
-	}
-	for (i = 0; i < tasks; i++) {
-		int status;
-
-		assert(waitpid(pid[i], &status, 0) == pid[i]);
-		assert(status == 0);
-	}
-}
-
-static int load_progs(char *filename)
-{
-	struct bpf_program *prog;
-	int err = 0;
-
-	obj = bpf_object__open_file(filename, NULL);
-	err = libbpf_get_error(obj);
-	if (err < 0) {
-		fprintf(stderr, "ERROR: opening BPF object file failed\n");
-		return err;
-	}
-
-	/* load BPF program */
-	err = bpf_object__load(obj);
-	if (err < 0) {
-		fprintf(stderr, "ERROR: loading BPF object file failed\n");
-		return err;
-	}
-
-	bpf_object__for_each_program(prog, obj) {
-		links[cnt] = bpf_program__attach(prog);
-		err = libbpf_get_error(links[cnt]);
-		if (err < 0) {
-			fprintf(stderr, "ERROR: bpf_program__attach failed\n");
-			links[cnt] = NULL;
-			return err;
-		}
-		cnt++;
-	}
-
-	return err;
-}
-
-static void unload_progs(void)
-{
-	while (cnt)
-		bpf_link__destroy(links[--cnt]);
-
-	bpf_object__close(obj);
-}
-
-int main(int argc, char **argv)
-{
-	int num_cpu = sysconf(_SC_NPROCESSORS_ONLN);
-	int test_flags = ~0;
-	char filename[256];
-	int err = 0;
-
-
-	if (argc > 1)
-		test_flags = atoi(argv[1]) ? : test_flags;
-	if (argc > 2)
-		num_cpu = atoi(argv[2]) ? : num_cpu;
-
-	if (test_flags & 0x3) {
-		printf("BASE\n");
-		run_perf_test(num_cpu, test_flags);
-	}
-
-	if (test_flags & 0xC) {
-		snprintf(filename, sizeof(filename),
-			 "%s_kprobe.bpf.o", argv[0]);
-
-		printf("w/KPROBE\n");
-		err = load_progs(filename);
-		if (!err)
-			run_perf_test(num_cpu, test_flags >> 2);
-
-		unload_progs();
-	}
-
-	if (test_flags & 0x30) {
-		snprintf(filename, sizeof(filename),
-			 "%s_tp.bpf.o", argv[0]);
-		printf("w/TRACEPOINT\n");
-		err = load_progs(filename);
-		if (!err)
-			run_perf_test(num_cpu, test_flags >> 4);
-
-		unload_progs();
-	}
-
-	if (test_flags & 0xC0) {
-		snprintf(filename, sizeof(filename),
-			 "%s_raw_tp.bpf.o", argv[0]);
-		printf("w/RAW_TRACEPOINT\n");
-		err = load_progs(filename);
-		if (!err)
-			run_perf_test(num_cpu, test_flags >> 6);
-
-		unload_progs();
-	}
-
-	return err;
-}
diff --git a/samples/bpf/test_override_return.sh b/samples/bpf/test_override_return.sh
deleted file mode 100755
index 35db26f736b9..000000000000
--- a/samples/bpf/test_override_return.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/bash
-
-rm -r tmpmnt
-rm -f testfile.img
-dd if=/dev/zero of=testfile.img bs=1M seek=1000 count=1
-DEVICE=$(losetup --show -f testfile.img)
-mkfs.btrfs -f $DEVICE
-mkdir tmpmnt
-./tracex7 $DEVICE
-if [ $? -eq 0 ]
-then
-	echo "SUCCESS!"
-else
-	echo "FAILED!"
-fi
-losetup -d $DEVICE
diff --git a/samples/bpf/test_probe_write_user.bpf.c b/samples/bpf/test_probe_write_user.bpf.c
deleted file mode 100644
index a4f3798b7fb0..000000000000
--- a/samples/bpf/test_probe_write_user.bpf.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Copyright (c) 2016 Sargun Dhillon <sargun@sargun.me>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- */
-#include "vmlinux.h"
-#include <string.h>
-#include <linux/version.h>
-#include <bpf/bpf_helpers.h>
-#include <bpf/bpf_tracing.h>
-#include <bpf/bpf_core_read.h>
-
-struct {
-	__uint(type, BPF_MAP_TYPE_HASH);
-	__type(key, struct sockaddr_in);
-	__type(value, struct sockaddr_in);
-	__uint(max_entries, 256);
-} dnat_map SEC(".maps");
-
-/* kprobe is NOT a stable ABI
- * kernel functions can be removed, renamed or completely change semantics.
- * Number of arguments and their positions can change, etc.
- * In such case this bpf+kprobe example will no longer be meaningful
- *
- * This example sits on a syscall, and the syscall ABI is relatively stable
- * of course, across platforms, and over time, the ABI may change.
- */
-SEC("ksyscall/connect")
-int BPF_KSYSCALL(bpf_prog1, int fd, struct sockaddr_in *uservaddr,
-		 int addrlen)
-{
-	struct sockaddr_in new_addr, orig_addr = {};
-	struct sockaddr_in *mapped_addr;
-
-	if (addrlen > sizeof(orig_addr))
-		return 0;
-
-	if (bpf_probe_read_user(&orig_addr, sizeof(orig_addr), uservaddr) != 0)
-		return 0;
-
-	mapped_addr = bpf_map_lookup_elem(&dnat_map, &orig_addr);
-	if (mapped_addr != NULL) {
-		memcpy(&new_addr, mapped_addr, sizeof(new_addr));
-		bpf_probe_write_user(uservaddr, &new_addr,
-				     sizeof(new_addr));
-	}
-	return 0;
-}
-
-char _license[] SEC("license") = "GPL";
-u32 _version SEC("version") = LINUX_VERSION_CODE;
diff --git a/samples/bpf/test_probe_write_user_user.c b/samples/bpf/test_probe_write_user_user.c
deleted file mode 100644
index 2a539aec4116..000000000000
--- a/samples/bpf/test_probe_write_user_user.c
+++ /dev/null
@@ -1,108 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-#include <stdio.h>
-#include <assert.h>
-#include <unistd.h>
-#include <bpf/bpf.h>
-#include <bpf/libbpf.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-int main(int ac, char **argv)
-{
-	struct sockaddr_in *serv_addr_in, *mapped_addr_in, *tmp_addr_in;
-	struct sockaddr serv_addr, mapped_addr, tmp_addr;
-	int serverfd, serverconnfd, clientfd, map_fd;
-	struct bpf_link *link = NULL;
-	struct bpf_program *prog;
-	struct bpf_object *obj;
-	socklen_t sockaddr_len;
-	char filename[256];
-	char *ip;
-
-	serv_addr_in = (struct sockaddr_in *)&serv_addr;
-	mapped_addr_in = (struct sockaddr_in *)&mapped_addr;
-	tmp_addr_in = (struct sockaddr_in *)&tmp_addr;
-
-	snprintf(filename, sizeof(filename), "%s.bpf.o", argv[0]);
-	obj = bpf_object__open_file(filename, NULL);
-	if (libbpf_get_error(obj)) {
-		fprintf(stderr, "ERROR: opening BPF object file failed\n");
-		return 0;
-	}
-
-	prog = bpf_object__find_program_by_name(obj, "bpf_prog1");
-	if (libbpf_get_error(prog)) {
-		fprintf(stderr, "ERROR: finding a prog in obj file failed\n");
-		goto cleanup;
-	}
-
-	/* load BPF program */
-	if (bpf_object__load(obj)) {
-		fprintf(stderr, "ERROR: loading BPF object file failed\n");
-		goto cleanup;
-	}
-
-	map_fd = bpf_object__find_map_fd_by_name(obj, "dnat_map");
-	if (map_fd < 0) {
-		fprintf(stderr, "ERROR: finding a map in obj file failed\n");
-		goto cleanup;
-	}
-
-	link = bpf_program__attach(prog);
-	if (libbpf_get_error(link)) {
-		fprintf(stderr, "ERROR: bpf_program__attach failed\n");
-		link = NULL;
-		goto cleanup;
-	}
-
-	assert((serverfd = socket(AF_INET, SOCK_STREAM, 0)) > 0);
-	assert((clientfd = socket(AF_INET, SOCK_STREAM, 0)) > 0);
-
-	/* Bind server to ephemeral port on lo */
-	memset(&serv_addr, 0, sizeof(serv_addr));
-	serv_addr_in->sin_family = AF_INET;
-	serv_addr_in->sin_port = 0;
-	serv_addr_in->sin_addr.s_addr = htonl(INADDR_LOOPBACK);
-
-	assert(bind(serverfd, &serv_addr, sizeof(serv_addr)) == 0);
-
-	sockaddr_len = sizeof(serv_addr);
-	assert(getsockname(serverfd, &serv_addr, &sockaddr_len) == 0);
-	ip = inet_ntoa(serv_addr_in->sin_addr);
-	printf("Server bound to: %s:%d\n", ip, ntohs(serv_addr_in->sin_port));
-
-	memset(&mapped_addr, 0, sizeof(mapped_addr));
-	mapped_addr_in->sin_family = AF_INET;
-	mapped_addr_in->sin_port = htons(5555);
-	mapped_addr_in->sin_addr.s_addr = inet_addr("255.255.255.255");
-
-	assert(!bpf_map_update_elem(map_fd, &mapped_addr, &serv_addr, BPF_ANY));
-
-	assert(listen(serverfd, 5) == 0);
-
-	ip = inet_ntoa(mapped_addr_in->sin_addr);
-	printf("Client connecting to: %s:%d\n",
-	       ip, ntohs(mapped_addr_in->sin_port));
-	assert(connect(clientfd, &mapped_addr, sizeof(mapped_addr)) == 0);
-
-	sockaddr_len = sizeof(tmp_addr);
-	ip = inet_ntoa(tmp_addr_in->sin_addr);
-	assert((serverconnfd = accept(serverfd, &tmp_addr, &sockaddr_len)) > 0);
-	printf("Server received connection from: %s:%d\n",
-	       ip, ntohs(tmp_addr_in->sin_port));
-
-	sockaddr_len = sizeof(tmp_addr);
-	assert(getpeername(clientfd, &tmp_addr, &sockaddr_len) == 0);
-	ip = inet_ntoa(tmp_addr_in->sin_addr);
-	printf("Client's peer address: %s:%d\n",
-	       ip, ntohs(tmp_addr_in->sin_port));
-
-	/* Is the server's getsockname = the socket getpeername */
-	assert(memcmp(&serv_addr, &tmp_addr, sizeof(struct sockaddr_in)) == 0);
-
-cleanup:
-	bpf_link__destroy(link);
-	bpf_object__close(obj);
-	return 0;
-}
diff --git a/samples/bpf/tracex7.bpf.c b/samples/bpf/tracex7.bpf.c
deleted file mode 100644
index ab8d6704a5a4..000000000000
--- a/samples/bpf/tracex7.bpf.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include "vmlinux.h"
-#include <linux/version.h>
-#include <bpf/bpf_helpers.h>
-
-SEC("kprobe/open_ctree")
-int bpf_prog1(struct pt_regs *ctx)
-{
-	unsigned long rc = -12;
-
-	bpf_override_return(ctx, rc);
-	return 0;
-}
-
-char _license[] SEC("license") = "GPL";
-u32 _version SEC("version") = LINUX_VERSION_CODE;
diff --git a/samples/bpf/tracex7_user.c b/samples/bpf/tracex7_user.c
deleted file mode 100644
index b10b5e03a226..000000000000
--- a/samples/bpf/tracex7_user.c
+++ /dev/null
@@ -1,56 +0,0 @@
-#define _GNU_SOURCE
-
-#include <stdio.h>
-#include <unistd.h>
-#include <bpf/libbpf.h>
-
-int main(int argc, char **argv)
-{
-	struct bpf_link *link = NULL;
-	struct bpf_program *prog;
-	struct bpf_object *obj;
-	char filename[256];
-	char command[256];
-	int ret = 0;
-	FILE *f;
-
-	if (!argv[1]) {
-		fprintf(stderr, "ERROR: Run with the btrfs device argument!\n");
-		return 0;
-	}
-
-	snprintf(filename, sizeof(filename), "%s.bpf.o", argv[0]);
-	obj = bpf_object__open_file(filename, NULL);
-	if (libbpf_get_error(obj)) {
-		fprintf(stderr, "ERROR: opening BPF object file failed\n");
-		return 0;
-	}
-
-	prog = bpf_object__find_program_by_name(obj, "bpf_prog1");
-	if (!prog) {
-		fprintf(stderr, "ERROR: finding a prog in obj file failed\n");
-		goto cleanup;
-	}
-
-	/* load BPF program */
-	if (bpf_object__load(obj)) {
-		fprintf(stderr, "ERROR: loading BPF object file failed\n");
-		goto cleanup;
-	}
-
-	link = bpf_program__attach(prog);
-	if (libbpf_get_error(link)) {
-		fprintf(stderr, "ERROR: bpf_program__attach failed\n");
-		link = NULL;
-		goto cleanup;
-	}
-
-	snprintf(command, 256, "mount %s tmpmnt/", argv[1]);
-	f = popen(command, "r");
-	ret = pclose(f);
-
-cleanup:
-	bpf_link__destroy(link);
-	bpf_object__close(obj);
-	return ret ? 0 : 1;
-}
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [bpf-next 1/3] selftests/bpf: migrate tracepoint overhead test to prog_tests
  2024-08-12  0:45 ` [bpf-next 1/3] selftests/bpf: migrate tracepoint overhead test to prog_tests Daniel T. Lee
@ 2024-08-12 11:11   ` Jiri Olsa
  0 siblings, 0 replies; 8+ messages in thread
From: Jiri Olsa @ 2024-08-12 11:11 UTC (permalink / raw)
  To: Daniel T. Lee
  Cc: Daniel Borkmann, Alexei Starovoitov, Andrii Nakryiko,
	Martin KaFai Lau, Eduard Zingerman, Song Liu, Yonghong Song,
	John Fastabend, KP Singh, Stanislav Fomichev, Hao Luo,
	Mykola Lysenko, Shuah Khan, Yipeng Zou, linux-kselftest, bpf,
	netdev

On Mon, Aug 12, 2024 at 12:45:01AM +0000, Daniel T. Lee wrote:
> As part of the cleanup of outdated test cases in sample/bpf, this
> commit migrates test for tracepoint overhead to selftest prog_tests.
> 
> The test_overhead in selftest/bpf focus on the 'raw_tracepoint' only,
> and do not cover tracepoint-specific tests. To support this, this
> commit utilize 'vmlinux.h', and additional test program for tracepoint
> has been added.
> 
> Signed-off-by: Daniel T. Lee <danieltimlee@gmail.com>

sure, let's have it complete

Acked-by: Jiri Olsa <jolsa@kernel.org>

jirka

> ---
>  .../selftests/bpf/prog_tests/test_overhead.c       | 14 +++++++++++++-
>  tools/testing/selftests/bpf/progs/test_overhead.c  | 11 +++++++----
>  2 files changed, 20 insertions(+), 5 deletions(-)
> 
> diff --git a/tools/testing/selftests/bpf/prog_tests/test_overhead.c b/tools/testing/selftests/bpf/prog_tests/test_overhead.c
> index f27013e38d03..06153602a859 100644
> --- a/tools/testing/selftests/bpf/prog_tests/test_overhead.c
> +++ b/tools/testing/selftests/bpf/prog_tests/test_overhead.c
> @@ -61,9 +61,10 @@ void test_test_overhead(void)
>  	const char *raw_tp_name = "prog3";
>  	const char *fentry_name = "prog4";
>  	const char *fexit_name = "prog5";
> +	const char *tp_name = "prog6";
>  	const char *kprobe_func = "__set_task_comm";
>  	struct bpf_program *kprobe_prog, *kretprobe_prog, *raw_tp_prog;
> -	struct bpf_program *fentry_prog, *fexit_prog;
> +	struct bpf_program *fentry_prog, *fexit_prog, *tp_prog;
>  	struct bpf_object *obj;
>  	struct bpf_link *link;
>  	int err, duration = 0;
> @@ -96,6 +97,10 @@ void test_test_overhead(void)
>  	if (CHECK(!fexit_prog, "find_probe",
>  		  "prog '%s' not found\n", fexit_name))
>  		goto cleanup;
> +	tp_prog = bpf_object__find_program_by_name(obj, tp_name);
> +	if (CHECK(!tp_prog, "find_probe",
> +		  "prog '%s' not found\n", tp_name))
> +		goto cleanup;
>  	err = bpf_object__load(obj);
>  	if (CHECK(err, "obj_load", "err %d\n", err))
>  		goto cleanup;
> @@ -142,6 +147,13 @@ void test_test_overhead(void)
>  	test_run("fexit");
>  	bpf_link__destroy(link);
>  
> +	/* attach tp */
> +	link = bpf_program__attach_tracepoint(tp_prog, "task", "task_rename");
> +	if (!ASSERT_OK_PTR(link, "attach_tp"))
> +		goto cleanup;
> +	test_run("tp");
> +	bpf_link__destroy(link);
> +
>  cleanup:
>  	prctl(PR_SET_NAME, comm, 0L, 0L, 0L);
>  	bpf_object__close(obj);
> diff --git a/tools/testing/selftests/bpf/progs/test_overhead.c b/tools/testing/selftests/bpf/progs/test_overhead.c
> index abb7344b531f..6dc1f68180e0 100644
> --- a/tools/testing/selftests/bpf/progs/test_overhead.c
> +++ b/tools/testing/selftests/bpf/progs/test_overhead.c
> @@ -1,9 +1,6 @@
>  // SPDX-License-Identifier: GPL-2.0
>  /* Copyright (c) 2019 Facebook */
> -#include <stdbool.h>
> -#include <stddef.h>
> -#include <linux/bpf.h>
> -#include <linux/ptrace.h>
> +#include "vmlinux.h"
>  #include <bpf/bpf_helpers.h>
>  #include <bpf/bpf_tracing.h>
>  
> @@ -39,4 +36,10 @@ int BPF_PROG(prog5, struct task_struct *tsk, const char *buf, bool exec)
>  	return 0;
>  }
>  
> +SEC("tracepoint/task/task_rename")
> +int prog6(struct trace_event_raw_task_rename *ctx)
> +{
> +	return 0;
> +}
> +
>  char _license[] SEC("license") = "GPL";
> -- 
> 2.43.0
> 

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [bpf-next 2/3] selftests/bpf: add rename tracepoint bench test
  2024-08-12  0:45 ` [bpf-next 2/3] selftests/bpf: add rename tracepoint bench test Daniel T. Lee
@ 2024-08-12 11:12   ` Jiri Olsa
  0 siblings, 0 replies; 8+ messages in thread
From: Jiri Olsa @ 2024-08-12 11:12 UTC (permalink / raw)
  To: Daniel T. Lee
  Cc: Daniel Borkmann, Alexei Starovoitov, Andrii Nakryiko,
	Martin KaFai Lau, Eduard Zingerman, Song Liu, Yonghong Song,
	John Fastabend, KP Singh, Stanislav Fomichev, Hao Luo,
	Mykola Lysenko, Shuah Khan, Yipeng Zou, linux-kselftest, bpf,
	netdev

On Mon, Aug 12, 2024 at 12:45:02AM +0000, Daniel T. Lee wrote:
> In addition to migrating the tracepoint overhead test from sample/bpf
> to selftest/bpf, this commit extends benchmarking test with rename
> task.
> 
> Since previous commit migrated tracepoint based on rename task, this
> commit updates the benchmarking program to utilize the newly added
> 'rename-tp'.
> 
> Signed-off-by: Daniel T. Lee <danieltimlee@gmail.com>

Acked-by: Jiri Olsa <jolsa@kernel.org>

jirka

> ---
>  tools/testing/selftests/bpf/bench.c              |  2 ++
>  .../testing/selftests/bpf/benchs/bench_rename.c  | 16 ++++++++++++++++
>  .../selftests/bpf/benchs/run_bench_rename.sh     |  2 +-
>  3 files changed, 19 insertions(+), 1 deletion(-)
> 
> diff --git a/tools/testing/selftests/bpf/bench.c b/tools/testing/selftests/bpf/bench.c
> index 627b74ae041b..e3d17b9b78cc 100644
> --- a/tools/testing/selftests/bpf/bench.c
> +++ b/tools/testing/selftests/bpf/bench.c
> @@ -495,6 +495,7 @@ extern const struct bench bench_rename_kretprobe;
>  extern const struct bench bench_rename_rawtp;
>  extern const struct bench bench_rename_fentry;
>  extern const struct bench bench_rename_fexit;
> +extern const struct bench bench_rename_tp;
>  
>  /* pure counting benchmarks to establish theoretical lmits */
>  extern const struct bench bench_trig_usermode_count;
> @@ -552,6 +553,7 @@ static const struct bench *benchs[] = {
>  	&bench_rename_rawtp,
>  	&bench_rename_fentry,
>  	&bench_rename_fexit,
> +	&bench_rename_tp,
>  	/* pure counting benchmarks for establishing theoretical limits */
>  	&bench_trig_usermode_count,
>  	&bench_trig_kernel_count,
> diff --git a/tools/testing/selftests/bpf/benchs/bench_rename.c b/tools/testing/selftests/bpf/benchs/bench_rename.c
> index bf66893c7a33..48cd9556ddf8 100644
> --- a/tools/testing/selftests/bpf/benchs/bench_rename.c
> +++ b/tools/testing/selftests/bpf/benchs/bench_rename.c
> @@ -106,6 +106,12 @@ static void setup_fexit(void)
>  	attach_bpf(ctx.skel->progs.prog5);
>  }
>  
> +static void setup_tp(void)
> +{
> +	setup_ctx();
> +	attach_bpf(ctx.skel->progs.prog6);
> +}
> +
>  const struct bench bench_rename_base = {
>  	.name = "rename-base",
>  	.validate = validate,
> @@ -136,6 +142,16 @@ const struct bench bench_rename_kretprobe = {
>  	.report_final = hits_drops_report_final,
>  };
>  
> +const struct bench bench_rename_tp = {
> +	.name = "rename-tp",
> +	.validate = validate,
> +	.setup = setup_tp,
> +	.producer_thread = producer,
> +	.measure = measure,
> +	.report_progress = hits_drops_report_progress,
> +	.report_final = hits_drops_report_final,
> +};
> +
>  const struct bench bench_rename_rawtp = {
>  	.name = "rename-rawtp",
>  	.validate = validate,
> diff --git a/tools/testing/selftests/bpf/benchs/run_bench_rename.sh b/tools/testing/selftests/bpf/benchs/run_bench_rename.sh
> index 7b281dbe4165..131e5e6ea8ec 100755
> --- a/tools/testing/selftests/bpf/benchs/run_bench_rename.sh
> +++ b/tools/testing/selftests/bpf/benchs/run_bench_rename.sh
> @@ -2,7 +2,7 @@
>  
>  set -eufo pipefail
>  
> -for i in base kprobe kretprobe rawtp fentry fexit
> +for i in base kprobe kretprobe rawtp fentry fexit tp
>  do
>  	summary=$(sudo ./bench -w2 -d5 -a rename-$i | tail -n1 | cut -d'(' -f1 | cut -d' ' -f3-)
>  	printf "%-10s: %s\n" $i "$summary"
> -- 
> 2.43.0
> 

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [bpf-next 0/3] samples/bpf: Remove obsolete tracing-related tests
  2024-08-12  0:45 [bpf-next 0/3] samples/bpf: Remove obsolete tracing-related tests Daniel T. Lee
                   ` (2 preceding siblings ...)
  2024-08-12  0:45 ` [bpf-next 3/3] samples/bpf: remove obsolete tracing related tests Daniel T. Lee
@ 2024-08-12 21:17 ` Andrii Nakryiko
  2024-08-13 17:39   ` Daniel T. Lee
  3 siblings, 1 reply; 8+ messages in thread
From: Andrii Nakryiko @ 2024-08-12 21:17 UTC (permalink / raw)
  To: Daniel T. Lee
  Cc: Daniel Borkmann, Alexei Starovoitov, Martin KaFai Lau,
	Eduard Zingerman, Song Liu, Yonghong Song, John Fastabend,
	KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa, Mykola Lysenko,
	Shuah Khan, Yipeng Zou, linux-kselftest, bpf, netdev

On Sun, Aug 11, 2024 at 5:45 PM Daniel T. Lee <danieltimlee@gmail.com> wrote:
>
> The BPF tracing infrastructure has undergone significant evolution,
> leading to the introduction of more robust and efficient APIs.
> However, some of the existing tests in the samples/bpf directory have
> not kept pace with these developments. These outdated tests not only
> create confusion among users but also increase maintenance overhead.
>
> For starter, this patchset focuses on cleaning up outdated 'tracing'
> related tests within the BPF testing framework. The goal is to
> modernize and streamline selftests by removing obsolete tests and
> migrating necessaries to more appropriate locations.
>
> Daniel T. Lee (3):
>   selftests/bpf: migrate tracepoint overhead test to prog_tests
>   selftests/bpf: add rename tracepoint bench test
>   samples/bpf: remove obsolete tracing related tests
>

We already have tracepoint-specific benchmark (see
benchs/bench_trigger.c), try `./bench trig-tp` (it will pretty recent
kernel due to reliance on bpf_modify_return_test_tp() kfunc).

So maybe instead of adding code to selftests, let's just remove it
from both samples/bpf and prog_tests' test_overhead? Either way
test_overhead isn't very representative anymore, given big chunk of
its overhead is in write() syscall?

>  samples/bpf/Makefile                          |  12 -
>  samples/bpf/test_overhead_kprobe.bpf.c        |  41 ----
>  samples/bpf/test_overhead_raw_tp.bpf.c        |  17 --
>  samples/bpf/test_overhead_tp.bpf.c            |  23 --
>  samples/bpf/test_overhead_user.c              | 225 ------------------
>  samples/bpf/test_override_return.sh           |  16 --
>  samples/bpf/test_probe_write_user.bpf.c       |  52 ----
>  samples/bpf/test_probe_write_user_user.c      | 108 ---------
>  samples/bpf/tracex7.bpf.c                     |  15 --
>  samples/bpf/tracex7_user.c                    |  56 -----
>  tools/testing/selftests/bpf/bench.c           |   2 +
>  .../selftests/bpf/benchs/bench_rename.c       |  16 ++
>  .../selftests/bpf/benchs/run_bench_rename.sh  |   2 +-
>  .../selftests/bpf/prog_tests/test_overhead.c  |  14 +-
>  .../selftests/bpf/progs/test_overhead.c       |  11 +-
>  15 files changed, 39 insertions(+), 571 deletions(-)
>  delete mode 100644 samples/bpf/test_overhead_kprobe.bpf.c
>  delete mode 100644 samples/bpf/test_overhead_raw_tp.bpf.c
>  delete mode 100644 samples/bpf/test_overhead_tp.bpf.c
>  delete mode 100644 samples/bpf/test_overhead_user.c
>  delete mode 100755 samples/bpf/test_override_return.sh
>  delete mode 100644 samples/bpf/test_probe_write_user.bpf.c
>  delete mode 100644 samples/bpf/test_probe_write_user_user.c
>  delete mode 100644 samples/bpf/tracex7.bpf.c
>  delete mode 100644 samples/bpf/tracex7_user.c
>
> --
> 2.43.0
>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [bpf-next 0/3] samples/bpf: Remove obsolete tracing-related tests
  2024-08-12 21:17 ` [bpf-next 0/3] samples/bpf: Remove obsolete tracing-related tests Andrii Nakryiko
@ 2024-08-13 17:39   ` Daniel T. Lee
  0 siblings, 0 replies; 8+ messages in thread
From: Daniel T. Lee @ 2024-08-13 17:39 UTC (permalink / raw)
  To: Andrii Nakryiko
  Cc: Daniel Borkmann, Alexei Starovoitov, Martin KaFai Lau,
	Eduard Zingerman, Song Liu, Yonghong Song, John Fastabend,
	KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa, Mykola Lysenko,
	Shuah Khan, Yipeng Zou, linux-kselftest, bpf, netdev

On Tue, Aug 13, 2024 at 6:17 AM Andrii Nakryiko
<andrii.nakryiko@gmail.com> wrote:
>
> On Sun, Aug 11, 2024 at 5:45 PM Daniel T. Lee <danieltimlee@gmail.com> wrote:
> >
> > The BPF tracing infrastructure has undergone significant evolution,
> > leading to the introduction of more robust and efficient APIs.
> > However, some of the existing tests in the samples/bpf directory have
> > not kept pace with these developments. These outdated tests not only
> > create confusion among users but also increase maintenance overhead.
> >
> > For starter, this patchset focuses on cleaning up outdated 'tracing'
> > related tests within the BPF testing framework. The goal is to
> > modernize and streamline selftests by removing obsolete tests and
> > migrating necessaries to more appropriate locations.
> >
> > Daniel T. Lee (3):
> >   selftests/bpf: migrate tracepoint overhead test to prog_tests
> >   selftests/bpf: add rename tracepoint bench test
> >   samples/bpf: remove obsolete tracing related tests
> >
>
> We already have tracepoint-specific benchmark (see
> benchs/bench_trigger.c), try `./bench trig-tp` (it will pretty recent
> kernel due to reliance on bpf_modify_return_test_tp() kfunc).
>
> So maybe instead of adding code to selftests, let's just remove it
> from both samples/bpf and prog_tests' test_overhead? Either way
> test_overhead isn't very representative anymore, given big chunk of
> its overhead is in write() syscall?
>

Thanks for the insight!
I'll just drop these two and resend them.

> >  samples/bpf/Makefile                          |  12 -
> >  samples/bpf/test_overhead_kprobe.bpf.c        |  41 ----
> >  samples/bpf/test_overhead_raw_tp.bpf.c        |  17 --
> >  samples/bpf/test_overhead_tp.bpf.c            |  23 --
> >  samples/bpf/test_overhead_user.c              | 225 ------------------
> >  samples/bpf/test_override_return.sh           |  16 --
> >  samples/bpf/test_probe_write_user.bpf.c       |  52 ----
> >  samples/bpf/test_probe_write_user_user.c      | 108 ---------
> >  samples/bpf/tracex7.bpf.c                     |  15 --
> >  samples/bpf/tracex7_user.c                    |  56 -----
> >  tools/testing/selftests/bpf/bench.c           |   2 +
> >  .../selftests/bpf/benchs/bench_rename.c       |  16 ++
> >  .../selftests/bpf/benchs/run_bench_rename.sh  |   2 +-
> >  .../selftests/bpf/prog_tests/test_overhead.c  |  14 +-
> >  .../selftests/bpf/progs/test_overhead.c       |  11 +-
> >  15 files changed, 39 insertions(+), 571 deletions(-)
> >  delete mode 100644 samples/bpf/test_overhead_kprobe.bpf.c
> >  delete mode 100644 samples/bpf/test_overhead_raw_tp.bpf.c
> >  delete mode 100644 samples/bpf/test_overhead_tp.bpf.c
> >  delete mode 100644 samples/bpf/test_overhead_user.c
> >  delete mode 100755 samples/bpf/test_override_return.sh
> >  delete mode 100644 samples/bpf/test_probe_write_user.bpf.c
> >  delete mode 100644 samples/bpf/test_probe_write_user_user.c
> >  delete mode 100644 samples/bpf/tracex7.bpf.c
> >  delete mode 100644 samples/bpf/tracex7_user.c
> >
> > --
> > 2.43.0
> >



-- 
Best,
Daniel T. Lee

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2024-08-13 17:39 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-12  0:45 [bpf-next 0/3] samples/bpf: Remove obsolete tracing-related tests Daniel T. Lee
2024-08-12  0:45 ` [bpf-next 1/3] selftests/bpf: migrate tracepoint overhead test to prog_tests Daniel T. Lee
2024-08-12 11:11   ` Jiri Olsa
2024-08-12  0:45 ` [bpf-next 2/3] selftests/bpf: add rename tracepoint bench test Daniel T. Lee
2024-08-12 11:12   ` Jiri Olsa
2024-08-12  0:45 ` [bpf-next 3/3] samples/bpf: remove obsolete tracing related tests Daniel T. Lee
2024-08-12 21:17 ` [bpf-next 0/3] samples/bpf: Remove obsolete tracing-related tests Andrii Nakryiko
2024-08-13 17:39   ` Daniel T. Lee

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).