Skip to content

Supports multi-stream devices #59

@Cici-Lii

Description

@Cici-Lii

Is your feature request related to a problem? Please describe.
Not relevant, this is a new feature. New multi-stream SSDs are widely used. These devices use data lifetime hints provided by the host to place different lifetimes data on different physical handles. By isolating data lifetimes, data with similar lifetimes are aggregated into the same GC (garbage collection) unit. During GC, the unit can be reset without additional copy operations, ultimately reducing write amplification and improving device endurance. We have developed a patch to support multi-stream devices.

Describe the solution you'd like
Modify the BeeGFS I/O path (including DIO, Buffer IO, and Page Cache IO) to enable data lifetime hints defined by upper-layer applications to be passed to multi-stream SSDs. This is achieved by leveraging the kernel's existing support for setting hints via Fcntl to implement hardware-level lifetime isolation. The modification includes adding a new field to the Message Structure to carry the kernel-supported i_write_hint field.

Describe alternatives you've considered
Maybe control the hardware directly? Like ioctl?

Additional context
The NVMe SSD (e.g. Flexible Data Placement SSD, TP4146) is supporting to recognize data lifetime information on device.
https://lwn.net/Articles/1018642/

Adding data lifetime information (hint) that passed to the devices to achieve lower write amplification and better performance.
This patches that add support in BeeGFS for data lifetime information.
Kernel file-systems (ext4, XFS, btrfs, F2FS) have already supported to set the hint by fcntl().
https://lkml.rescloud.iu.edu/2411.2/02654.html
https://lore.kernel.org/all/173099237654.321265.6588244483471280365.b4-ty@mit.edu/T/
https://lore.kernel.org/all/20231005194129.1882245-1-bvanassche@acm.org/

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions