History

Merge branch 'optimize-bpf-selftest-to-increase-ci-success-rate'

Jiayuan Chen says: ==================== Optimize bpf selftest to increase CI success rate 1. Optimized some static bound port selftests to avoid port occupation when running test_progs -j. 2. Optimized the retry logic for test_maps. Some Failed CI: https://github.com/kernel-patches/bpf/actions/runs/13275542359/job/37064974076 https://github.com/kernel-patches/bpf/actions/runs/13549227497/job/37868926343 https://github.com/kernel-patches/bpf/actions/runs/13548089029/job/37865812030 https://github.com/kernel-patches/bpf/actions/runs/13553536268/job/37883329296 (Perhaps it's due to the large number of pull requests requiring CI runs?) ====================

Alexei Starovoitov committed 1 year ago

Commit 7c2f2072 parents ee2fdd0 7f260af4 files · +23 −12Browse files

Unified · Split

4 files
  1. tools/testing/selftests/bpf/prog_tests/bpf_nf.c +6 −3
  2. tools/testing/selftests/bpf/prog_tests/cgroup_v1v2.c +9 −4
  3. tools/testing/selftests/bpf/progs/connect4_dropper.c +3 −1
  4. tools/testing/selftests/bpf/test_maps.c +5 −4
tools/testing/selftests/bpf/prog_tests/bpf_nf.c+6−3
@@ -72,11 +72,14 @@ static void test_bpf_nf_ct(int mode) · 71 unmodified lines
7272 if (!ASSERT_OK(system(cmd), cmd))
7373 goto end;
7474
75− srv_port = (mode == TEST_XDP) ? 5005 : 5006;
76− srv_fd = start_server(AF_INET, SOCK_STREAM, "127.0.0.1", srv_port, TIMEOUT_MS);
75+ srv_fd = start_server(AF_INET, SOCK_STREAM, "127.0.0.1", 0, TIMEOUT_MS);
7776 if (!ASSERT_GE(srv_fd, 0, "start_server"))
7877 goto end;
7978
79+ srv_port = get_socket_local_port(srv_fd);
80+ if (!ASSERT_GE(srv_port, 0, "get_sock_local_port"))
81+ goto end;
82+
8083 client_fd = connect_to_server(srv_fd);
8184 if (!ASSERT_GE(client_fd, 0, "connect_to_server"))
8285 goto end;
@@ -91,7 +94,7 @@ static void test_bpf_nf_ct(int mode) · 8 unmodified lines
9194 skel->bss->saddr = peer_addr.sin_addr.s_addr;
9295 skel->bss->sport = peer_addr.sin_port;
9396 skel->bss->daddr = peer_addr.sin_addr.s_addr;
94− skel->bss->dport = htons(srv_port);
97+ skel->bss->dport = srv_port;
9598
9699 if (mode == TEST_XDP)
97100 prog_fd = bpf_program__fd(skel->progs.nf_xdp_ct_test);
tools/testing/selftests/bpf/prog_tests/cgroup_v1v2.c+9−4
@@ -10,12 +10,18 @@ · 9 unmodified lines
1010 static int run_test(int cgroup_fd, int server_fd, bool classid)
1111 {
1212 struct connect4_dropper *skel;
13− int fd, err = 0;
13+ int fd, err = 0, port;
1414
1515 skel = connect4_dropper__open_and_load();
1616 if (!ASSERT_OK_PTR(skel, "skel_open"))
1717 return -1;
1818
19+ port = get_socket_local_port(server_fd);
20+ if (!ASSERT_GE(port, 0, "get_socket_local_port"))
21+ return -1;
22+
23+ skel->bss->port = ntohs(port);
24+
1925 skel->links.connect_v4_dropper =
2026 bpf_program__attach_cgroup(skel->progs.connect_v4_dropper,
2127 cgroup_fd);
@@ -48,10 +54,9 @@ void test_cgroup_v1v2(void) · 26 unmodified lines
4854 {
4955 struct network_helper_opts opts = {};
5056 int server_fd, client_fd, cgroup_fd;
51− static const int port = 60120;
5257
5358 /* Step 1: Check base connectivity works without any BPF. */
54− server_fd = start_server(AF_INET, SOCK_STREAM, NULL, port, 0);
59+ server_fd = start_server(AF_INET, SOCK_STREAM, NULL, 0, 0);
5560 if (!ASSERT_GE(server_fd, 0, "server_fd"))
5661 return;
5762 client_fd = connect_to_fd_opts(server_fd, &opts);
@@ -66,7 +71,7 @@ void test_cgroup_v1v2(void) · 8 unmodified lines
6671 cgroup_fd = test__join_cgroup("/connect_dropper");
6772 if (!ASSERT_GE(cgroup_fd, 0, "cgroup_fd"))
6873 return;
69− server_fd = start_server(AF_INET, SOCK_STREAM, NULL, port, 0);
74+ server_fd = start_server(AF_INET, SOCK_STREAM, NULL, 0, 0);
7075 if (!ASSERT_GE(server_fd, 0, "server_fd")) {
7176 close(cgroup_fd);
7277 return;
tools/testing/selftests/bpf/progs/connect4_dropper.c+3−1
@@ -13,12 +13,14 @@ · 12 unmodified lines
1313 #define VERDICT_REJECT 0
1414 #define VERDICT_PROCEED 1
1515
16+int port;
17+
1618 SEC("cgroup/connect4")
1719 int connect_v4_dropper(struct bpf_sock_addr *ctx)
1820 {
1921 if (ctx->type != SOCK_STREAM)
2022 return VERDICT_PROCEED;
21− if (ctx->user_port == bpf_htons(60120))
23+ if (ctx->user_port == bpf_htons(port))
2224 return VERDICT_REJECT;
2325 return VERDICT_PROCEED;
2426 }
tools/testing/selftests/bpf/test_maps.c+5−4
@@ -1396,9 +1396,10 @@ static void test_map_stress(void) · 1395 unmodified lines
13961396 #define MAX_DELAY_US 50000
13971397 #define MIN_DELAY_RANGE_US 5000
13981398
1399−static bool retry_for_again_or_busy(int err)
1399+static bool can_retry(int err)
14001400 {
1401− return (err == EAGAIN || err == EBUSY);
1401+ return (err == EAGAIN || err == EBUSY ||
1402+ (err == ENOMEM && map_opts.map_flags == BPF_F_NO_PREALLOC));
14021403 }
14031404
14041405 int map_update_retriable(int map_fd, const void *key, const void *value, int flags, int attempts,
@@ -1451,12 +1452,12 @@ static void test_update_delete(unsigned int fn, void *data) · 46 unmodified lines
14511452
14521453 if (do_update) {
14531454 err = map_update_retriable(fd, &key, &value, BPF_NOEXIST, MAP_RETRIES,
1454− retry_for_again_or_busy);
1455+ can_retry);
14551456 if (err)
14561457 printf("error %d %d\n", err, errno);
14571458 assert(err == 0);
14581459 err = map_update_retriable(fd, &key, &value, BPF_EXIST, MAP_RETRIES,
1459− retry_for_again_or_busy);
1460+ can_retry);
14601461 if (err)
14611462 printf("error %d %d\n", err, errno);
14621463 assert(err == 0);

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t