Mooncake Classic NVMeoF Transport

导言

在分析 Mooncake 的 NDS 接入位置时,经典 NVMeoFTransport 很容易被误认为 TENT GdsTransport 的前一版:二者都注册 buffer 和文件 handle,都使用 cuFile Batch API,也都维护异步完成事件。

但这条旧路径真正特殊的地方不在 cuFile,而在 Batch 所有权。可运行的调用必须直接持有 Transport*,并始终走 xport->allocateBatchID → xport->submitTransfer → xport->getTransferStatus → xport->freeBatchID。一旦换成 engine->allocateBatchID → engine->submitTransfer,批次便由 MultiTransport 创建,NVMeoFTransport 无法附加私有 descriptor,最终返回 NotImplemented。

本文把这条旧路径单独展开:先给出从 NVMe-oF 挂载到专用测试的 SOP,再画出可运行路径与断路分支,最后按执行顺序逐句解释 Batch 分配、请求切片、cuFile 提交、完成事件聚合与资源回收。

Read more

Mooncake TENT GDS

导言

一开始我只知道一件事:Mooncake 通过 TENT 接入了 NVIDIA GPUDirect Storage。真正沿代码往下追时,三个问题很快连在了一起:TENT 到底怎样调度一次传输,GDS 向上提供了哪些能力,以及新后端怎样实现同一套契约。

最关键的判断是:TENT 不是 GDS 的一层薄封装,而是负责 Segment、内存注册、后端选择、批次和状态推进的统一运行时;GdsTransport 才负责把 File Segment 请求翻译成 cuFile Batch I/O。 理清这条分工后,submitTransferTasks、cuFileBatchIOGetStatus 和新后端接口会自然落在同一张图里。

Read more

Mooncake NDS Integration

导言

手里已经有一套面向 NPU 的 NDS send/receive 接口,下一步是把它接入 Mooncake。乍看之下,这只是把 GDS 的 cuFile* 调用替换为 NDS API;但沿源码真正走一遍后,会遇到两个容易误判的事实:Mooncake 同时保留了新旧两代 GDS 路径,而 Mooncake Store 的磁盘副本读写目前又绕开了它们。

因此,接入点不应先选旧 NVMeoFTransport,也不能只新增一个 transport 就宣称 Store 已经获得 NPU 直读 SSD。更稳妥的路径是:先把 NDS 实现为 TENT 的 NdsTransport,复用其选择、批次、状态与回退机制;再单独改造 Store 的文件副本路径。

Read more