Phoenix

生产环境

无虚拟缓冲区的重构 GPU 直接存储 I/O 栈

动机

从关键路径移除虚拟缓冲区

GPU 直接存储(GDS)通过点对点 DMA(P2P-DMA)实现 GPU 内存和 NVMe 设备之间的直接数据传输,绕过传统的主机反弹缓冲区。然而,当前的 GDS 实现在主机内存中使用"虚拟缓冲区"与 Linux 内核交互——这是一个与 GPU 缓冲区同样大小的主机内存区域,在内核操作期间代表 GPU 缓冲区。

这个虚拟缓冲区造成了重大问题:

  • 次优性能:虚拟缓冲区管理和 DMA 地址替换的复杂逻辑为关键 I/O 路径增加了开销
  • 过度的资源消耗:虚拟缓冲区需要同样大小的主机内存分配,浪费 RAM 和 CPU 周期
  • 兼容性差:需要定制的设备驱动程序和非 POSIX 接口,使部署和编程变得复杂

Phoenix 通过利用 Linux ZONE_DEVICE 将 GPU 内存直接映射到内核的页表中,完全消除了虚拟缓冲区。这允许 Linux 文件系统栈使用标准 POSIX 接口直接与 GPU 内存交互,消除了代理层及其相关开销。

关键设计思想

ZONE_DEVICE 内存映射

Phoenix 使用 Linux ZONE_DEVICE(内核 4.3+)在系统启动时将 GPU 内存直接映射到内核的页表中,使 GPU 内存可通过标准虚拟内存操作寻址。

  • • GPU 内存参与内核页模型
  • • 不需要代理缓冲区
  • • 标准 struct page 表示
  • • 实现 POSIX 接口兼容性

标准 Linux I/O 接口

Phoenix 与未修改的 Linux 文件系统、块层和原生 NVMe 驱动程序一起工作——核心 I/O 路径不需要自定义内核修改。

  • • 标准 POSIX read/write/pread/pwrite
  • • 原生 VFS 和页缓存集成
  • • 未修改的块层
  • • 标准 NVMe 驱动程序

使用 io_uring 的异步 I/O

Phoenix 与 Linux io_uring 集成,提供高性能异步 I/O,实现 I/O 操作与 GPU 计算的高效批处理和重叠。

  • • 零拷贝异步 I/O
  • • 批量提交提高效率
  • • 轮询和中断模式
  • • 流有序操作

应用集成适配器

Phoenix 提供适配器和绑定,可无缝集成 AI 框架和存储系统,最大限度地减少应用程序代码更改。

  • • libphoenix C/C++ 库
  • • Python 绑定
  • • LMCache 集成(phxfile 适配器)
  • • vLLM 集成支持

架构

01 · AI 应用层
vLLM、LMCache、PyTorch、TensorFlow、自定义应用
↓
02 · 适配器层
libphoenix、Python 绑定、phxfile(LMCache)、框架集成
↓
03 · 用户空间
内存注册、虚拟地址管理、io_uring 提交
↓
04 · 内核空间 - Phoenix 模块
ZONE_DEVICE 映射、GPU 内存注册、地址转换
↓
05 · Linux I/O 栈
VFS → 文件系统 → 块层 → NVMe 驱动(未修改)
↓
06 · 硬件 - P2P DMA
NVMe SSD ↔ PCIe 交换机/根复合体 ↔ GPU 内存(直接传输)

证据

论文结果

来源:"Phoenix: A Refactored I/O Stack for GPU Direct Storage without Phony Buffers"(SC'25,2025年11月)

70.3%
软件开销减少(关键 I/O 路径)
2.29×
小 I/O 性能提升(如 KV 缓存)
4.11×
大文件加载性能(如检查点)

关键性能特征

  • 消除虚拟缓冲区分配和管理开销
  • 减少 CPU 参与和主机内存消耗
  • POSIX 接口兼容性支持标准编程模式
  • 在受控评估中与最先进的 GDS I/O 栈比较

当前支持边界

核心系统

  • • 基于 ZONE_DEVICE 的 GPU 内存映射
  • • POSIX 接口支持(read/write/pread/pwrite)
  • • io_uring 异步 I/O 集成
  • • 未修改的 Linux I/O 栈兼容性
  • • P2P DMA 实现 NVMe-GPU 直接传输

集成

  • • libphoenix 库(C/C++)
  • • Python 绑定
  • • LMCache 适配器(phxfile)
  • • 查看仓库了解 vLLM/框架状态
  • • 自定义集成的适配器 API

平台支持

Phoenix 针对最近发布的 GPU 和 NPU 型号实现。请查看 GitHub 仓库 README 以获取当前经过测试的硬件平台列表和部署要求。

  • →需要 Linux 内核 4.3+ 以支持 ZONE_DEVICE
  • →需要 PCIe P2P DMA 能力(验证 GPU/系统支持)
  • →建议使用支持 P2P 的 NVMe 存储以获得最佳性能

研究

Phoenix: A Refactored I/O Stack for GPU Direct Storage without Phony Buffers

会议: SC'25 - 国际高性能计算、网络、存储和分析大会

日期: 2025年11月16-21日,美国密苏里州圣路易斯

DOI: 10.1145/3712285.3759862

作者: Jianqin Yan, Shi Qiu, Yina Lv, Yifan Hu, Hao Chen, Zhirong Shen, Xin Yao, Renhai Chen, Jiwu Shu, Gong Zhang, Yiming Zhang