liburing: Test all configurations with NOP test

This runs the NOP test with all four configurations:
- default SQE and CQE size
- large SQE size
- large CQE size
- large SQE and large CQE size

Signed-off-by: Stefan Roesch <shr@fb.com>
Link: https://lore.kernel.org/r/20220425182639.2446370-7-shr@fb.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
Stefan Roesch
2022-04-25 11:26:39 -07:00
committed by Jens Axboe
parent f30a3eee01
commit 129ff7ac96
2 changed files with 48 additions and 30 deletions
+13 -30
View File
@@ -11,6 +11,7 @@
#include <fcntl.h>
#include "liburing.h"
#include "test.h"
static int seq;
@@ -127,12 +128,14 @@ err:
return 1;
}
static int test_p(struct io_uring_params *p)
static int test_ring(unsigned flags)
{
struct io_uring ring;
struct io_uring_params p = { };
int ret;
ret = io_uring_queue_init_params(8, &ring, p);
p.flags = flags;
ret = io_uring_queue_init_params(8, &ring, &p);
if (ret) {
fprintf(stderr, "ring setup failed: %d\n", ret);
return 1;
@@ -150,29 +153,11 @@ static int test_p(struct io_uring_params *p)
goto err;
}
io_uring_queue_exit(&ring);
return 0;
err:
io_uring_queue_exit(&ring);
return ret;
}
static int test_normal_ring(void)
{
struct io_uring_params p = { };
return test_p(&p);
}
static int test_big_ring(void)
{
struct io_uring_params p = { };
p.flags = IORING_SETUP_SQE128;
return test_p(&p);
}
int main(int argc, char *argv[])
{
int ret;
@@ -180,17 +165,15 @@ int main(int argc, char *argv[])
if (argc > 1)
return 0;
ret = test_normal_ring();
if (ret) {
fprintf(stderr, "Normal ring test failed\n");
return ret;
}
ret = test_big_ring();
if (ret) {
fprintf(stderr, "Big ring test failed\n");
return ret;
FOR_ALL_TEST_CONFIGS {
fprintf(stderr, "Testing %s config\n", IORING_GET_TEST_CONFIG_DESCRIPTION());
ret = test_ring(IORING_GET_TEST_CONFIG_FLAGS());
if (ret) {
fprintf(stderr, "Normal ring test failed\n");
return ret;
}
}
fprintf(stderr, "PASS\n");
return 0;
}
+35
View File
@@ -0,0 +1,35 @@
/* SPDX-License-Identifier: MIT */
/*
* Description: Test configs for tests.
*/
#ifndef LIBURING_TEST_H
#define LIBURING_TEST_H
#ifdef __cplusplus
extern "C" {
#endif
typedef struct io_uring_test_config {
unsigned int flags;
const char *description;
} io_uring_test_config;
io_uring_test_config io_uring_test_configs[] = {
{ 0, "default" },
{ IORING_SETUP_SQE128, "large SQE"},
{ IORING_SETUP_CQE32, "large CQE"},
{ IORING_SETUP_SQE128 | IORING_SETUP_CQE32, "large SQE/CQE" },
};
#define FOR_ALL_TEST_CONFIGS \
for (int i = 0; i < sizeof(io_uring_test_configs) / sizeof(io_uring_test_configs[0]); i++)
#define IORING_GET_TEST_CONFIG_FLAGS() (io_uring_test_configs[i].flags)
#define IORING_GET_TEST_CONFIG_DESCRIPTION() (io_uring_test_configs[i].description)
#ifdef __cplusplus
}
#endif
#endif