selftests: bpf: Add xdp_perf test
authorBjörn Töpel <bjorn.topel@intel.com>
Fri, 13 Dec 2019 17:51:11 +0000 (18:51 +0100)
committerAlexei Starovoitov <ast@kernel.org>
Fri, 13 Dec 2019 21:09:32 +0000 (13:09 -0800)
The xdp_perf is a dummy XDP test, only used to measure the the cost of
jumping into a naive XDP program one million times.

To build and run the program:
  $ cd tools/testing/selftests/bpf
  $ make
  $ ./test_progs -v -t xdp_perf

Signed-off-by: Björn Töpel <bjorn.topel@intel.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20191213175112.30208-6-bjorn.topel@gmail.com
tools/testing/selftests/bpf/prog_tests/xdp_perf.c [new file with mode: 0644]

diff --git a/tools/testing/selftests/bpf/prog_tests/xdp_perf.c b/tools/testing/selftests/bpf/prog_tests/xdp_perf.c
new file mode 100644 (file)
index 0000000..7185bee
--- /dev/null
@@ -0,0 +1,25 @@
+// SPDX-License-Identifier: GPL-2.0
+#include <test_progs.h>
+
+void test_xdp_perf(void)
+{
+       const char *file = "./xdp_dummy.o";
+       __u32 duration, retval, size;
+       struct bpf_object *obj;
+       char in[128], out[128];
+       int err, prog_fd;
+
+       err = bpf_prog_load(file, BPF_PROG_TYPE_XDP, &obj, &prog_fd);
+       if (CHECK_FAIL(err))
+               return;
+
+       err = bpf_prog_test_run(prog_fd, 1000000, &in[0], 128,
+                               out, &size, &retval, &duration);
+
+       CHECK(err || retval != XDP_PASS || size != 128,
+             "xdp-perf",
+             "err %d errno %d retval %d size %d\n",
+             err, errno, retval, size);
+
+       bpf_object__close(obj);
+}