在 2021/10/18 下午8:31, Pavel Begunkov 写道:
On 10/18/21 11:29, Hao Xu wrote:
1/2 is a prep patch. 2/2 is the main one.
The good thing: see commit message.
the side effect: for normal io-worker path, added two if and two local
variables. for FORCE_ASYNC path, added three if and several dereferences
I think it is fine since the io-worker path is not the fast path, and
the benefit of this patchset is worth it.
We don't care about overhead in iowq, but would be better to get rid
of the in_worker in io_read(). See comments to 1/2.
Btw, you told that it performs better comparing to normal
IOSQE_ASYNC. I'm confused, didn't we agree that it can be
merged into IOSQE_ASYNC without extra flags?
I see what you are saying, forgot to remove the flag
stuff..will be more careful.
Btw, we need to tweak the io-cancel.c a bit, not a big problem.
liburing tests will come later.
v1-->v2:
- split logic of force_nonblock
- tweak added code in io_wq_submit_work to reduce overhead
from Pavel's commments.
Hao Xu (2):
io_uring: split logic of force_nonblock
io_uring: implement async hybrid mode for pollable requests
fs/io_uring.c | 85 ++++++++++++++++++++++++++---------
include/uapi/linux/io_uring.h | 4 +-
2 files changed, 66 insertions(+), 23 deletions(-)