Qdrant under the hood: io_uring
Blog post from Qdrant
Qdrant version 1.3.0 introduces an io_uring-based asynchronous storage backend on Linux systems, enhancing performance by reducing syscall overhead, particularly in IO-bound scenarios where disk operations are involved. Traditional synchronous IO models evolved from process-per-request to thread-per-request, but limitations persisted until asynchronous IO methods like select and epoll were introduced. However, io_uring, developed by Jens Axboe, offers a more efficient alternative by minimizing copying overhead and enabling over 100k concurrent requests due to its queue-based architecture. In the context of Qdrant, this advancement is significant for datasets that cannot fully reside in memory, as io_uring mitigates the overhead associated with disk latency, allowing for more efficient CPU usage during disk operations. Benchmark tests using io_uring versus mmap demonstrate significant performance gains, especially in environments with high disk latency, such as network drives, prompting users to evaluate their specific use cases for potential benefits. While io_uring is relatively new and may be approached with caution by administrators, its adoption can lead to substantial efficiency improvements, though its effectiveness depends on whether the workload is IO-bound or memory-resident.