Messages in this thread | | | Date | Sat, 1 Apr 2023 22:35:47 +0800 | From | Ming Lei <> | Subject | Re: [PATCH V6 03/17] io_uring: add generic IORING_OP_FUSED_CMD |
| |
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
| |