* [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.