FaRM: Fast Remote Memory

cluster farm-nsdi14 — Cross-paper Synthesis

相关论文 #

FaRM 是 RDMA 分布式平台的先驱——通过 one-sided RDMA lock-free reads + ring buffer messaging 实现 10× throughput / 100× lower latency vs TCP/IP。与以下五篇论文共同构成"RDMA/bypass 驱动的分布式调度"研究簇:

论文关系关联维度
KRCoresuccessorKRCore 解决 FaRM 未触及的 RDMA QP 扩展性瓶颈——FaRM 用 connection multiplexing 绕过 QP 数量限制 [farm-nsdi14],KRCore 通过 DCT 虚拟化从根本上消除 QP 创建代价 [2201.11578]
OnePiecedownstreamOnePiece 的 double-ring buffer 是 FaRM ring buffer messaging 在变长消息场景的演进 [2601.20655]。FaRM 的定长消息 ring buffer + lock-free reads 模式直接启发了 OnePiece 的 RDMA 通信设计
BlinkdownstreamBlink 的 DPU-GPU ring buffer 继承 FaRM 的 ring buffer 范式(sender 写 receiver ring buffer + receiver 轮询)[2604.07609],但将消费者从 host CPU 改为 GPU persistent kernel
RackSchedorthogonalRackSched 在网络设备(交换机)做计算 [racksched-osdi20],FaRM 在端侧用 RDMA 替代网络协议栈——两者是 bypass 技术的网络侧 vs 端侧分支
CPU-SlowdownsvalidatesCPU-Slowdowns 量化了 CPU 控制面瓶颈 [2603.22774]——FaRM 的 one-sided RDMA lock-free reads(完全绕过远端 CPU)[farm-nsdi14] 正是此类瓶颈的解法原型

本篇 vs 相关论文的 delta #

vs KRCore #

FaRM 假设 RDMA 连接已建立,用 connection multiplexing 管理 QP 数量 [farm-nsdi14]——$q$ 个线程共享一个 QP,通过调节 $q$ 平衡并行度和 NIC 缓存压力。KRCore 证明这种绕行不够:随着集群规模扩大,即使用 multiplexing 仍面临 QP 创建吞吐瓶颈(verbs: 712 QPs/s)[2201.11578]。FaRM 的 PhyCo 2GB regions 解决 NIC page table 扩展性 [farm-nsdi14],KRCore 的 DCT 虚拟化解决 QP 创建扩展性——两者互补解决 NIC 两个独立瓶颈。

FaRM 在 software → hardware implications 中预见了 DCT 的价值:"Dynamically Connected Transport would solve queue pair scalability without application-level multiplexing hacks" [farm-nsdi14]——KRCore 正是这一预言的实现。

vs OnePiece #

FaRM 的 ring buffer 设计简洁:sender 写 receiver 侧预分配 circular buffer,receiver 轮询 head pointer [farm-nsdi14]。消息定长(16–512 bytes),buffer 管理仅需 head/tail 指针。OnePiece 将此模式扩展到变长消息:分离 buffer region 和 size region、CAS spinlock 保护 multi-producer 互斥、busy bit + timeout 保证 liveness [2601.20655]

核心 delta:FaRM 的 ring buffer 是 single-producer-single-consumer(SPSC),OnePiece 是 multi-producer-single-consumer(MPSC)。MPSC 引入了 CAS 竞争和死锁风险——FaRM 无需处理的复杂性。但 FaRM 的 lock-free read 方案(cache-line versioning)[farm-nsdi14] 提供了一种更优雅的无锁一致性机制,OnePiece 未采用此思路而选择了 spinlock——可能因为 cache-line versioning 假设 x86 DMA coherence,不适用于跨 NIC 的 CAS 操作。

FaRM 的数据面由 host CPU 的 pinned threads 驱动(事件循环轮询 RDMA completions)[farm-nsdi14]。Blink 将这个角色交给 GPU 的 persistent kernel——256 GPU 线程替代 CPU pinned threads 轮询 ring buffer [2604.07609]。核心 delta:FaRM 优化了"CPU 怎么用 RDMA",Blink 回答了"能否完全不用 CPU"。

FaRM 的 lock-free read 正确性依赖三个 x86 硬件属性(RDMA write ordering、cache-coherent DMA、compiler barriers)[farm-nsdi14]。Blink 的 DPU-GPU ring buffer 正确性依赖 CUDA atomic CAS + RDMA memory fences——不同的硬件基础但同样的设计理念:利用硬件保证避免软件层锁。

vs RackSched #

FaRM 和 RackSched 代表 bypass 技术的两条路线:端侧(用 RDMA 加速每个操作的数据面)vs 网络侧(用交换机加速请求分发的控制面)。FaRM 通过 one-sided RDMA 实现 146M lookups/s [farm-nsdi14],加速比来自绕过 TCP/IP。RackSched 通过交换机数据面实现近线性扩展 + 单服务器级尾延迟 [racksched-osdi20],加速比来自绕过 CPU 调度。两者可组合:RackSched 路由请求到正确 machine → FaRM 在该 machine 上用 RDMA 处理。

vs CPU-Slowdowns #

CPU-Slowdowns 发现 vLLM 的 shared-memory broadcast(1-writer-N-reader)在 CPU oversubscription 下 dequeue 膨胀 19× [2603.22774]。FaRM 的 RDMA ring buffer messaging 是此问题的直接替代方案——用 RDMA WRITE 替代 shared-memory IPC,远端 zero-CPU involvement [farm-nsdi14]。但 FaRM 设计于 2014 年的 KV-store 场景,直接应用到 LLM 推理需要适配:消息从 KV 操作变为调度元数据 + prompt/token,通信模式从 request-response 变为 broadcast(1 EngineCore → N GPU workers)。

