
TL;DR
Conviva replaced mmap with Io_uring in their Rust-based query engine, expecting performance gains, but instead experienced slower query response times under heavy loads.
✦ Why It Matters
Evaluate your I/O strategies under load to ensure they meet performance expectations in production environments.
Key Takeaways
Full Summary
At Conviva, mmap was initially used for efficient reading of large Arrow IPC files in a Rust-based query engine. However, under heavy concurrent loads, mmap caused significant latency issues due to page cache thrashing and lock contention.
The team attempted to replace mmap with io_uring to bypass the page cache and improve performance. Initial tests showed a reduction in major faults but resulted in a 60% increase in total query time compared to mmap.
The architecture, particularly the Batch Materialization Layer, introduced complexities that hindered performance gains. Despite the promise of io_uring, the implementation did not meet expectations, highlighting the challenges of optimizing I/O in high-concurrency environments.
Related