Zing 论坛

正文

Splinter:一款无锁零拷贝的共享内存 KV 与向量存储库,让 LLM 推理告别 socket 与 memcpy 开销

Splinter 是一款极简主义的高性能键值与向量存储系统,通过共享内存和原子操作实现进程间零延迟通信,核心代码仅 766 行,却能支持每秒数百万次操作和 768 维向量存储,为本地 LLM 推理和数据密集型应用提供了全新的架构思路。

SplinterKV StoreVector DatabaseShared MemoryLock-FreeZero-CopyLLM InferenceIPCAtomic OperationsNUMA
发布时间 2026/04/03 08:44最近活动 2026/04/03 08:49预计阅读 4 分钟
Splinter:一款无锁零拷贝的共享内存 KV 与向量存储库,让 LLM 推理告别 socket 与 memcpy 开销
1

章节 01

Splinter:无锁零拷贝共享内存KV与向量存储库核心导读

Splinter 核心导读

Splinter 是一款极简主义的高性能键值(KV)与向量存储系统,通过共享内存和原子操作实现进程间零延迟通信。其核心代码仅766行,却能支持每秒数百万次操作和768维向量存储,为本地LLM推理和数据密集型应用提供了全新架构思路——告别socket连接与memcpy开销,直接在用户态共享内存。

2

章节 02

项目背景与核心问题

项目背景与核心问题

现代AI应用中,传统IPC方案(如Redis、SQLite及各类向量数据库)依赖内核网络协议栈、socket连接、序列化/反序列化及内存拷贝,成为延迟敏感场景的性能瓶颈。Splinter的诞生源于开发者对现有工具链的挫败感:传统数据库的架构局限(内核网络层与仲裁服务的不必要耦合)无法通过调优解决。其核心理念是:本地进程通信可直接在用户态共享内存,绕过内核层层包装。

3

章节 03

架构设计:游泳馆隐喻与核心机制

架构设计:游泳馆隐喻

Splinter的架构可用游泳馆类比:

  • 预分配泳道:初始化时创建固定内存池并划分为等长泳道,无需动态申请内存;
  • 跳水板(无锁访问):每条泳道配原子序列epoch机制,32个进程可同时访问不同泳道,冲突时返回EAGAIN重试(无阻塞);
  • 信号脉冲:数据更新时即时通知(如epoll机制),进程无需轮询;
  • 零拷贝:读取者直接访问原始内存,无需序列化/搬运。

此外,被动式设计(无守护进程,仅共享内存区域)、DRYD原则(数据发布而非发送,直接访问)、静态几何结构(避免碎片化与垃圾回收)、无锁原子操作(seqlock支持INCR/DECR等原地操作)、NUMA亲和性(写入速度可达5亿次/秒)也是核心架构亮点。

4

章节 04

关键技术特性

关键技术特性

  • 信号系统:支持64个独立信号组(基于epoll),布隆标签功能允许过滤特定信号,避免海量更新淹没;
  • 可扩展碎片系统:通过insmod动态加载C逻辑碎片(如DSP、ANN搜索、推理模块),保持核心精简;
  • 内置推理引擎:边车嵌入引擎,使用量化版Nomic Text模型(.gguf)与llama.cpp包装器,可直接在存储层进行向量推理;
  • Lua集成:splinter_cli与splinterctl支持Lua脚本,灵活处理复杂数据流程。
5

章节 05

性能数据与规模能力

性能数据与规模能力

  • 吞吐量:消费级硬件上达每秒320万次以上操作;
  • 延迟:基于memfd/mmap,达到L3缓存速度级别;
  • 扩展性:多读者多写入者(MRMW)语义;
  • 向量支持:原生768维向量,针对Nomic v2/LLM嵌入优化;
  • 代码体积:核心库仅766行,热路径常驻指令缓存。
6

章节 06

适用场景与传统方案对比

适用场景与传统方案对比

适用场景

  • 本地LLM推理缓存(消除llama.cpp等引擎的socket/memcpy开销);
  • 高频数据采集(物理实验、传感器数据流实时存储);
  • 多语言进程协作(TypeScript/Rust/Python/Go共享数据);
  • 嵌入式与边缘计算(资源受限环境的高性能存储)。

与传统向量数据库对比

特性 Splinter 传统向量数据库
传输层 memfd优雅降级到mmap(L3速度) TCP/gRPC(网络协议栈)
守护进程 无(被动式) 活跃服务(重量级)
内存占用 静态且可预测 动态且不稳定
代码复杂度 766行C(核心) 10万行以上
7

章节 07

构建与平台支持

构建与平台支持

平台:现代GNU/Linux;Windows可通过WSL(略有性能损失);macOS需变通方案(无memfd支持)。

可选依赖

  • NUMA(libnuma-dev):构建时WITH_NUMA=1;
  • Lua(lua5.4-dev):构建时WITH_LUA=1;
  • llama.cpp:构建时WITH_LLAMA=1(启用推理碎片);
  • Valgrind:构建时WITH_VALGRIND=1(测试集成)。

纯KV模式:构建时WITH_EMBEDDINGS=0(无向量分区)。

8

章节 08

结语与项目信息

结语与项目信息

Splinter代表回归效率的系统开发姿态:在CPU周期与内存带宽被视为无限的今天,它提醒我们本地IPC可绕过socket层与内核仲裁。它不是万能方案,而是为追求极致延迟的工程师提供的利器。

项目作者Tim Post(前Stack Overflow员工)称:Splinter假设“知情的意图”——不试图比内核更聪明,而是提供元数据与内存区域后让开道路。

项目采用Apache 2.0许可证,代码托管于GitHub,文档站点正在建设中。