内容提要
Qdrant 1.3.0引入了基于io_uring的异步存储后端,以提高Linux系统的IO性能。io_uring通过减少系统调用和上下文切换,支持高并发请求,适合处理大数据集。启用此功能可优化磁盘IO性能,尤其在数据集不完全在内存时。基准测试表明,io_uring在处理延迟较高的网络磁盘时能更有效利用CPU资源,建议在查询性能优先时启用。
延伸解读
io_uring 的适用场景与限制
io_uring 并非在所有场景下都能带来性能提升。文章指出,如果数据集完全在内存中,启用 io_uring 将无效;许多查询并非 IO 密集型,因此开销可能无法测量。此外,io_uring 仍较年轻(2019 年随内核 5.1 引入),一些管理员可能对其稳定性存有顾虑。因此,在决定启用前,应评估自身风险承受能力。
基准测试揭示的性能差异
文章中的基准测试使用 laion 数据集(500 万条 768 维向量),在标量量化 + HNSW 配置下,将原始向量存储在延迟较高的网络磁盘上。结果显示,io_uring 后端能更有效地利用 CPU 资源,减少 IO 等待时间。例如,在 oversampling=4、parallel=8 时,io_uring 的 CPU 使用率为 100%(4 核),而 mmap 仅为 50%,且 io_uring 的墙钟时间更短。这表明在高延迟磁盘上,io_uring 优势明显。
如何启用与回退 io_uring
在 Linux 系统上,可以通过在存储配置中设置 async_scorer: true 来启用 io_uring 异步评分器,或使用环境变量 QDRANT__STORAGE__PERFORMANCE__ASYNC_SCORER=true。若要回退到基于 mmap 的后端,只需删除 async_scorer 配置项或将其设为 false。启用后,Qdrant 将使用 io_uring 进行磁盘 IO,可能降低操作系统开销。
实践建议:先基准测试再部署
文章建议,如果磁盘上集合的查询性能优先级足够高,可以启用 io_uring 以减少操作系统开销。但在此之前,应使用自己的数据集和查询模式,分别对 mmap 和 io_uring 进行基准测试,测量墙钟时间和 IOPS。因为基准测试高度依赖具体用例,性能提升可能因工作负载而异。进行一次基准测试是获得潜在性能收益的小代价。
Q&A
Qdrant 1.3.0引入了什么新特性?
Qdrant 1.3.0引入了基于io_uring的异步存储后端,以提高Linux系统的IO性能。
io_uring如何提高IO性能?
io_uring通过减少系统调用和上下文切换,支持高并发请求,从而提高IO性能。
启用io_uring对Qdrant的影响是什么?
启用io_uring可以优化磁盘IO性能,尤其在数据集不完全在内存时,减少操作系统的IO开销。
基准测试显示io_uring的性能如何?
基准测试表明,io_uring在处理延迟较高的网络磁盘时能更有效利用CPU资源,提供更高的IOPS。
如何在Qdrant中启用io_uring?
在Qdrant配置中,将async_scorer设置为true,或使用环境变量QDRANT__STORAGE__PERFORMANCE__ASYNC_SCORER=true来启用io_uring。
使用io_uring时需要注意什么?
在启用io_uring之前,建议进行基准测试,以测量wall time和IOps,因为性能提升因用例而异。