On Thu, Mar 30, 2023 at 07:36:13PM +0800, Ming Lei wrote: > Hello Jens and Guys, > > Add generic fused command, which can include one primary command and multiple > secondary requests. This command provides one safe way to share resource between > primary command and secondary requests, and primary command is always > completed after all secondary requests are done, and resource lifetime > is bound with primary command. > > With this way, it is easy to support zero copy for ublk/fuse device, and > there could be more potential use cases, such as offloading complicated logic > into userspace, or decouple kernel subsystems. > > Follows ublksrv code, which implements zero copy for loop, nbd and > qcow2 targets with fused command: > > https://github.com/ming1/ubdsrv/tree/fused-cmd-zc-for-v6 > > All three(loop, nbd and qcow2) ublk targets have supported zero copy by passing: > > ublk add -t [loop|nbd|qcow2] -z .... > > Also add liburing test case for covering fused command based on miniublk > of blktest. > > https://github.com/ming1/liburing/tree/fused_cmd_miniublk_for_v6 > > Performance improvement is obvious on memory bandwidth related workloads, > such as, 1~2X improvement on 64K/512K BS IO test on loop with ramfs backing file. > ublk-null shows 5X IOPS improvement on big BS test when the copy is avoided. > > Please review and consider for v6.4. > > V6: > - re-design fused command, and make it more generic, moving sharing buffer > as one plugin of fused command, so in future we can implement more plugins > - document potential other use cases of fused command > - drop support for builtin secondary sqe in SQE128, so all secondary > requests has standalone SQE > - make fused command as one feature > - cleanup & improve naming Hi Jens, Can you apply ublk cleanup patches 7~11 on for-6.4? For others, we may delay to 6.5, and I am looking at other approach too. Thanks, Ming