Recent changes (master)
The following changes since commit ab1665679b00fd2b3f955596da837d9694732b24:
Merge branch 'doc_fixes' of https://github.com/sitsofe/fio (2019-12-21 07:04:58 -0700)
are available in the Git repository at:
git://git.kernel.dk/fio.git master
for you to fetch changes up to b10b1e70afaff8c9b00005e9238f2ad347a9c00a:
io_uring: add option for non-vectored read/write commands (2019-12-23 08:54:25 -0700)
----------------------------------------------------------------
Jens Axboe (1):
io_uring: add option for non-vectored read/write commands
engines/io_uring.c | 34 +++++++++++++++++------- os/linux/io_uring.h | 75 ++++++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 87 insertions(+), 22 deletions(-)
---
Diff of recent changes:
engines/io_uring.c +24 -10
@@ -75,9 +75,15 @@ struct ioring_options {unsigned int sqpoll_thread;unsigned int sqpoll_set;unsigned int sqpoll_cpu; +unsigned int nonvectored;unsigned int uncached; }; +static const int ddir_to_op[2 ][2 ] = { + {IORING_OP_READV ,IORING_OP_READ }, + {IORING_OP_WRITEV ,IORING_OP_WRITE } +}; +static int fio_ioring_sqpoll_cb (void *data,unsigned long long *val) {struct ioring_options *o = data;
@@ -133,6 +139,15 @@ static struct fio_option options[] = { .category = FIO_OPT_C_ENGINE, .group = FIO_OPT_G_IOURING, }, + { + .name = "nonvectored", + .lname = "Non-vectored", + .type = FIO_OPT_INT, + .off1 = offsetof(struct ioring_options, nonvectored), + .help = "Use non-vectored read/write commands", + .category = FIO_OPT_C_ENGINE, + .group = FIO_OPT_G_IOURING, + }, { .name = "uncached", .lname = "Uncached",
@@ -174,21 +189,20 @@ static int fio_ioring_prep(struct thread_data *td, struct io_u *io_u) }if (io_u->ddir ==DDIR_READ || io_u->ddir ==DDIR_WRITE ) { + sqe->opcode = ddir_to_op[io_u->ddir][!!o->nonvectored];if (o->fixedbufs) { -if (io_u->ddir ==DDIR_READ ) - sqe->opcode =IORING_OP_READ_FIXED ; -else - sqe->opcode =IORING_OP_WRITE_FIXED ; sqe->addr = (unsigned long ) io_u->xfer_buf; sqe->len = io_u->xfer_buflen; sqe->buf_index = io_u->index; }else { -if (io_u->ddir ==DDIR_READ ) - sqe->opcode =IORING_OP_READV ; -else - sqe->opcode =IORING_OP_WRITEV ; - sqe->addr = (unsigned long ) &ld->iovecs[io_u->index]; - sqe->len =1 ; +if (o->nonvectored) { + sqe->addr = (unsigned long ) + ld->iovecs[io_u->index].iov_base; + sqe->len = ld->iovecs[io_u->index].iov_len; + }else { + sqe->addr = (unsigned long ) &ld->iovecs[io_u->index]; + sqe->len =1 ; + } }if (!td->o.odirect && o->uncached) sqe->rw_flags =RWF_UNCACHED ;
os/linux/io_uring.h +63 -12
121 lines not on this page · raw message