Recent changes (master)
The following changes since commit e0abe38815e1c8cf7a319c6fbd0b1d60691db3d5:
t/io_uring: only set IORING_ENTER_GETEVENTS when actively reaping (2019-01-11 14:40:16 -0700)
are available in the Git repository at:
git://git.kernel.dk/fio.git master
for you to fetch changes up to 8025517dfa599be4bc795e4af7c9012d10b81bc5:
t/io_uring: add IORING_OP_NOP support (2019-01-12 22:14:54 -0700)
----------------------------------------------------------------
Jens Axboe (1):
t/io_uring: add IORING_OP_NOP support
os/io_uring.h | 1 + t/io_uring.c | 28 +++++++++++++++++++++------- 2 files changed, 22 insertions(+), 7 deletions(-)
---
Diff of recent changes:
os/io_uring.h +1 -0
@@ -47,6 +47,7 @@ struct io_uring_sqe {#define IORING_SETUP_SQPOLL (1 << 1)/* SQ poll thread */ #define IORING_SETUP_SQ_AFF (1 << 2)/* sq_thread_cpu is valid */ +#define IORING_OP_NOP 0#define IORING_OP_READV 1#define IORING_OP_WRITEV 2#define IORING_OP_FSYNC 3
t/io_uring.c +21 -7
@@ -93,6 +93,7 @@ static int fixedbufs = 1; /* use fixed user buffers */static int buffered =0 ;/* use buffered IO, not O_DIRECT */ static int sq_thread_poll =0 ;/* use kernel submission/poller thread */ static int sq_thread_cpu =-1 ;/* pin above thread to this CPU */ +static int do_nop =0 ;/* no-op SQ ring commands */ static int io_uring_register_buffers (struct submitter *s) {
@@ -101,6 +102,9 @@ static int io_uring_register_buffers(struct submitter *s) .nr_iovecs = DEPTH }; +if (do_nop) +return 0 ; +return syscall (__NR_sys_io_uring_register, s->ring_fd,IORING_REGISTER_BUFFERS , ®); }
@@ -110,6 +114,9 @@ static int io_uring_register_files(struct submitter *s)struct io_uring_register_files reg;int i; +if (do_nop) +return 0 ; + s->fds =calloc (s->nr_files,sizeof (__s32));for (i =0 ; i < s->nr_files; i++) { s->fds[i] = s->files[i].real_fd;
@@ -151,6 +158,11 @@ static void init_io(struct submitter *s, unsigned index)struct file *f;long r; +if (do_nop) { + sqe->opcode =IORING_OP_NOP ; +return ; + } +if (s->nr_files ==1 ) { f = &s->files[0 ]; }else {
@@ -248,11 +260,13 @@ static int reap_events(struct submitter *s)if (head == *ring->tail)break ; cqe = &ring->cqes[head & cq_ring_mask]; - f = (struct file *) cqe->user_data; - f->pending_ios--; -if (cqe->res !=BS ) { -printf ("io: unexpected ret=%d\n" , cqe->res); -return -1 ; +if (!do_nop) { + f = (struct file *) cqe->user_data; + f->pending_ios--; +if (cqe->res !=BS ) { +printf ("io: unexpected ret=%d\n" , cqe->res); +return -1 ; + } }if (cqe->flags &IOCQE_FLAG_CACHEHIT ) s->cachehit++;
@@ -454,7 +468,7 @@ int main(int argc, char *argv[])struct rlimit rlim;void *ret; -if (argc <2 ) { +if (!do_nop && argc <2 ) {printf ("%s: filename\n" , argv[0 ]);return 1 ; }
@@ -464,7 +478,7 @@ int main(int argc, char *argv[]) flags |=O_DIRECT ; i =1 ; -while (i < argc) { +while (!do_nop && i < argc) {struct file *f = &s->files[s->nr_files]; fd =open (argv[i], flags);