fusedev: support splice to handle FUSE requests.
- Support enable splice_read/splice_write on FuseChannel.
- Add splice interface for ZeroCopyReader and ZeroCopyWriter.
- Add unit-test cases for splice interface.
It seems that async-io is not a complete implementation now, so splice only supports sync-io in this PR.
We test on network fs(based on fuse-backend-rs) using fio. (1 job, 128k bs, psync, randread) For local socket: 10%~20% performance improvement. For remote socket: 5%~10% performance improvement.
@bergwolf @jiangliu thanks for reviewing.
We also test on write cases: For large user io (>128K), it has at least 10% improvement of performance.
Is that possible to add splice() usage to
tests/passthroughas example, or as smoke CI?
I'll do it right now.
smoke test of splice is ready now. xfstest take too much time. so I manually trigger xfstest with splice enabled. Result is below: https://github.com/cloud-hypervisor/fuse-backend-rs/actions/runs/7608075934/job/20716538551?pr=116