Tutti 源码阅读(一):StorageRuntime 如何组织 KV Cache I/O
Tutti 的论文强调 GPU 主导 I/O,但应用首先接触的不是 NVMe doorbell,而是一套稳定的 StorageRuntime API。它负责把 URI、文件 extent、GPU 内存、后端实例和异步请求组装起来,让上层无需知道底层究竟是单盘、条带化 NVMe,还是未来的其他传输路径。 本文阅读 Tutti v0.1.1 的运行时源码与设计文档,聚焦五个问题:公开 API 长什么样、open 如何解析对象、register_memory 为什么独立存在、submit/wait 如何路由,以及 vLLM connector 如何接入。 项目源码:xPU-IO/Tutti。 一、先看整体分层 当前代码把系统拆成以下层次: Application / vLLM Connector │ ▼ StorageRuntime open · register · submit · wait │ ┌──────┴──────┐ ▼ ▼ Resolver DataPath URI → target IO → backend │ │ └──── Binding ┘ │ local / striped NVMe StorageRuntime 是唯一稳定的应用接口;Resolver、Binding 和 DataPath 是内部 SPI。这样做避免上层依赖特定 NVMe 驱动或 GPU 厂商实现。 ...