Skip to content

Commit

Permalink
Merge branch 'io_uring-depth'
Browse files Browse the repository at this point in the history
* io_uring-depth:
  engines/io_uring: don't mess with non power-of-2 queue depth
  • Loading branch information
axboe committed Nov 5, 2024
2 parents 6a193ce + af0ad0f commit 433f390
Showing 1 changed file with 14 additions and 9 deletions.
23 changes: 14 additions & 9 deletions engines/io_uring.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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];
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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 *));
Expand Down Expand Up @@ -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;

Expand Down

0 comments on commit 433f390

Please sign in to comment.