On 10/25/24 13:22, Ming Lei wrote:
The 1st 3 patches are cleanup, and prepare for adding sqe group. The 4th patch supports generic sqe group which is like link chain, but allows each sqe in group to be issued in parallel and the group shares same IO_LINK & IO_DRAIN boundary, so N:M dependency can be supported with sqe group & io link together. The 5th & 6th patches supports to lease other subsystem's kbuf to io_uring for use in sqe group wide. The 7th patch supports ublk zero copy based on io_uring sqe group & leased kbuf. Tests: 1) pass liburing test - make runtests 2) write/pass sqe group test case and sqe provide buffer case: https://github.com/ming1/liburing/tree/uring_group - covers related sqe flags combination and linking groups, both nop and one multi-destination file copy. - cover failure handling test: fail leader IO or member IO in both single group and linked groups, which is done in each sqe flags combination test - cover io_uring with leased group kbuf by adding ublk-loop-zc
To make my position clear, I think the table approach will turn much better API-wise if the performance suffices, and we can only know that experimentally. I tried that idea with sockets back then, and it was looking well. It'd be great if someone tries to implement and compare it, though I don't believe I should be trying it, so maybe Ming or Jens can, especially since Jens already posted a couple series for problems standing in the way, i.e global rsrc nodes and late buffer binding. In any case, I'm not opposing to the series if Jens decides to merge it. -- Pavel Begunkov