Qdrant 内部机制:io_uring

Qdrant 内部机制:io_uring

💡 原文英文,约1300词,阅读约需5分钟。
📝

内容提要

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,因为性能提升因用例而异。

🏷️

标签

➡️

继续阅读