The Linux kernel's FUSE code for enabling file-systems in user-space is enjoying some nice speed boosts with the in-development Linux 7.3 kernel. Driving the FUSE gains with Linux 7.3 is landing support for IO_uring buffer pools and zero-copy handling. Joanne Koong who authored these FUSE IO_uring additions explained in the v7 patch series: "Prior to this series, ents and buffers are tightly coupled where each entry has its own dedicated payload buffer, requiring N buffers for N entries where each buffer must be large enough to accommodate the maximum payload size. This is suboptimal as most request types require vastly less bytes than the maximum payload size and some requests do not require payload buffers at all. This series allows servers to pass in a buffer pool (a contiguous chunk of memory) that the kernel will use as it wishes for servicing ents/requests. This decoupling reduces the memory usage requirements needed to use fuse-io-uring and lets the kernel do any optimizations for assigning payload memory to requests. This series additionally adds zero copy to fuse io-uring. The server can directly access client pages or page cache folios without copying data through an intermediary buffer. This requires CAP_SYS_ADMIN privileges and using buffer pools." Benchmarks done by Joanne are showing very nice gains for FUSE with these changes: In addition to this buffer pools and zero-copy support for the FUSE IO_uring transport, there are many bug fixes and other changes in this release. There is also preparations for FUSE to support large folios but that isn't over the finish line for Linux 7.3. More details for those interested via the FUSE merge.
Linux 7.3 FUSE Delivering Nice Performance Improvements
Full Article
Original Source
Read the full article at Phoronix →KhanList aggregates and links to publicly available news content. We do not host full articles from third-party sources. Always verify important information with original sources.