[lustre-discuss] Lustre NVMe Flash Pool – lfs mirror Resync Performance and Best Practices
Ben Halfon
ben.Halfon at mobileye.com
Thu Aug 20 05:35:48 UTC 2026
Hi all,
I’m writing to ask the Lustre community for advice on the best way to utilize NVMe OSTs as a flash pool in a ZFS-based Lustre environment.
>From our initial research, it seems that one approach for implementing a flash-pool-like setup is to use the Robinhood v4 policy engine to manage files and periodically perform operations such as:
lfs mirror resync
lfs mirror split --mirror-id <nvme_stripe_id> -d
Our main issue is the performance of lfs mirror resync.
We observed that lfs mirror resync uses Direct I/O, and in our environment, we are currently seeing very low throughput, around 8–20 MB/s. Increasing the maximum number of RPCs in flight improved the performance somewhat, but we still cannot get close to the 250–300 MB/s write performance that we can achieve with a single process using dd directly to the NVMe OST.
We also noticed that Lustre doesn't have Direct I/O support in the ZFS layer, so we initially suspected this could be contributing to the problem. We tested the Direct I/O ZFS patch:
https://review.whamcloud.com/c/fs/lustre-release/+/41689/
However, applying the patch did not improve the lfs mirror resync performance in our case.
We would therefore appreciate any feedback from the community regarding:
* What kind of performance should we expect from lfs mirror resync?
* Are there any Lustre, ZFS, or RPC-related tunables that are particularly relevant to improving mirror resync performance?
* Are there known limitations or performance considerations when using lfs mirror resync with ZFS-based OSTs?
* Has anyone successfully used FLR/mirrors as the basis for implementing an NVMe flash pool?
* Is there a better or more recommended way to implement a hot/cold flash-pool architecture, where files are initially written to NVMe and later migrated to HDD when they become cold or when the NVMe tier reaches a certain utilization level?
Test Environment
Lustre servers
* Lustre 2.17
* Additional patch: https://review.whamcloud.com/c/fs/lustre-release/+/61103/ (fixes an issue with small 4K random blocks)
* 2 × MDS, 1 MDT each
* 2 × NVMe OSS, 1 OST each
* 2 × HDD OSS, 1 OST each
* AlmaLinux 9.7
* Kernel: 5.14.0-611.5.1.el9_7.x86_64
* ZFS: 2.3.8
* Network: RoCEv2 and TCP on the Lustre server side
Clients
* AlmaLinux 9.7 — 2 × 100 Gb/s RoCEv2
* AlmaLinux 9.6 — 2 × 40 Gb/s TCP
This is currently a test environment, so we are open to different approaches and would especially appreciate recommendations based on real-world experience.
Thanks in advance for any advice, tuning recommendations, or alternative approaches you can share.
Best regards,
Ben
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lustre.org/pipermail/lustre-discuss_lists.lustre.org/attachments/20260820/d074f5b8/attachment.html>
More information about the lustre-discuss
mailing list