The following changes since commit 6a193ce90a4d8958d5000809dd8e3286e8215d0f: t/io_uring: add symbolic defines for NOP flags (2024-11-04 10:27:06 -0700) are available in the Git repository at: git://git.kernel.dk/fio.git master for you to fetch changes up to f2415d711a11fec6d5e4081a7bdc060b98c76043: t/io_uring: fix size confusion in allocate_mem() (2024-11-05 07:57:41 -0700) ---------------------------------------------------------------- Jens Axboe (3): engines/io_uring: don't mess with non power-of-2 queue depth Merge branch 'io_uring-depth' t/io_uring: fix size confusion in allocate_mem() engines/io_uring.c | 23 ++++++++++++++--------- t/io_uring.c | 2 +- 2 files changed, 15 insertions(+), 10 deletions(-) --- Diff of recent changes: diff --git a/engines/io_uring.c b/engines/io_uring.c index 60b4f653..79eacbc4 100644 --- a/engines/io_uring.c +++ b/engines/io_uring.c @@ -770,7 +770,8 @@ static enum fio_q_status fio_ioring_queue(struct thread_data *td, fio_ro_check(td, io_u); - if (ld->queued == ld->iodepth) + /* should not hit... */ + if (ld->queued == td->o.iodepth) return FIO_Q_BUSY; /* if async trim has been tried and failed, punt to sync */ @@ -1006,7 +1007,7 @@ static int fio_ioring_queue_init(struct thread_data *td) { struct ioring_data *ld = td->io_ops_data; struct ioring_options *o = td->eo; - int depth = td->o.iodepth; + int depth = ld->iodepth; struct io_uring_params p; int ret; @@ -1086,7 +1087,7 @@ static int fio_ioring_cmd_queue_init(struct thread_data *td) { struct ioring_data *ld = td->io_ops_data; struct ioring_options *o = td->eo; - int depth = td->o.iodepth; + int depth = ld->iodepth; struct io_uring_params p; int ret; @@ -1231,7 +1232,7 @@ static int fio_ioring_post_init(struct thread_data *td) return 1; } - for (i = 0; i < td->o.iodepth; i++) { + for (i = 0; i < ld->iodepth; i++) { struct io_uring_sqe *sqe; sqe = &ld->sqes[i]; @@ -1272,7 +1273,7 @@ static int fio_ioring_cmd_post_init(struct thread_data *td) return 1; } - for (i = 0; i < td->o.iodepth; i++) { + for (i = 0; i < ld->iodepth; i++) { struct io_uring_sqe *sqe; if (o->cmd_type == FIO_URING_CMD_NVME) { @@ -1330,9 +1331,13 @@ static int fio_ioring_init(struct thread_data *td) ld = calloc(1, sizeof(*ld)); - /* ring depth must be a power-of-2 */ - ld->iodepth = td->o.iodepth; - td->o.iodepth = roundup_pow2(td->o.iodepth); + /* + * The internal io_uring queue depth must be a power-of-2, as that's + * how the ring interface works. So round that up, in case the user + * set iodepth isn't a power-of-2. Leave the fio depth the same, as + * not to be driving too much of an iodepth, if we did round up. + */ + ld->iodepth = roundup_pow2(td->o.iodepth); /* io_u index */ ld->io_u_index = calloc(td->o.iodepth, sizeof(struct io_u *)); @@ -1362,7 +1367,7 @@ static int fio_ioring_init(struct thread_data *td) } parse_prchk_flags(o); - ld->iovecs = calloc(td->o.iodepth, sizeof(struct iovec)); + ld->iovecs = calloc(ld->iodepth, sizeof(struct iovec)); td->io_ops_data = ld; diff --git a/t/io_uring.c b/t/io_uring.c index dec9552b..eea5fe0a 100644 --- a/t/io_uring.c +++ b/t/io_uring.c @@ -1006,7 +1006,7 @@ static void *allocate_mem(struct submitter *s, int size) return numa_alloc_onnode(size, s->numa_node); #endif - if (posix_memalign(&buf, t_io_uring_page_size, bs)) { + if (posix_memalign(&buf, t_io_uring_page_size, size)) { printf("failed alloc\n"); return NULL; }