Mooncake Transfer Engine 源码阅读(三):RDMA、TCP 与请求完成状态机

Transfer Engine 的公共 API 很统一,但 RDMA 和 TCP 的实现差异很大。RDMA 需要 MR、QP、WR 和 CQ;TCP 需要连接、lane、消息 framing 和接收端主动拷贝。本文沿源码比较两条路径,并分析 Batch 状态如何完成。 阅读版本: Mooncake commit: 777cc7782417b6e554cf7c2d53210d0d8f89f5cc 一、Transport 抽象 Transport 基类统一定义: install / uninstall registerLocalMemory / unregisterLocalMemory submitTransfer getTransferStatus allocateBatchID / freeBatchID 它还定义 TransferRequest、TransferStatus 和内部 BufferEntry。 公共抽象要求每个后端回答三个问题: 本地内存如何准备为可传输状态; 请求怎样排队和执行; 如何查询每个 task 的最终状态和字节数。 具体连接模型不属于公共 API。 二、RDMA 初始化 RDMA 后端主要位于: rdma_transport.cpp rdma_context.cpp rdma_endpoint.cpp endpoint_store.cpp worker_pool.cpp 安装阶段通常完成: 枚举 RDMA devices / ports / GID -> 创建每张 HCA 的 context -> 建立 PD、CQ 等资源 -> 启动 worker / poller -> 发布 NIC endpoint metadata -> 准备 endpoint store Mooncake 支持多 HCA、多端口和 GPU 内存,因此一个逻辑请求可能被切到多个 rail 上并行发送。 ...

2026年8月21日 · 3 分钟 · Hellokitty