Initially, this project was motivated by reports from users who observed that some SSD/NVMe devices do not always handle highly localized allocation patterns particularly well. Early on, I associated this mostly with wear leveling, and I admit that wear leveling was part of the original motivation. However, during development it became clear that the allocation policy has potential benefits beyond that.
The intended use cases are:
-Filesystems where performance degradation appears to correlate with allocation concentration near specific LBA ranges.
-Workloads with heavy overwrite cycles, such as scratch disks, cache volumes, temporary build directories, VM images, and similar high-churn storage.
-Users who believe the filesystem should actively help avoid allocation hotspotting instead of relying entirely on device firmware to manage it.
The core idea is relatively simple:
-Rotate the starting block group for new allocations across per-CPU allocation zones.
-Use stream allocation consistently, encouraging files to be placed sequentially while distributing new allocations more evenly across block groups.
-Implement the policy as a separate allocation path, avoiding additional branches and complexity in the existing allocator.
-Leave the on-disk format unchanged.
-Allow the rotating allocator to evolve independently while keeping the existing allocator stable.
-Reduce repeated allocation activity within the same filesystem regions and naturally discourage allocation hotspotting.
Ted repeatedly asked me to identify the workload that would justify such an option. My goal was to demonstrate classes of workloads where this allocation policy may be beneficial, rather than to present a specific enterprise deployment that already depends on it.
To be completely transparent, I do not currently have a large production user or company requesting this mount option. The project originated from observed behavior, user reports, experimentation, and an attempt to determine whether an alternative allocation strategy could provide measurable benefits for certain workload patterns.
While the original motivation involved allocation distribution, the test results suggest there are additional benefits. In particular, some high-concurrency tests showed significantly improved tail latencies compared to the standard allocator, which is why I believe the idea deserves further investigation beyond the original wear-leveling discussion.
Results are available here:
https://github.com/mlohajner/RRALLOC/tree/main/5)%20high%20concurency%20tests
The repository also contains implementation details, design notes, and benchmark descriptions. The included LKML discussion is provided as additional context, documenting the technical arguments, questions, and concerns raised during the upstream review process.