Mooncake Transfer Engine 源码阅读(二):Segment、内存注册与元数据服务
Mooncake Transfer Engine 的核心抽象不是“远端指针”,而是 Segment + BufferDesc + Metadata。应用注册本地内存后,TE 将地址范围、设备位置和传输协议发布为 Segment 描述,其他节点才能定位并建立连接。 阅读版本: Mooncake commit: 777cc7782417b6e554cf7c2d53210d0d8f89f5cc 一、为什么不能直接发送指针 一个进程中的地址: 0x7f12... 在另一个进程中通常没有意义。即使两台机器都使用相同数值,它们也不指向同一块物理内存。 高性能传输还需要额外信息: 这是 CPU DRAM 还是 GPU VRAM; 对应哪张 GPU; 是否注册成 RDMA MR; rkey 和网卡 endpoint 是什么; 是否能用 NVLink、GPU IPC 或 CXL; 节点当前是否存活; 地址区间是否已经注销。 因此 TE 把地址空间包装成 Segment,并通过元数据服务交换描述。 二、SegmentDesc TransferMetadata::SegmentDesc 是远端发现的中心结构,主要承载: Segment ID Segment 名称 协议或协议集合 本机 RPC / endpoint 信息 BufferDesc 列表 设备与拓扑信息 后端扩展元数据 可以把一个 Segment 理解成某个 TE 实例公开的可传输地址空间: Segment: decode-node-7 ├── Buffer A: CPU metadata pool, protocol=rdma ├── Buffer B: GPU KV pool, protocol=rdma └── Buffer C: GPU KV pool, protocol=hip 同一块 GPU buffer 可以被多个后端注册,从而同时支持: ...