可攻击面 #

  1. x86 硬件假设限制可移植性:lock-free read 正确性依赖 x86 DMA cache coherence 和 RDMA write ordering [farm-nsdi14]。ARM 服务器(如 NVIDIA Grace CPU + Hopper GPU)和 AMD EPYC 可能有不同的 DMA 一致性保证。Blink 的 DPU 用 ARM A78 核心 [2604.07609]——FaRM 的 lock-free read 方案需要在 ARM DPU 上重新验证内存序保证。
    1. single-machine throughput 劣于 baseline:FaRM 的 single-machine throughput 比 non-RDMA baseline 低 35%(26M vs 40M ops/s)[farm-nsdi14],因为 lock-free read 即使本地也需要拷贝对象。在 GPU 推理场景中(通常是少数 powerful nodes 而非大量 commodity nodes),单节点性能退化 35% 是不可接受的。
      1. PhyCo 的 boot-time 物理内存分配:FaRM 需要自定义 kernel driver 在 boot 时分配 2GB 物理连续内存区域 [farm-nsdi14]。现代 GPU 集群的内存通常由 CUDA/ROCm 在运行时动态管理(cudaMalloc),与 boot-time 物理内存分配冲突。此约束使 FaRM 难以与 GPU 推理框架(vLLM、SGLang)的内存管理机制共存。
        1. 2014 年的网络假设已过时:FaRM 基于 40Gbps RoCE 和 ConnectX-3 [farm-nsdi14]。当前 GPU 集群使用 400Gbps NDR InfiniBand + ConnectX-7/BlueField-3。许多 FaRM 的 micro-optimization(如 connection multiplexing 的 $q$ 值选择、PhyCo 的 NIC page table cache 行为)可能在新硬件上表现不同——需重新 profiling 和调参。
        2. 生态位 #

          FaRM 是"RDMA 替代 TCP/IP"范式的奠基工作,占据不可替代的生态位:

          • 学术影响:FaRM 的 lock-free read 方案成为后续所有 RDMA KV-store/transaction 系统的标准参考。其 cache-line versioning 思想影响了 DrRW、Sherman、FORD 等一系列工作。
          • 技术基因传递:KRCore 继承 FaRM 的 ring buffer messaging + 元数据 RDMA READ 模式 [2201.11578]。Blink 继承 FaRM 的 ring buffer 范式 [2604.07609]。OnePiece 继承 FaRM 的 ring buffer 设计并扩展到变长消息 [2601.20655]。三者都是 FaRM 在不同场景的后续演进。
          • 产业验证:FaRM 是 Microsoft Research 内部系统(虽未开源),表明 RDMA 平台在工业规模可行。

          在 LLM 推理语境下,FaRM 的直接适用性有限(为 KV-store 而非推理设计),但其技术范式是整个研究簇的根基。从 FaRM 到 Blink 的演进路线清晰:

          1. FaRM (2014):用 RDMA 替代 TCP/IP → data plane 10× [farm-nsdi14]
          2. KRCore (2022):用 DCT 虚拟化替代 verbs API → control plane 2,900× [2201.11578]
          3. Blink (2026):用 DPU+GPU 替代 CPU → 全链路 bypass [2604.07609]
          4. FaRM 不会被"替代"——它定义了问题框架和技术方法论,后续工作在不同维度延伸同一范式。

            未探索方向 #

            1. FaRM lock-free read 在 GPU 显存上的实现:FaRM 的 cache-line versioning 假设 x86 DMA coherence [farm-nsdi14]。GPU 显存通过 PCIe/NVLink 访问,有不同的 coherence 模型。探索 GPU-native lock-free reads(版本号存在 GPU 全局内存,RDMA READ 直接读取 GPU 内存)可为 Blink 式系统提供分布式 KV-cache 一致性读取。
              1. RDMA ring buffer 的 broadcast 语义:FaRM 的 ring buffer 是点对点(1:1)[farm-nsdi14]。CPU-Slowdowns 揭示的关键瓶颈是 1-writer-N-reader broadcast [2603.22774]。FaRM 的 ring buffer 需扩展为 1:N broadcast——sender 一次 RDMA WRITE 到 N 个 receiver 的 ring buffer,或用 NIC multicast/SHARP 实现硬件级 broadcast。这直接解决 vLLM V1 的 shared-memory broadcast 竞争问题。
                1. FaRM + KRCore + RackSched 三层融合栈:RackSched 在交换机做 L7 请求路由 [racksched-osdi20] → KRCore 提供微秒级 RDMA 连接 [2201.11578] → FaRM 提供 RDMA ring buffer + lock-free data access → 三层联合可实现全链路 bypass。但集成复杂度极高——每层的假设(交换机 stage 约束、DCT 硬件支持、x86 DMA coherence)可能冲突。
                  1. GPU 推理的 RDMA-native KV-cache store:FaRM 的 KV-store 设计可适配为 RDMA-native KV-cache store——将 LLM 的 paged KV-cache blocks 存储在 FaRM 的共享地址空间中,其他 GPU/node 通过 one-sided RDMA lock-free reads 直接读取缓存 block,实现 prefix caching 的分布式化。这需要 FaRM 的 hopscotch hashing 适配到 KV-cache block 的大 value 场景(每 block 数百 KB–数 MB)。