数据中心应用

规格表上哪一行决定向量检索的 P99:串行读链路的延迟账

作者:军航科工半导体向量检索 / HNSW图索引 / QD1读延迟

图索引把查询压成几十次串行小块读,延迟基数由 QD1 响应时间决定,峰值 IOPS 回答的是另一个问题。本文拆解这笔延迟账、构建期集中消耗的耐久,以及怎么测才不会得出误导性结论。

一次近邻查询是几十次串行读

当向量集合超出内存容量,HNSW 这类图索引的邻居列表必须放到 SSD 上。一次近邻查询沿图走几十跳,每跳读一个邻居块,跳与跳之间存在严格依赖——上一跳的结果决定下一跳读哪里。队列深度因此天然很浅,常常就是 QD1 到 QD4,块大小落在 4KB 到 16KB 之间。带宽在这里几乎派不上用场:查询延迟等于单次读响应时间乘以跳数,中间没有任何可以并行掉的部分。

规格表上该看哪一行

同一份规格表上,4KB 随机读 1,500 KIOPS 与 QD1 平均读延迟 65 µs 描述的是两件事。前者是并发能力,回答的是这块盘同时能扛住多少条查询;后者才是单条查询的延迟基数,串行链路只吃后者。更麻烦的是线上服务按 P99 考核,而串联结构会把尾部放大——三十跳里任何一跳落在慢路径上,整条查询就慢,命中慢路径的概率随跳数累积。X9 系列的 J990X、J995X 按 Gen5 超低延迟高耐久定位,配合固件侧的低延迟 QoS 基线,目标正是把读延迟分布的右尾收窄,而不是把均值再压低几微秒。

构建期把耐久账一次性花掉

索引构建阶段的画像几乎完全相反:大批量顺序写与高并发随机读混合,持续数小时到数天,累计写入量可达数据集本身的数倍,耐久消耗集中而剧烈。CORE 7 里 J750 规划 1 DWPD(5 年)、J770 规划 3 DWPD,这个差别在需要频繁重建索引的场景下会被放大到肉眼可见。按查询期画像选盘,构建期就会变成瓶颈或者耐久风险;同一套系统的两个阶段,最优配置本来就不是同一个。上述规格目前是工程规划值,在内部工程平台 JH-E4U-C 上按型号推进验证。

怎么测才算数

照搬通用基准会得出误导性结论:把队列深度压到 32 去刷峰值 IOPS,测出来的数字与真实查询路径没有关系。有意义的做法是固定 QD1 到 QD4,按 4KB 与 16KB 分别采集完整的延迟分布,看 P99 与 P99.9 而不是平均值,并在后台回收活跃、盘接近满盘的状态下重复一遍——这两个条件在生产环境里长期成立,在空盘基准里却从不出现。Telemetry 可以把每一轮采集留档,让复现与归因不依赖单次跑分。

关键词
向量检索HNSW图索引QD1读延迟P99尾延迟索引构建耐久X9系列军航科工