From: Hao Xu <howeyxu@xxxxxxxxxxx> This is the second version of fixed worker implementation. Wrote a nop test program to test it, 3 fixed-workers VS 3 normal workers. normal workers: ./run_nop_wqe.sh nop_wqe_normal 200000 100 3 1-3 time spent: 10464397 usecs IOPS: 1911242 time spent: 9610976 usecs IOPS: 2080954 time spent: 9807361 usecs IOPS: 2039284 fixed workers: ./run_nop_wqe.sh nop_wqe_fixed 200000 100 3 1-3 time spent: 17314274 usecs IOPS: 1155116 time spent: 17016942 usecs IOPS: 1175299 time spent: 17908684 usecs IOPS: 1116776 About 2x improvement. From perf result, almost no acct->lock contension. Test program: https://github.com/HowHsu/liburing/tree/fixed_worker liburing/test/nop_wqe.c v3->v4: - make work in fixed worker's private worfixed worker - tweak the io_wqe_acct struct to make it clearer Hao Xu (11): io-wq: add a worker flag for individual exit io-wq: change argument of create_io_worker() for convienence io-wq: add infra data structure for fixed workers io-wq: tweak io_get_acct() io-wq: fixed worker initialization io-wq: fixed worker exit io-wq: implement fixed worker logic io-wq: batch the handling of fixed worker private works io_uring: add register fixed worker interface io-wq: add an work list for fixed worker io_uring: cancel works in exec work list for fixed worker fs/io-wq.c | 481 ++++++++++++++++++++++++++++++---- fs/io-wq.h | 8 + fs/io_uring.c | 71 +++++ include/uapi/linux/io_uring.h | 11 + 4 files changed, 525 insertions(+), 46 deletions(-) base-commit: fa5da31df51f8f581ec1776e613c1bcabbe9559f -- 2.25.1