All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH liburing v2 0/5] zc tests improvements
@ 2022-09-05 22:05 Pavel Begunkov
  2022-09-05 22:05 ` [PATCH liburing v2 1/5] tests/zc: move send size calc into do_test_inet_send Pavel Begunkov
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: Pavel Begunkov @ 2022-09-05 22:05 UTC (permalink / raw)
  To: io-uring; +Cc: Jens Axboe, asml.silence

Return accidentially disabled UDP testing, reduce runtime, and clean it up
in preparation for zc sendmsg.

v2: kill __BUF_T_MAX
    add patch 5/5

Pavel Begunkov (5):
  tests/zc: move send size calc into do_test_inet_send
  tests/zc: use io_uring for rx
  tests/zc: fix udp testing
  tests/zc: name buffer flavours
  tests/zc: skip tcp w/ addr

 test/send-zerocopy.c | 134 ++++++++++++++++++-------------------------
 1 file changed, 57 insertions(+), 77 deletions(-)

-- 
2.37.2


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

* [PATCH liburing v2 1/5] tests/zc: move send size calc into do_test_inet_send
  2022-09-05 22:05 [PATCH liburing v2 0/5] zc tests improvements Pavel Begunkov
@ 2022-09-05 22:05 ` Pavel Begunkov
  2022-09-05 22:05 ` [PATCH liburing v2 2/5] tests/zc: use io_uring for rx Pavel Begunkov
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Pavel Begunkov @ 2022-09-05 22:05 UTC (permalink / raw)
  To: io-uring; +Cc: Jens Axboe, asml.silence

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
---
 test/send-zerocopy.c | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/test/send-zerocopy.c b/test/send-zerocopy.c
index 8714b6f..0a8531e 100644
--- a/test/send-zerocopy.c
+++ b/test/send-zerocopy.c
@@ -238,7 +238,7 @@ static int prepare_ip(struct sockaddr_storage *addr, int *sock_client, int *sock
 
 static int do_test_inet_send(struct io_uring *ring, int sock_client, int sock_server,
 			     bool fixed_buf, struct sockaddr_storage *addr,
-			     size_t send_size, bool cork, bool mix_register,
+			     bool small_send, bool cork, bool mix_register,
 			     int buf_idx, bool force_async)
 {
 	const unsigned zc_flags = 0;
@@ -246,13 +246,13 @@ static int do_test_inet_send(struct io_uring *ring, int sock_client, int sock_se
 	struct io_uring_cqe *cqe;
 	int nr_reqs = cork ? 5 : 1;
 	int i, ret, nr_cqes;
+	size_t send_size = small_send ? 137 : buffers_iov[buf_idx].iov_len;
 	size_t chunk_size = send_size / nr_reqs;
 	size_t chunk_size_last = send_size - chunk_size * (nr_reqs - 1);
 	char *buf = buffers_iov[buf_idx].iov_base;
 	pid_t p;
 	int wstatus;
 
-	assert(send_size <= buffers_iov[buf_idx].iov_len);
 	memset(rx_buffer, 0, send_size);
 
 	for (i = 0; i < nr_reqs; i++) {
@@ -394,7 +394,7 @@ static int test_inet_send(struct io_uring *ring)
 		for (i = 0; i < 256; i++) {
 			bool fixed_buf = i & 1;
 			struct sockaddr_storage *addr_arg = (i & 2) ? &addr : NULL;
-			size_t size = (i & 4) ? 137 : 4096;
+			bool small_send = i & 4;
 			bool cork = i & 8;
 			bool mix_register = i & 16;
 			bool aligned = i & 32;
@@ -406,8 +406,7 @@ static int test_inet_send(struct io_uring *ring)
 				continue;
 			if (large_buf) {
 				buf_idx = 2;
-				size = buffers_iov[buf_idx].iov_len;
-				if (!aligned || !tcp)
+				if (!aligned || !tcp || small_send)
 					continue;
 			}
 			if (!buffers_iov[buf_idx].iov_base)
@@ -420,7 +419,7 @@ static int test_inet_send(struct io_uring *ring)
 				continue;
 
 			ret = do_test_inet_send(ring, sock_client, sock_server, fixed_buf,
-						addr_arg, size, cork, mix_register,
+						addr_arg, small_send, cork, mix_register,
 						buf_idx, force_async);
 			if (ret) {
 				fprintf(stderr, "send failed fixed buf %i, conn %i, addr %i, "
@@ -535,8 +534,8 @@ int main(int argc, char *argv[])
 		return T_EXIT_FAIL;
 	}
 
-	buffers_iov[0].iov_base = tx_buffer;
-	buffers_iov[0].iov_len = 8192;
+	buffers_iov[0].iov_base = tx_buffer + 4096;
+	buffers_iov[0].iov_len = 4096;
 	buffers_iov[1].iov_base = tx_buffer + BUFFER_OFFSET;
 	buffers_iov[1].iov_len = 8192 - BUFFER_OFFSET - 13;
 
-- 
2.37.2


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

* [PATCH liburing v2 2/5] tests/zc: use io_uring for rx
  2022-09-05 22:05 [PATCH liburing v2 0/5] zc tests improvements Pavel Begunkov
  2022-09-05 22:05 ` [PATCH liburing v2 1/5] tests/zc: move send size calc into do_test_inet_send Pavel Begunkov
