🤖 AI Summary
This work addresses the high metadata overhead and serialization bottlenecks in Linux buffered reads under large-buffer scenarios, where fine-grained page cache operations impede the full utilization of modern parallel SSD throughput. To overcome this limitation, the authors propose a multi-stage read stack architecture that treats large-range reads as a single unit, decoupling page cache management from I/O scheduling. By introducing staged execution, proactive user-page fault handling, reordered and opportunistic parallel data copying, and optional parallel I/O submission, the design enables batched, asynchronous, and parallelized read paths. Implemented atop Linux 6.6.58, the approach achieves up to a 6.56× bandwidth improvement in MiB-scale fio reads, reaches 36.87 GiB/s (4.44× speedup) for 128 MiB random reads on a five-drive NVMe RAID0 array, and accelerates DuckDB/Parquet queries by 1.80–2.15× and ExecuTorch model loading by 3.17–3.61×.
📝 Abstract
Large-buffer reads increasingly connect data-intensive applications to high-speed storage. They amortize system-call overhead and create a larger in-kernel window for organizing page-cache work and submitting I/O. However, Linux buffered read primarily exploits only the former benefit. Within a large read, its conventional interleaved path repeatedly switches among fine-grained page-cache operations, amplifying metadata and serial orchestration overheads and failing to consistently expose enough in-flight requests to modern parallel SSDs.
We present MARS, a multi-stage accelerated read stack for synchronous large-buffer buffered reads. MARS treats each large-range read as one unit of work and stages page-cache operations by data structure and dependency. During I/O waits, it handles user-buffer page faults and performs reorderable data copies early. Opportunistic kernel workers then copy remaining data in parallel and, when the backend provides sufficient parallelism, optionally submit I/O in parallel. We implement MARS in Linux 6.6.58. For MiB-scale fio reads, MARS improves bandwidth by up to 6.56 times over Linux. On five NVMe SSDs in RAID0, it reaches 36.87 GiB/s for 128 MiB random reads, 4.44 times Linux. MARS also accelerates DuckDB/Parquet queries by 1.80--2.15 times and ExecuTorch model loading by 3.17--3.61 times.