1. 问题与动机
向量近邻搜索 (ANNS) 是搜索引擎、推荐系统与广告服务的底座组件。近年来 CCD-based 多核 CPU 因极致性价比,已经在小红书等大规模在线服务中几乎完全取代单 chiplet CPU 用于 in-memory 向量检索。但作者在生产环境观察到一个反直觉的现象:仅增加核数并不能线性提升 ANNS 吞吐。具体数据显示:96 核 EPYC 上 HNSW 吞吐仅达理想值的约 82%;IVF 在 2-12 个 CCD 上仅获 1.6×–2.8× 加速 (远低于线性 6×)。
根因在于 CCD-based 架构每个 CCD 独立持有 L3 cache,跨 CCD 共享则要走 IO die。生产流量呈强 Zipfian 分布:少量节点/聚簇承担绝大多数访问,单表 traffic 量级在数十 MB 到数千 MB 间相差一到几个量级,每个表的搜索时间也存在明显的"长尾"。如果朴素地把任务均匀分发到所有核心,会同时把多个"热"任务塞到同一 CCD,导致 L3 缓存互相驱逐 (cache pollution),热数据反复进出,使得堆核数边际收益快速衰减。这一矛盾对小红书的搜索/推荐/广告——每秒千万级 QPS、毫秒级延迟约束——直接转化为吞吐瓶颈与 p999 抖动。
2. 方法详解
论文提出 CCD-Level 感知的线程编排框架,包含三大组件:
(a) 统一任务提交接口:暴露 submit(search_functor, query, Mapping_ID)。search_functor 是可插拔回调,支持 HNSW (按 table 粒度) 与 IVF (按 cluster 粒度) 两类索引;Mapping_ID 抽象掉具体索引类型,由 dispatcher 通过 pickCcd(id) 决定路由目标 CCD。HNSW 单查询提交为 inter-query 并行,IVF 单查询会被拆分为多 cluster 任务做 intra-query 并行。
(b) 负载感知任务派发器 (热-冷配对)。核心算法:先用历史流量估计每个 table/cluster 的访存量 T̂ — HNSW 用 T_HNSW ≈ N·(B_v + M·s_id),IVF 用 T_IVF ≈ S_i·B_v。然后对所有 item 按 T̂ 降序排序,维护单 CCD 目标负载 μ = Σ T̂ / m,采用双端扫描算法把"最热"与"最冷"项目配对,将每对绑定到当前负载最轻的 CCD。设计原则:避免 hot-hot 同 CCD 共置 (会互相驱逐 L3),主动 hot-cold 配对 (热数据稳定驻留 cache,冷数据顺便用闲置带宽)。
(c) 窗口化重映射 + 双快照原子切换:每分钟 (可调) 后台 workload monitor 汇总 traffic,构造下一个 mapping 并预热,待旧 epoch 任务全部退役后做原子指针交换。这样在流量漂移时既能持续自适应,又不会因重配置带来抖动。
(d) CCD 感知任务窃取:work-stealing 队列分层进行——本地核心 pop → 同 CCD 邻核 steal → 最后才允许跨 CCD steal。理由是同 CCD 共享 L3,工作集天然温热;跨 CCD 偷任务意味着完全重新载入 cache,会显著恶化延迟。
3. 核心技术贡献
第一,首次系统化把 CCD 拓扑作为 ANNS 调度的一等公民。以往工业 ANNS 优化集中在 SIMD 距离计算、压缩、索引结构,论文证明在多 chiplet 平台上访存调度已成主导因素 — 同样的 HNSW 算法仅靠调度策略就能拿到 3.7× 吞吐提升。
第二,热-冷配对 mapping 算法。这是从 Zipfian 流量统计直接得出的"两阶最优"近似:单 CCD 的负载尽量均衡、单 CCD 内热度方差尽量大。这种"均匀均值 + 极化方差"的目标函数对所有按热度倾斜的工作负载都有普适价值,远超 ANNS 本身。
第三,双快照原子重映射。把"在线状态切换"从一个分布式难题降为单机原子指针操作,零下线、零抖动,是工程上极优雅的一步。
第四,层级 work-stealing。把 cache 局部性的约束写进 stealing 策略,使得在轻负载下仍能保持高利用率,重负载下能避免 cache 灾难,与 mapping 策略形成双层防御。
4. 实验结果分析
测试硬件覆盖 4 代 EPYC 96-core (12 CCD / 32MB L3) 与 2 代 EPYC 48-core (12 CCD / 16MB L3),workload 用小红书生产真实数据:60 张 HNSW 表 (每张 1M-10M 向量、维度 64-256) + 15 张 IVF 表 (10K-15M 向量、nlist 128-8192),重放约 100 万 HNSW 与 110 万 IVF 请求。
基线对比 V0 (round-robin / FAISS OpenMP)、V1 (bthread work-stealing 无拓扑感知)、V2 (本文方案)。关键结果:
- 吞吐:96 核 HNSW V2 >100 KQPS,远超 V1/V0;IVF 35 KQPS vs V1 25 KQPS、V0 10 KQPS — 总体最高 3.7×;
- 延迟:p50 与 p999 均降低 30%–90%;
- L3 cache miss rate:下降 6%–30%;
- CPU stall:减少 20%–80%;
- 跨 CCD steal 占比:HNSW 从 V1 的 ~75% 压到 V2 的 <10%;IVF 从 ~80% 压到 ~5%。
最有力的归因证据是 Fig 19b:V1 与 V0 cache miss 接近,说明朴素 work-stealing 并未带来 cache 优势——只有把拓扑写进 stealing 策略后才生效。Fig 12/7 的 ablation 显示静态 mapping 在流量漂移下退化明显,分钟级 remap 是不可或缺的。
5. 局限与未来方向
作者声明的局限:(1) 访存估计公式忽略 metadata,且 IVF per-cluster 归因不一定完美反映 locality;(2) 重映射窗口大小无原则化指南,需按业务调参;(3) 仅覆盖 HNSW/IVF,NSG、Vamana 等其他索引未测;(4) 优化针对 AMD CCD 设计,Intel Sapphire Rapids 等 mesh-based 架构能否复用未验证;(5) 单机 scope,分布式向量检索未涉及;(6) 与向量量化的集成是未来工作。
其它隐含局限:snapshot swap 期间的瞬时一致性窗口对在线请求的影响未量化;workload monitor 自身的统计开销没单独报告;与已有 OLAP 上的 chiplet 调度工作未做横向对比。
6. 工业实践意义
对搜索/推荐工程团队,这篇论文的可直接借鉴价值非常高。第一,立即可用的优化方向:如果你在 AMD EPYC 上跑 HNSW/IVF,且只用默认线程池或 OpenMP,单单换成"按热度路由 + 同 CCD 优先 steal"就能拿到 30%-90% 的延迟下降与最高 3.7× 吞吐,且完全不动模型、不动索引结构、不动召回算法——是性价比极高的工程级优化。
第二,方法论层面:作者揭示了向量召回的瓶颈正在从算法移向系统访存。下一阶段优化的重点不是更好的 PQ 或更复杂的 graph index,而是 cache 友好的数据布局 + 拓扑感知的并发调度。这对社区搜索的向量召回服务、UGC 帖子 embedding 检索同样适用。
第三,部署考量:minute 级 remap 在小红书量级 (千万 QPS) 落地稳定,意味着方案对中等规模也足够鲁棒。对于自建向量数据库的团队,热度统计 + 双 buffer mapping 可以做成一个通用插件,独立于具体索引实现。
第四,对 LLM 时代搜索的延伸:当 LLM-as-reranker 把延迟预算挤压到几毫秒时,召回层 p999 的每一毫秒都更关键,CCD-aware 调度有可能成为 next-gen 在线检索系统的标配。