@ 2022-09-05 22:05 ` Pavel Begunkov
  2022-09-05 22:06 ` [PATCH liburing v2 3/5] tests/zc: fix udp testing Pavel Begunkov
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Pavel Begunkov @ 2022-09-05 22:05 UTC (permalink / raw)
  To: io-uring; +Cc: Jens Axboe, asml.silence

Recieve via io_uring, this simplifies code by removing forking.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
---
 test/send-zerocopy.c | 70 +++++++++++++++-----------------------------
 1 file changed, 24 insertions(+), 46 deletions(-)

diff --git a/test/send-zerocopy.c b/test/send-zerocopy.c
index 0a8531e..f80a5cd 100644
--- a/test/send-zerocopy.c
+++ b/test/send-zerocopy.c
@@ -44,7 +44,7 @@
 #define HOST	"127.0.0.1"
 #define HOSTV6	"::1"
 
-#define ZC_TAG 10000
+#define RX_TAG 10000
 #define BUFFER_OFFSET 41
 
 #ifndef ARRAY_SIZE
@@ -250,8 +250,6 @@ static int do_test_inet_send(struct io_uring *ring, int sock_client, int sock_se
 	size_t chunk_size = send_size / nr_reqs;
 	size_t chunk_size_last = send_size - chunk_size * (nr_reqs - 1);
 	char *buf = buffers_iov[buf_idx].iov_base;
-	pid_t p;
-	int wstatus;
 
 	memset(rx_buffer, 0, send_size);
 
@@ -289,42 +287,17 @@ static int do_test_inet_send(struct io_uring *ring, int sock_client, int sock_se
 			sqe->flags |= IOSQE_ASYNC;
 	}
 
+	sqe = io_uring_get_sqe(ring);
+	io_uring_prep_recv(sqe, sock_server, rx_buffer, send_size, MSG_WAITALL);
+	sqe->user_data = RX_TAG;
+
 	ret = io_uring_submit(ring);
-	if (ret != nr_reqs) {
+	if (ret != nr_reqs + 1) {
 		fprintf(stderr, "submit failed, got %i expected %i\n", ret, nr_reqs);
 		return 1;
 	}
 
-	p = fork();
-	if (p == -1) {
-		fprintf(stderr, "fork() failed\n");
-		return 1;
-	} else if (p == 0) {
-		size_t bytes_received = 0;
-
-		while (bytes_received != send_size) {
-			ret = recv(sock_server,
-				   rx_buffer + bytes_received,
-				   send_size - bytes_received, 0);
-			if (ret <= 0) {
-				fprintf(stderr, "recv failed, got %i, errno %i\n",
-					ret, errno);
-				exit(1);
-			}
-			bytes_received += ret;
-		}
-
-		for (i = 0; i < send_size; i++) {
-			if (buf[i] != rx_buffer[i]) {
-				fprintf(stderr, "botched data, first mismated byte %i, "
-					"%u vs %u\n", i, buf[i], rx_buffer[i]);
-				exit(1);
-			}
-		}
-		exit(0);
-	}
-
-	nr_cqes = 2 * nr_reqs;
+	nr_cqes = 2 * nr_reqs + 1;
 	for (i = 0; i < nr_cqes; i++) {
 		int expected = chunk_size;
 
@@ -333,8 +306,18 @@ static int do_test_inet_send(struct io_uring *ring, int sock_client, int sock_se
 			fprintf(stderr, "io_uring_wait_cqe failed %i\n", ret);
 			return 1;
 		}
+		if (cqe->user_data == RX_TAG) {
+			if (cqe->res != send_size) {
+				fprintf(stderr, "rx failed %i\n", cqe->res);
+				return 1;
+			}
+			io_uring_cqe_seen(ring, cqe);
+			continue;
+		}
+
 		if (cqe->user_data >= nr_reqs) {
-			fprintf(stderr, "invalid user_data\n");
+			fprintf(stderr, "invalid user_data %lu\n",
+					(unsigned long)cqe->user_data);
 			return 1;
 		}
 		if (!(cqe->flags & IORING_CQE_F_NOTIF)) {
@@ -354,17 +337,12 @@ static int do_test_inet_send(struct io_uring *ring, int sock_client, int sock_se
 		io_uring_cqe_seen(ring, cqe);
 	}
 
-	if (waitpid(p, &wstatus, 0) == (pid_t)-1) {
-		perror("waitpid()");
-		return 1;
-	}
-	if (!WIFEXITED(wstatus)) {
-		fprintf(stderr, "child failed %i\n", WEXITSTATUS(wstatus));
-		return 1;
-	}
-	if (WEXITSTATUS(wstatus)) {
-		fprintf(stderr, "child failed\n");
-		return 1;
+	for (i = 0; i < send_size; i++) {
+		if (buf[i] != rx_buffer[i]) {
+			fprintf(stderr, "botched data, first mismated byte %i, "
+				"%u vs %u\n", i, buf[i], rx_buffer[i]);
+			return 1;
+		}
 	}
 	return 0;
 }
-- 
2.37.2


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

* [PATCH liburing v2 3/5] tests/zc: fix udp testing
  2022-09-05 22:05 [PATCH liburing v2 0/5] zc tests improvements Pavel Begunkov
  2022-09-05 22:05 ` [PATCH liburing v2 1/5] tests/zc: move send size calc into do_test_inet_send Pavel Begunkov
  2022-09-05 22:05 ` [PATCH liburing v2 2/5] tests/zc: use io_uring for rx Pavel Begunkov
@ 2022-09-05 22:06 ` Pavel Begunkov
  2022-09-05 22:06 ` [PATCH liburing v2 4/5] tests/zc: name buffer flavours Pavel Begunkov
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Pavel Begunkov @ 2022-09-05 22:06 UTC (permalink / raw)
  To: io-uring; +Cc: Jens Axboe, asml.silence

The tcp vs large_buf skip condition is not what we want and it skips udp
testing, fix it and also make sure we serialise cork requests with
IOSQE_IO_LINK as they might get executed OOO.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
---
 test/send-zerocopy.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/test/send-zerocopy.c b/test/send-zerocopy.c
index f80a5cd..bfe4cf7 100644
--- a/test/send-zerocopy.c
+++ b/test/send-zerocopy.c
@@ -285,6 +285,8 @@ static int do_test_inet_send(struct io_uring *ring, int sock_client, int sock_se
 		}
 		if (force_async)
 			sqe->flags |= IOSQE_ASYNC;
+		if (cork && i != nr_reqs - 1)
+			sqe->flags |= IOSQE_IO_LINK;
 	}
 
 	sqe = io_uring_get_sqe(ring);
@@ -380,11 +382,9 @@ static int test_inet_send(struct io_uring *ring)
 			int buf_idx = aligned ? 0 : 1;
 			bool force_async = i & 128;
 
-			if (!tcp || !large_buf)
-				continue;
 			if (large_buf) {
 				buf_idx = 2;
-				if (!aligned || !tcp || small_send)
+				if (!aligned || !tcp || small_send || cork)
 					continue;
 			}
 			if (!buffers_iov[buf_idx].iov_base)
-- 
2.37.2


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

* [PATCH liburing v2 4/5] tests/zc: name buffer flavours
  2022-09-05 22:05 [PATCH liburing v2 0/5] zc tests improvements Pavel Begunkov
                   ` (2 preceding siblings ...)
  2022-09-05 22:06 ` [PATCH liburing v2 3/5] tests/zc: fix udp testing Pavel Begunkov
@ 2022-09-05 22:06 ` Pavel Begunkov
  2022-09-05 22:06 ` [PATCH liburing v2 5/5] tests/zc: skip tcp w/ addr Pavel Begunkov
  2022-09-05 22:51 ` [PATCH liburing v2 0/5] zc tests improvements Jens Axboe
  5 siblings, 0 replies; 7+ messages in thread
From: Pavel Begunkov @ 2022-09-05 22:06 UTC (permalink / raw)
  To: io-uring; +Cc: Jens Axboe, asml.silence

Remove duplicating tests and pass a buf index instead of dozens of
flags to specify the buffer we want to use.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
---
 test/send-zerocopy.c | 59 +++++++++++++++++++++++---------------------
 1 file changed, 31 insertions(+), 28 deletions(-)

diff --git a/test/send-zerocopy.c b/test/send-zerocopy.c
index bfe4cf7..f996f22 100644
--- a/test/send-zerocopy.c
+++ b/test/send-zerocopy.c
@@ -51,8 +51,15 @@
 	#define ARRAY_SIZE(a) (sizeof(a)/sizeof((a)[0]))
 #endif
 
+enum {
+	BUF_T_NORMAL,
+	BUF_T_SMALL,
+	BUF_T_NONALIGNED,
+	BUF_T_LARGE,
+};
+
 static char *tx_buffer, *rx_buffer;
-static struct iovec buffers_iov[3];
+static struct iovec buffers_iov[4];
 
 static bool check_cq_empty(struct io_uring *ring)
 {
@@ -238,7 +245,7 @@ static int prepare_ip(struct sockaddr_storage *addr, int *sock_client, int *sock
 
 static int do_test_inet_send(struct io_uring *ring, int sock_client, int sock_server,
 			     bool fixed_buf, struct sockaddr_storage *addr,
-			     bool small_send, bool cork, bool mix_register,
+			     bool cork, bool mix_register,
 			     int buf_idx, bool force_async)
 {
 	const unsigned zc_flags = 0;
@@ -246,7 +253,7 @@ static int do_test_inet_send(struct io_uring *ring, int sock_client, int sock_se
 	struct io_uring_cqe *cqe;
 	int nr_reqs = cork ? 5 : 1;
 	int i, ret, nr_cqes;
-	size_t send_size = small_send ? 137 : buffers_iov[buf_idx].iov_len;
+	size_t send_size = buffers_iov[buf_idx].iov_len;
 	size_t chunk_size = send_size / nr_reqs;
 	size_t chunk_size_last = send_size - chunk_size * (nr_reqs - 1);
 	char *buf = buffers_iov[buf_idx].iov_base;
@@ -371,23 +378,17 @@ static int test_inet_send(struct io_uring *ring)
 			return 1;
 		}
 
-		for (i = 0; i < 256; i++) {
-			bool fixed_buf = i & 1;
-			struct sockaddr_storage *addr_arg = (i & 2) ? &addr : NULL;
-			bool small_send = i & 4;
-			bool cork = i & 8;
-			bool mix_register = i & 16;
-			bool aligned = i & 32;
-			bool large_buf = i & 64;
-			int buf_idx = aligned ? 0 : 1;
-			bool force_async = i & 128;
-
-			if (large_buf) {
-				buf_idx = 2;
-				if (!aligned || !tcp || small_send || cork)
-					continue;
-			}
-			if (!buffers_iov[buf_idx].iov_base)
+		for (i = 0; i < 128; i++) {
+			int buf_flavour = i & 3;
+			bool fixed_buf = i & 4;
+			struct sockaddr_storage *addr_arg = (i & 8) ? &addr : NULL;
+			bool cork = i & 16;
+			bool mix_register = i & 32;
+			bool force_async = i & 64;
+
+			if (buf_flavour == BUF_T_LARGE && !tcp)
+				continue;
+			if (!buffers_iov[buf_flavour].iov_base)
 				continue;
 			if (tcp && cork)
 				continue;
@@ -397,8 +398,8 @@ static int test_inet_send(struct io_uring *ring)
 				continue;
 
 			ret = do_test_inet_send(ring, sock_client, sock_server, fixed_buf,
-						addr_arg, small_send, cork, mix_register,
-						buf_idx, force_async);
+						addr_arg, cork, mix_register,
+						buf_flavour, force_async);
 			if (ret) {
 				fprintf(stderr, "send failed fixed buf %i, conn %i, addr %i, "
 					"cork %i\n",
@@ -498,8 +499,8 @@ int main(int argc, char *argv[])
 	tx_buffer = aligned_alloc(4096, len);
 	rx_buffer = aligned_alloc(4096, len);
 	if (tx_buffer && rx_buffer) {
-		buffers_iov[2].iov_base = tx_buffer;
-		buffers_iov[2].iov_len = len;
+		buffers_iov[BUF_T_LARGE].iov_base = tx_buffer;
+		buffers_iov[BUF_T_LARGE].iov_len = len;
 	} else {
 		printf("skip large buffer tests, can't alloc\n");
 
@@ -512,10 +513,12 @@ int main(int argc, char *argv[])
 		return T_EXIT_FAIL;
 	}
 
-	buffers_iov[0].iov_base = tx_buffer + 4096;
-	buffers_iov[0].iov_len = 4096;
-	buffers_iov[1].iov_base = tx_buffer + BUFFER_OFFSET;
-	buffers_iov[1].iov_len = 8192 - BUFFER_OFFSET - 13;
+	buffers_iov[BUF_T_NORMAL].iov_base = tx_buffer + 4096;
+	buffers_iov[BUF_T_NORMAL].iov_len = 4096;
+	buffers_iov[BUF_T_SMALL].iov_base = tx_buffer;
+	buffers_iov[BUF_T_SMALL].iov_len = 137;
+	buffers_iov[BUF_T_NONALIGNED].iov_base = tx_buffer + BUFFER_OFFSET;
+	buffers_iov[BUF_T_NONALIGNED].iov_len = 8192 - BUFFER_OFFSET - 13;
 
 	ret = io_uring_queue_init(32, &ring, 0);
 	if (ret) {
-- 
2.37.2


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

* [PATCH liburing v2 5/5] tests/zc: skip tcp w/ addr
  2022-09-05 22:05 [PATCH liburing v2 0/5] zc tests improvements Pavel Begunkov
                   ` (3 preceding siblings ...)
  2022-09-05 22:06 ` [PATCH liburing v2 4/5] tests/zc: name buffer flavours Pavel Begunkov
@ 2022-09-05 22:06 ` Pavel Begunkov
  2022-09-05 22:51 ` [PATCH liburing v2 0/5] zc tests improvements Jens Axboe
  5 siblings, 0 replies; 7+ messages in thread
From: Pavel Begunkov @ 2022-09-05 22:06 UTC (permalink / raw)
  To: io-uring; +Cc: Jens Axboe, asml.silence

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
---
 test/send-zerocopy.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/send-zerocopy.c b/test/send-zerocopy.c
index f996f22..39c5c5d 100644
--- a/test/send-zerocopy.c
+++ b/test/send-zerocopy.c
@@ -390,7 +390,7 @@ static int test_inet_send(struct io_uring *ring)
 				continue;
 			if (!buffers_iov[buf_flavour].iov_base)
 				continue;
-			if (tcp && cork)
+			if (tcp && (cork || addr_arg))
 				continue;
 			if (mix_register && (!cork || fixed_buf))
 				continue;
-- 
2.37.2


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

* Re: [PATCH liburing v2 0/5] zc tests improvements
  2022-09-05 22:05 [PATCH liburing v2 0/5] zc tests improvements Pavel Begunkov
                   ` (4 preceding siblings ...)
  2022-09-05 22:06 ` [PATCH liburing v2 5/5] tests/zc: skip tcp w/ addr Pavel Begunkov
@ 2022-09-05 22:51 ` Jens Axboe
  5 siblings, 0 replies; 7+ messages in thread
From: Jens Axboe @ 2022-09-05 22:51 UTC (permalink / raw)
  To: Pavel Begunkov, io-uring

On Mon, 5 Sep 2022 23:05:57 +0100, Pavel Begunkov wrote:
> Return accidentially disabled UDP testing, reduce runtime, and clean it up
> in preparation for zc sendmsg.
> 
> v2: kill __BUF_T_MAX
>     add patch 5/5
> 
> Pavel Begunkov (5):
>   tests/zc: move send size calc into do_test_inet_send
>   tests/zc: use io_uring for rx
>   tests/zc: fix udp testing
>   tests/zc: name buffer flavours
>   tests/zc: skip tcp w/ addr
> 
> [...]

Applied, thanks!

[1/5] tests/zc: move send size calc into do_test_inet_send
      commit: 7f80be601474ed3702ecf9a39da14534df897560
[2/5] tests/zc: use io_uring for rx
      commit: ec19550c0fec57bef77c49a1326e4e6837b039ae
[3/5] tests/zc: fix udp testing
      commit: 3674cb90514a316ce83fe17c3ac5bfff3da453d3
[4/5] tests/zc: name buffer flavours
      commit: 74970081956c2d9a937c3a98fac60173d479f394
[5/5] tests/zc: skip tcp w/ addr
      commit: c7ad43212d4aa576171ae7465f31b047e880da9e

Best regards,
-- 
Jens Axboe



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

end of thread, other threads:[~2022-09-05 22:51 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-09-05 22:05 [PATCH liburing v2 0/5] zc tests improvements Pavel Begunkov
2022-09-05 22:05 ` [PATCH liburing v2 1/5] tests/zc: move send size calc into do_test_inet_send Pavel Begunkov
2022-09-05 22:05 ` [PATCH liburing v2 2/5] tests/zc: use io_uring for rx Pavel Begunkov
2022-09-05 22:06 ` [PATCH liburing v2 3/5] tests/zc: fix udp testing Pavel Begunkov
2022-09-05 22:06 ` [PATCH liburing v2 4/5] tests/zc: name buffer flavours Pavel Begunkov
2022-09-05 22:06 ` [PATCH liburing v2 5/5] tests/zc: skip tcp w/ addr Pavel Begunkov
2022-09-05 22:51 ` [PATCH liburing v2 0/5] zc tests improvements Jens Axboe

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.