Internships/ProjectIdeas/FUSEUringCmd

From QEMU
Revision as of 15:36, 6 February 2025 by Stefanha (talk | contribs) (Created page with "== FUSE-over-io_uring == '''Summary:''' Extend QEMU's FUSE export type with FUSE-over-io_uring support FUSE-over-io_uring is a new high-performance interface for Filesystem in Userspace (FUSE) servers. The FUSE kernel code has added uring_cmd support so that FUSE servers can send and receive data directly over io_uring instead of reading/writing from/to the FUSE device. This reduces the number of system calls, as well as allowing for batching and polling, so that CPU o...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

FUSE-over-io_uring

Summary: Extend QEMU's FUSE export type with FUSE-over-io_uring support

FUSE-over-io_uring is a new high-performance interface for Filesystem in Userspace (FUSE) servers. The FUSE kernel code has added uring_cmd support so that FUSE servers can send and receive data directly over io_uring instead of reading/writing from/to the FUSE device. This reduces the number of system calls, as well as allowing for batching and polling, so that CPU overhead should be reduced.

QEMU's FUSE export type presents a file containing the contents of a disk image. This is a convenient way of using tools like fdisk(1) or dd(1) on a non-raw disk image file, like qcow2, that these tools would otherwise not be able to operate on. The current FUSE export implementation uses libfuse's FUSE device file descriptor handling APIs (fuse_session_fd(), fuse_session_receive_buf(), etc) to read(2)/write(2) in the traditional way.

Your task is to add FUSE-over-io_uring support as an alternative mode on systems where FUSE-over-io_uring is available. This will involve not just using new libfuse APIs for processing I/O requests via io_uring, but also modifying the QEMU FUSE export code to support multiple in-flight requests and request processing in multiple IOThreads. An I/O benchmark like fio(1) can be used to measure the performance effects of your new FUSE-over-io_uring implementation.

Links:

Details:

  • Project size: 350 hours
  • Skill level: intermediate
  • Language: C
  • Mentors: Kevin Wolf (kwolf@redhat.com), Stefan Hajnoczi (stefanha@redhat.com)