hello, This is a gentle ping. Regards, Xiaogaung Wang
The first patch tries to improve various issues in current implementation: The prepare_to_wait() usage in __io_sq_thread() is weird. If multiple ctxs share one same poll thread, one ctx will put poll thread in TASK_INTERRUPTIBLE, but if other ctxs have work to do, we don't need to change task's stat at all. I think only if all ctxs don't have work to do, we can do it. We use round-robin strategy to make multiple ctxs share one same poll thread, but there are various condition in __io_sq_thread(), which seems complicated and may affect round-robin strategy. In io_sq_thread(), we always call io_sq_thread_drop_mm() when we complete a round of ctxs iteration, which maybe inefficient. The second patch adds a IORING_SETUP_SQPOLL_PERCPU flag, for those rings which have SQPOLL enabled and are willing to be bound to one same cpu, hence share one same poll thread, add a capability that these rings can share one poll thread by specifying a new IORING_SETUP_SQPOLL_PERCPU flag. FIO tool can integrate this feature easily, so we can test multiple rings to share same poll thread easily. Xiaoguang Wang (2): io_uring: refactor io_sq_thread() handling io_uring: support multiple rings to share same poll thread by specifying same cpu fs/io_uring.c | 307 ++++++++++++++++++++-------------- include/uapi/linux/io_uring.h | 1 + 2 files changed, 181 insertions(+), 127 deletions(-)