Skip to content

Commit

Permalink
Merge branch 'selftests/bpf: Add parallelism to test_progs'
Browse files Browse the repository at this point in the history
Yucong Sun says:

====================

This patch series adds "-j" parelell execution to test_progs, with "--debug" to
display server/worker communications. Also, some Tests that often fails in
parallel are marked as serial test, and it will run in sequence after parallel
execution is done.

This patch series also adds a error summary after all tests execution finished.

V6 -> V5:
  * adding error summary logic for non parallel mode too.
  * changed how serial tests are implemented, use main process instead of worker 0.
  * fixed a dozen broken test when running in parallel.

V5 -> V4:
  * change to SOCK_SEQPACKET for close notification.
  * move all debug output to "--debug" mode
  * output log as test finish, and all error logs again after summary line.
  * variable naming / style changes
  * adds serial_test_name() to replace serial test lists.
====================

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
  • Loading branch information
anakryiko committed Oct 8, 2021
2 parents a1852ce + d3f7b16 commit e52a8b9
Show file tree
Hide file tree
Showing 48 changed files with 736 additions and 88 deletions.
6 changes: 3 additions & 3 deletions tools/testing/selftests/bpf/cgroup_helpers.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include <fcntl.h>
#include <unistd.h>
#include <ftw.h>
#include <unistd.h>

#include "cgroup_helpers.h"

Expand All @@ -33,10 +34,9 @@
#define CGROUP_MOUNT_DFLT "/sys/fs/cgroup"
#define NETCLS_MOUNT_PATH CGROUP_MOUNT_DFLT "/net_cls"
#define CGROUP_WORK_DIR "/cgroup-test-work-dir"

#define format_cgroup_path(buf, path) \
snprintf(buf, sizeof(buf), "%s%s%s", CGROUP_MOUNT_PATH, \
CGROUP_WORK_DIR, path)
snprintf(buf, sizeof(buf), "%s%s%d%s", CGROUP_MOUNT_PATH, \
CGROUP_WORK_DIR, getpid(), path)

#define format_classid_path(buf) \
snprintf(buf, sizeof(buf), "%s%s", NETCLS_MOUNT_PATH, \
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/bpf/cgroup_helpers.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,4 @@ int join_classid(void);
int setup_classid_environment(void);
void cleanup_classid_environment(void);

#endif /* __CGROUP_HELPERS_H */
#endif /* __CGROUP_HELPERS_H */
1 change: 1 addition & 0 deletions tools/testing/selftests/bpf/prog_tests/atomics.c
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,7 @@ void test_atomics(void)
test__skip();
goto cleanup;
}
skel->bss->pid = getpid();

if (test__start_subtest("add"))
test_add(skel);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ static void do_bpf_iter_setsockopt(struct bpf_iter_setsockopt *iter_skel,
free_fds(est_fds, nr_est);
}

void test_bpf_iter_setsockopt(void)
void serial_test_bpf_iter_setsockopt(void)
{
struct bpf_iter_setsockopt *iter_skel = NULL;
struct bpf_cubic *cubic_skel = NULL;
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/bpf/prog_tests/bpf_obj_id.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

#define nr_iters 2

void test_bpf_obj_id(void)
void serial_test_bpf_obj_id(void)
{
const __u64 array_magic_value = 0xfaceb00c;
const __u32 array_key = 0;
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/bpf/prog_tests/cg_storage_multi.c
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,7 @@ static void test_shared(int parent_cgroup_fd, int child_cgroup_fd)
cg_storage_multi_shared__destroy(obj);
}

void test_cg_storage_multi(void)
void serial_test_cg_storage_multi(void)
{
int parent_cgroup_fd = -1, child_cgroup_fd = -1;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ static int prog_load(void)
bpf_log_buf, BPF_LOG_BUF_SIZE);
}

void test_cgroup_attach_autodetach(void)
void serial_test_cgroup_attach_autodetach(void)
{
__u32 duration = 0, prog_cnt = 4, attach_flags;
int allow_prog[2] = {-1};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ static int prog_load_cnt(int verdict, int val)
return ret;
}

