[PATCH mptcp-next v5 01/10] Squash to "selftests/bpf: Add bpf scheduler test" 1 nonblock

Geliang Tang posted 10 patches 1 year, 10 months ago
There is a newer version of this series
[PATCH mptcp-next v5 01/10] Squash to "selftests/bpf: Add bpf scheduler test" 1 nonblock
Posted by Geliang Tang 1 year, 10 months ago
From: Geliang Tang <tanggeliang@kylinos.cn>

BPF tests fail sometimes with "bytes != total_bytes" errors:

 # test_default:PASS:sched_init:default 0 nsec
 # send_data:PASS:pthread_create 0 nsec
 # send_data:FAIL:recv 936000 != 10485760 nr_recv:-1 errno:11
 # default: 3041 ms
 # server:FAIL:send 7579500 != 10485760 nr_sent:-1 errno:11
 # send_data:FAIL:pthread_join thread_ret:-11 \
		test_default:PASS:has_bytes_sent addr_1 0 nsec
 # test_default:PASS:has_bytes_sent addr_2 0 nsec
 # close_netns:PASS:setns 0 nsec

Here errno 11 is EAGAIN. This patch sets server socket to nonblock
to fix this. It makes BPF tests stable.

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
 tools/testing/selftests/bpf/prog_tests/mptcp.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index 6e28215d7404..d3d51aee440d 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -88,6 +88,16 @@ static void cleanup_netns(struct nstoken *nstoken)
 	SYS_NOFAIL("ip netns del %s", NS_TEST);
 }
 
+static int set_nonblock(int fd)
+{
+	int flags = fcntl(fd, F_GETFL);
+
+	if (flags == -1)
+		return -1;
+
+	return fcntl(fd, flags | O_NONBLOCK);
+}
+
 static int verify_tsk(int map_fd, int client_fd)
 {
 	int err, cfd = client_fd;
@@ -466,6 +476,7 @@ static void test_default(void)
 	server_fd = start_mptcp_server(AF_INET, ADDR_1, PORT_1, 0);
 	client_fd = connect_to_fd(server_fd, 0);
 
+	set_nonblock(server_fd);
 	send_data(server_fd, client_fd, "default");
 	ASSERT_OK(has_bytes_sent(ADDR_1), "has_bytes_sent addr_1");
 	ASSERT_OK(has_bytes_sent(ADDR_2), "has_bytes_sent addr_2");
@@ -639,6 +650,7 @@ static void test_burst(void)
 	server_fd = start_mptcp_server(AF_INET, ADDR_1, PORT_1, 0);
 	client_fd = connect_to_fd(server_fd, 0);
 
+	set_nonblock(server_fd);
 	send_data(server_fd, client_fd, "bpf_burst");
 	ASSERT_OK(has_bytes_sent(ADDR_1), "has_bytes_sent addr 1");
 	ASSERT_OK(has_bytes_sent(ADDR_2), "has_bytes_sent addr 2");
-- 
2.40.1
Re: [PATCH mptcp-next v5 01/10] Squash to "selftests/bpf: Add bpf scheduler test" 1 nonblock
Posted by Geliang Tang 1 year, 10 months ago
On Tue, 2024-04-02 at 15:15 +0800, Geliang Tang wrote:
> From: Geliang Tang <tanggeliang@kylinos.cn>
> 
> BPF tests fail sometimes with "bytes != total_bytes" errors:
> 
>  # test_default:PASS:sched_init:default 0 nsec
>  # send_data:PASS:pthread_create 0 nsec
>  # send_data:FAIL:recv 936000 != 10485760 nr_recv:-1 errno:11
>  # default: 3041 ms
>  # server:FAIL:send 7579500 != 10485760 nr_sent:-1 errno:11
>  # send_data:FAIL:pthread_join thread_ret:-11 \
> 		test_default:PASS:has_bytes_sent addr_1 0 nsec
>  # test_default:PASS:has_bytes_sent addr_2 0 nsec
>  # close_netns:PASS:setns 0 nsec
> 
> Here errno 11 is EAGAIN. This patch sets server socket to nonblock
> to fix this. It makes BPF tests stable.
> 
> Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
> ---
>  tools/testing/selftests/bpf/prog_tests/mptcp.c | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
> 
> diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c
> b/tools/testing/selftests/bpf/prog_tests/mptcp.c
> index 6e28215d7404..d3d51aee440d 100644
> --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
> +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
> @@ -88,6 +88,16 @@ static void cleanup_netns(struct nstoken *nstoken)
>  	SYS_NOFAIL("ip netns del %s", NS_TEST);
>  }
>  
> +static int set_nonblock(int fd)
> +{
> +	int flags = fcntl(fd, F_GETFL);
> +
> +	if (flags == -1)
> +		return -1;
> +
> +	return fcntl(fd, flags | O_NONBLOCK);

This fix is incorrect. fcntl shouldn't be used like this. I'll think
about how to modify it again. BTW, Other patches in this series are
still valid. But needs to be rebased.

Thanks,
-Geliang

> +}
> +
>  static int verify_tsk(int map_fd, int client_fd)
>  {
>  	int err, cfd = client_fd;
> @@ -466,6 +476,7 @@ static void test_default(void)
>  	server_fd = start_mptcp_server(AF_INET, ADDR_1, PORT_1, 0);
>  	client_fd = connect_to_fd(server_fd, 0);
>  
> +	set_nonblock(server_fd);
>  	send_data(server_fd, client_fd, "default");
>  	ASSERT_OK(has_bytes_sent(ADDR_1), "has_bytes_sent addr_1");
>  	ASSERT_OK(has_bytes_sent(ADDR_2), "has_bytes_sent addr_2");
> @@ -639,6 +650,7 @@ static void test_burst(void)
>  	server_fd = start_mptcp_server(AF_INET, ADDR_1, PORT_1, 0);
>  	client_fd = connect_to_fd(server_fd, 0);
>  
> +	set_nonblock(server_fd);
>  	send_data(server_fd, client_fd, "bpf_burst");
>  	ASSERT_OK(has_bytes_sent(ADDR_1), "has_bytes_sent addr 1");
>  	ASSERT_OK(has_bytes_sent(ADDR_2), "has_bytes_sent addr 2");