On Thu, Mar 30, 2023 at 07:36:16PM +0800, Ming Lei wrote: > Multiple requests submitted as one whole request logically, and the 1st one > is primary command(IORING_OP_FUSED_CMD), and the others are secondary > requests, which number can be retrieved from primary SQE. > > Primary command is responsible for providing resources and submitting > secondary requests, which depends on primary command's resources, and > primary command won't be completed until all secondary requests are done. > > The provided resource has same lifetime with primary command, and it > lifetime won't cross multiple OPs, and this way provides safe way for > secondary OPs to use the resource. > > Add generic IORING_OP_FUSED_CMD for modeling this primary/secondary > relationship among requests. BTW, this model also solves 1:N dependency problem of io_uring. Current io_uring can't handle this kind of dependency(1:N) efficiently, and simply convert it into one linked list: - N requests(1~n) depends on one request(0), and there isn't dependency among these N requests - current io_uring converts the dependency to linked list of (N + 1) requests (0, 1, ...., n), in which all requests are just issued one by one from 0 to n, inefficiently The primary/secondary model solves it by issuing request 0 first, then issues all other N requests concurrently. Thanks, Ming