void test_cgroup_attach_multi(void)
void serial_test_cgroup_attach_multi(void)
{
__u32 prog_ids[4], prog_cnt = 0, attach_flags, saved_prog_id;
int cg1 = 0, cg2 = 0, cg3 = 0, cg4 = 0, cg5 = 0, key = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ static int prog_load(int verdict)
bpf_log_buf, BPF_LOG_BUF_SIZE);
}

void test_cgroup_attach_override(void)
void serial_test_cgroup_attach_override(void)
{
int drop_prog = -1, allow_prog = -1, foo = -1, bar = -1;
__u32 duration = 0;
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/bpf/prog_tests/cgroup_link.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ int ping_and_check(int exp_calls, int exp_alt_calls)
return 0;
}

void test_cgroup_link(void)
void serial_test_cgroup_link(void)
{
struct {
const char *path;
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/bpf/prog_tests/cgroup_v1v2.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ void test_cgroup_v1v2(void)
{
struct network_helper_opts opts = {};
int server_fd, client_fd, cgroup_fd;
static const int port = 60123;
static const int port = 60120;

/* Step 1: Check base connectivity works without any BPF. */
server_fd = start_server(AF_INET, SOCK_STREAM, NULL, port, 0);
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/bpf/prog_tests/check_mtu.c
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ static void test_check_mtu_tc(__u32 mtu, __u32 ifindex)
test_check_mtu__destroy(skel);
}

void test_check_mtu(void)
void serial_test_check_mtu(void)
{
__u32 mtu_lo;

Expand Down
3 changes: 2 additions & 1 deletion tools/testing/selftests/bpf/prog_tests/fexit_bpf2bpf.c
Original file line number Diff line number Diff line change
Expand Up @@ -380,7 +380,8 @@ static void test_func_map_prog_compatibility(void)
"./test_attach_probe.o");
}

void test_fexit_bpf2bpf(void)
/* NOTE: affect other tests, must run in serial mode */
void serial_test_fexit_bpf2bpf(void)
{
if (test__start_subtest("target_no_callees"))
test_target_no_callees();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
#include <test_progs.h>
#include <network_helpers.h>

void test_flow_dissector_load_bytes(void)
void serial_test_flow_dissector_load_bytes(void)
{
struct bpf_flow_keys flow_keys;
__u32 duration = 0, retval, size;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -628,7 +628,7 @@ static void run_tests(int netns)
}
}

void test_flow_dissector_reattach(void)
void serial_test_flow_dissector_reattach(void)
{
int err, new_net, saved_net;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ static void close_perf_events(void)
free(pfd_array);
}

void test_get_branch_snapshot(void)
void serial_test_get_branch_snapshot(void)
{
struct get_branch_snapshot *skel = NULL;
int err;
Expand Down
3 changes: 2 additions & 1 deletion tools/testing/selftests/bpf/prog_tests/kfree_skb.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,8 @@ static void on_sample(void *ctx, int cpu, void *data, __u32 size)
*(bool *)ctx = true;
}

void test_kfree_skb(void)
/* TODO: fix kernel panic caused by this test in parallel mode */
void serial_test_kfree_skb(void)
{
struct __sk_buff skb = {};
struct bpf_prog_test_run_attr tattr = {
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/bpf/prog_tests/migrate_reuseport.c
Original file line number Diff line number Diff line change
Expand Up @@ -541,7 +541,7 @@ static void run_test(struct migrate_reuseport_test_case *test_case,
}
}

void test_migrate_reuseport(void)
void serial_test_migrate_reuseport(void)
{
struct test_migrate_reuseport *skel;
int i;
Expand Down
3 changes: 2 additions & 1 deletion tools/testing/selftests/bpf/prog_tests/modify_return.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,8 @@ static void run_test(__u32 input_retval, __u16 want_side_effect, __s16 want_ret)
modify_return__destroy(skel);
}

void test_modify_return(void)
/* TODO: conflict with get_func_ip_test */
void serial_test_modify_return(void)
{
run_test(0 /* input_retval */,
1 /* want_side_effect */,
Expand Down
3 changes: 2 additions & 1 deletion tools/testing/selftests/bpf/prog_tests/ns_current_pid_tgid.c
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,8 @@ static void test_ns_current_pid_tgid_new_ns(void)
return;
}

void test_ns_current_pid_tgid(void)
/* TODO: use a different tracepoint */
void serial_test_ns_current_pid_tgid(void)
{
if (test__start_subtest("ns_current_pid_tgid_root_ns"))
test_current_pid_tgid(NULL);
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/bpf/prog_tests/perf_buffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ int trigger_on_cpu(int cpu)
return 0;
}

void test_perf_buffer(void)
void serial_test_perf_buffer(void)
{
int err, on_len, nr_on_cpus = 0, nr_cpus, i;
struct perf_buffer_opts pb_opts = {};
Expand Down
3 changes: 2 additions & 1 deletion tools/testing/selftests/bpf/prog_tests/perf_link.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ static void burn_cpu(void)
++j;
}

void test_perf_link(void)
/* TODO: often fails in concurrent mode */
void serial_test_perf_link(void)
{
struct test_perf_link *skel = NULL;
struct perf_event_attr attr;
Expand Down
3 changes: 2 additions & 1 deletion tools/testing/selftests/bpf/prog_tests/probe_user.c
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
// SPDX-License-Identifier: GPL-2.0
#include <test_progs.h>

void test_probe_user(void)
/* TODO: corrupts other tests uses connect() */
void serial_test_probe_user(void)
{
const char *prog_name = "handle_sys_connect";
const char *obj_file = "./test_probe_user.o";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
#include <test_progs.h>
#include <linux/nbd.h>

void test_raw_tp_writable_test_run(void)
/* NOTE: conflict with other tests. */
void serial_test_raw_tp_writable_test_run(void)
{
__u32 duration = 0;
char error[4096];
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/bpf/prog_tests/select_reuseport.c
Original file line number Diff line number Diff line change
Expand Up @@ -858,7 +858,7 @@ void test_map_type(enum bpf_map_type mt)
cleanup();
}

void test_select_reuseport(void)
void serial_test_select_reuseport(void)
{
saved_tcp_fo = read_int_sysctl(TCP_FO_SYSCTL);
if (saved_tcp_fo < 0)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ static void *worker(void *p)
return NULL;
}

void test_send_signal_sched_switch(void)
/* NOTE: cause events loss */
void serial_test_send_signal_sched_switch(void)
{
struct test_send_signal_kern *skel;
pthread_t threads[THREAD_COUNT];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ static void do_test(void)
close(listen_fd);
}

void test_sk_storage_tracing(void)
void serial_test_sk_storage_tracing(void)
{
struct test_sk_storage_trace_itself *skel_itself;
int err;
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/bpf/prog_tests/snprintf_btf.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
/* Demonstrate that bpf_snprintf_btf succeeds and that various data types
* are formatted correctly.
*/
void test_snprintf_btf(void)
void serial_test_snprintf_btf(void)
{
struct netif_receive_skb *skel;
struct netif_receive_skb__bss *bss;
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/bpf/prog_tests/sock_fields.c
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,7 @@ static void test(void)
close(listen_fd);
}

void test_sock_fields(void)
void serial_test_sock_fields(void)
{
struct bpf_link *egress_link = NULL, *ingress_link = NULL;
int parent_cg_fd = -1, child_cg_fd = -1;
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/bpf/prog_tests/sockmap_listen.c
Original file line number Diff line number Diff line change
Expand Up @@ -2037,7 +2037,7 @@ static void run_tests(struct test_sockmap_listen *skel, struct bpf_map *map,
test_udp_unix_redir(skel, map, family);
}

void test_sockmap_listen(void)
void serial_test_sockmap_listen(void)
{
struct test_sockmap_listen *skel;

Expand Down
3 changes: 2 additions & 1 deletion tools/testing/selftests/bpf/prog_tests/timer.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@ static int timer(struct timer *timer_skel)
return 0;
}

void test_timer(void)
/* TODO: use pid filtering */
void serial_test_timer(void)
{
struct timer *timer_skel = NULL;
int err;
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/bpf/prog_tests/timer_mim.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ static int timer_mim(struct timer_mim *timer_skel)
return 0;
}

void test_timer_mim(void)
void serial_test_timer_mim(void)
{
struct timer_mim_reject *timer_reject_skel = NULL;
libbpf_print_fn_t old_print_fn = NULL;
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/bpf/prog_tests/tp_attach_query.c
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-2.0
#include <test_progs.h>

void test_tp_attach_query(void)
void serial_test_tp_attach_query(void)
{
const int num_progs = 3;
int i, j, bytes, efd, err, prog_fd[num_progs], pmu_fd[num_progs];
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/bpf/prog_tests/trace_printk.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
#define TRACEBUF "/sys/kernel/debug/tracing/trace_pipe"
#define SEARCHMSG "testing,testing"

void test_trace_printk(void)
void serial_test_trace_printk(void)
{
int err = 0, iter = 0, found = 0;
struct trace_printk__bss *bss;
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/bpf/prog_tests/trace_vprintk.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
#define TRACEBUF "/sys/kernel/debug/tracing/trace_pipe"
#define SEARCHMSG "1,2,3,4,5,6,7,8,9,10"

void test_trace_vprintk(void)
void serial_test_trace_vprintk(void)
{
int err = 0, iter = 0, found = 0;
struct trace_vprintk__bss *bss;
Expand Down
3 changes: 2 additions & 1 deletion tools/testing/selftests/bpf/prog_tests/trampoline_count.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ static struct bpf_link *load(struct bpf_object *obj, const char *name)
return bpf_program__attach_trace(prog);
}

void test_trampoline_count(void)
/* TODO: use different target function to run in concurrent mode */
void serial_test_trampoline_count(void)
{
const char *fentry_name = "fentry/__set_task_comm";
const char *fexit_name = "fexit/__set_task_comm";
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/bpf/prog_tests/xdp_attach.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
#define IFINDEX_LO 1
#define XDP_FLAGS_REPLACE (1U << 4)

void test_xdp_attach(void)
void serial_test_xdp_attach(void)
{
__u32 duration = 0, id1, id2, id0 = 0, len;
struct bpf_object *obj1, *obj2, *obj3;
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/bpf/prog_tests/xdp_bonding.c
Original file line number Diff line number Diff line change
Expand Up @@ -519,7 +519,7 @@ static struct bond_test_case bond_test_cases[] = {
{ "xdp_bonding_xor_layer34", BOND_MODE_XOR, BOND_XMIT_POLICY_LAYER34, },
};

void test_xdp_bonding(void)
void serial_test_xdp_bonding(void)
{
libbpf_print_fn_t old_print_fn;
struct skeletons skeletons = {};
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/bpf/prog_tests/xdp_cpumap_attach.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

#define IFINDEX_LO 1

void test_xdp_cpumap_attach(void)
void serial_test_xdp_cpumap_attach(void)
{
struct test_xdp_with_cpumap_helpers *skel;
struct bpf_prog_info info = {};
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/bpf/prog_tests/xdp_devmap_attach.c
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ void test_neg_xdp_devmap_helpers(void)
}


void test_xdp_devmap_attach(void)
void serial_test_xdp_devmap_attach(void)
{
if (test__start_subtest("DEVMAP with programs in entries"))
test_xdp_with_devmap_helpers();
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/bpf/prog_tests/xdp_info.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

#define IFINDEX_LO 1

void test_xdp_info(void)
void serial_test_xdp_info(void)
{
__u32 len = sizeof(struct bpf_prog_info), duration = 0, prog_id;
const char *file = "./xdp_dummy.o";
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/bpf/prog_tests/xdp_link.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

#define IFINDEX_LO 1

void test_xdp_link(void)
void serial_test_xdp_link(void)
{
__u32 duration = 0, id1, id2, id0 = 0, prog_fd1, prog_fd2, err;
DECLARE_LIBBPF_OPTS(bpf_xdp_set_link_opts, opts, .old_fd = -1);
Expand Down
Loading

0 comments on commit e52a8b9

Please sign in to comment.