Combining Buffered I/O and Direct I/O in Distributed File Systems
summary
Implements a dynamic IO-mode chooser inside Lustre that switches between buffered and direct I/O based on IO size, lock contention, and memory pressure; adds unaligned direct IO handling, server-side writeback, cross-file batching and delayed allocation. Evaluated on NVMe-backed servers with up to 32 clients, IO500 microbenchmarks and a 512-process NE5000 CFD run (≈600 GB, 130k requests switched), yielding up to 3× throughput vs vanilla Lustre and up to 13× vs other systems; code is opt-in and landing in Lustre 2.16.
AI-written summary · about
chapters (22)
- 0:00Buffered vs direct I/O intro
- 1:00Buffered vs direct I/O performance
- 2:47Challenges and benefits of direct I/O adoption
- 3:29Page cache cost in buffered I/O
- 4:31Lustre architecture overview
- 5:59When buffered and direct I/O perform best
- 7:02Goals for mixed I/O
- 7:45Unaligned direct I/O in Lustre
- 8:07Client I/O mode decision
- 9:54Lock contention impact on I/O
- 10:38Memory pressure effects
- 10:59Server-side writeback
- 11:41Batch buffered writes
- 12:24Delayed allocation benefits
- 13:05Consistency with mixed I/O
- 13:49Auto I/O config
- 14:10Evaluation setup
- 15:15Single process I/O results
- 16:00MDTest small file analysis
- 17:25IOR strided I/O performance
- 18:29NEK5000 HPC results
- 19:55Conclusion
related talks
17mλ-IO: A Unified IO Stack for Computational Storage
47mExploring Linux Memory Usage and IO Performance in Cloud Native Applications
16mWhen DDIO Meets Page Coloring: Revisiting DDIO Performance with Sepia
01h 01mFile I/O for Game Developers: Past, Present, and Future with C++
19mAsynchronous I/O Stack: A Low-latency Kernel I/O Stack for Ultra-Low Latency SSDs
19mBest I/O is No I/O
36mIntroducing the libblkio High-performance Block I/O API
19mSpeeding Up VM’s I/O Sharing Host's io_uring Queues With Guests
