Ceph配置RDMA和GPUDirect支持的具体技术方案

一、Ceph RDMA 配置:从网卡到 Ceph 的全链路打通

RDMA 在 Ceph 中的核心价值是让数据绕开 CPU 和内核协议栈,直接从网卡 DMA 到内存。但要真正跑起来,需要从硬件、驱动、系统到 Ceph 配置层层打通。

1.1 硬件选型

网卡 :推荐使用 Mellanox ConnectX-5 及以上 (如 ConnectX-6 Dx)的 RDMA 网卡。100台 GPU 节点的规模下,建议后端存储网络采用 25Gbps 以上的 RoCE(RDMA over Converged Ethernet)或 InfiniBand 网络。

交换机 :若采用 RoCEv2,交换机必须支持无损以太网------即启用 PFC(优先级流控制)和 ECN(显式拥塞通知)。RoCE 对丢包极其敏感,一个丢包就可能导致整个 RDMA 连接性能崩溃。

1.2 驱动与系统配置

安装 Mellanox OFED 驱动(以 Ubuntu 为例):

bash 复制代码
# 下载并安装 MLNX_OFED
wget https://www.mellanox.com/downloads/ofed/MLNX_OFED-5.9-0.5.6.0/MLNX_OFED_LINUX-5.9-0.5.6.0-ubuntu20.04-x86_64.tgz
tar -xzf MLNX_OFED_LINUX-5.9-0.5.6.0-ubuntu20.04-x86_64.tgz
cd MLNX_OFED_LINUX-5.9-0.5.6.0-ubuntu20.04-x86_64
sudo ./mlnxofedinstall --auto-add-kernel-support --without-fw-update --force

# 重启驱动
sudo /etc/init.d/openibd restart

# 安装用户态工具
sudo apt install infiniband-diags ibutils ibverbs-utils rdma-core

验证 RDMA 设备

bash 复制代码
ibv_devinfo
# 应显示端口状态为 PORT_ACTIVE

配置 IPoIB 接口(如使用 InfiniBand):

bash 复制代码
# /etc/network/interfaces
auto ib0
iface ib0 inet static
    address 172.16.1.10/24
    mtu 65520

解锁内存锁定限制------RDMA 需要将内存页锁定在物理内存中:

bash 复制代码
# /etc/security/limits.conf
root soft memlock unlimited
root hard memlock unlimited
ceph soft memlock unlimited
ceph hard memlock unlimited

systemd 服务配置(ceph-osd@.service 等):

ini 复制代码
LimitMEMLOCK=infinity
LimitCORE=infinity
PrivateDevices=no

1.3 Ceph 配置文件核心参数

Ceph 通过 Async Messenger 支持 RDMA 传输。ms_type=async+rdma 是开启 RDMA 的核心开关。

基础配置/etc/ceph/ceph.conf):

ini 复制代码
[global]
# 前端网络(客户端访问)保持 TCP
ms_public_type = async+posix
# 后端集群网络(OSD 间复制、心跳)启用 RDMA
ms_cluster_type = async+rdma
# RDMA 设备名称
ms_async_rdma_device_name = mlx5_0
# 轮询间隔(微秒),0 表示使用中断模式
ms_async_rdma_polling_us = 0
# RoCE 版本:1 为 RoCEv1,2 为 RoCEv2
ms_async_rdma_roce_ver = 2
# GID 索引(需根据实际查询)
ms_async_rdma_gid_idx = 3

关键参数详解

参数 含义 推荐值
ms_public_type 前端网络传输类型 async+posix(TCP)
ms_cluster_type 后端集群网络传输类型 async+rdma(RDMA)
ms_async_rdma_device_name RDMA 设备名 ib0mlx5_0
ms_async_rdma_roce_ver RoCE 版本 2(RoCEv2 更通用)
ms_async_rdma_gid_idx GID 索引 通过 show_gids 查询
ms_async_rdma_local_gid 本地 GID(可选) 可通过脚本自动注入

获取 GID 的自动化方式

bash 复制代码
# 在 ansible 或部署脚本中
GID=$(cat /sys/class/infiniband/mlx5_0/ports/1/gids/3)
sed -i "s/GIDGOESHERE/$GID/g" /etc/ceph/ceph.conf

UCX 方案(部分场景可选):

ini 复制代码
ms_type = async+ucx
ms_public_type = async+ucx
ms_cluster_type = async+ucx
ms_async_ucx_device = mlx5_0:1,mlx5_1:1

注意async+rdmaasync+ucx 是两种不同的 RDMA 传输实现。前者是 Ceph 原生 RDMA 支持,后者基于 UCX 框架。原生 async+rdma 在生产环境中更常见。

1.4 验证 RDMA 是否生效

方法一:检查 Ceph 日志

bash 复制代码
grep -i rdma /var/log/ceph/ceph-osd.*.log
# 应看到 RDMA 连接建立的相关日志

方法二:监控 RDMA 流量

使用 netdataibmonitor 监控 RDMA 网卡流量:

bash 复制代码
ibmonitor
# 观察 RDMA 读写计数器是否增长

方法三:性能压测

对比 RDMA 开启前后的 Ceph 集群性能:

bash 复制代码
rados bench -p test_pool 60 write -t 16
rados bench -p test_pool 60 seq -t 16

二、GPUDirect 支持:让数据直达 GPU 显存

GPUDirect 在 Ceph 中的支持目前沿着两条技术路线演进。

2.1 GPUDirect Storage(GDS)

GPUDirect Storage(GDS) 是 NVIDIA 提供的官方技术,允许 GPU 直接从存储设备(包括通过网络挂载的存储)读取数据,绕过 CPU 内存,实现真正的"零拷贝"。

技术原理 :GDS 通过 cuFile API 实现 GPU 内存与存储之间的直接 DMA 传输。数据路径为:NVMe SSD / NVMe-oF 存储 → 网卡 → PCIe Switch → GPU 显存,全程无需 CPU 介入。

Ceph 集成 GDS 的路径

目前 Ceph 对 GDS 的官方支持主要通过 NFS-Ganesha 网关实现------CephFS 命名空间通过 NFS-Ganesha 导出为 NFS 协议,而 NFS 客户端侧可通过 GDS 驱动实现 GPU 到 NFS 存储的直接数据通路。

Ceph 社区正在推进更原生的集成。NVIDIA 的官方文档描述了"S3 网关指示特定数据节点通过 RDMA(RDMA_WRITE)直接将数据推送到客户端 GPU 或系统内存"的参考架构。

2.2 S3-over-RDMA + GPUDirect(社区前沿)

这是 Ceph 社区最值得关注的前沿进展。Ceph PR #71209 提出了一种S3-over-RDMA 方案,数据直接从 OSD 通过 RDMA 写入客户端内存------包括通过 GPUDirect 写入 GPU 内存

核心机制

  1. RGW(RADOS Gateway)将客户端的 RDMA token 转发给 OSD
  2. OSD 构建感知对象的放置计划
  3. OSD 通过 RDMA_WRITE 将数据直接推送到客户端注册的内存窗口
  4. 若客户端注册的是 GPU 内存,数据通过 GPUDirect 直接落入 GPU 显存

与传统架构的对比

维度 传统 RGW 网关模式 S3-over-RDMA 直接模式
数据路径 OSD → RGW 内存 → 客户端 OSD → RDMA → 客户端 GPU/系统内存
网络跳数 2 跳 1 跳
网关负担 全量数据经过网关 网关仅处理控制面
聚合带宽 受网关数量限制 随 OSD 数量线性扩展
延迟 高(多次拷贝) 低(零拷贝直通)

该方案还支持纠删码(EC)直读------每个分片 OSD 将其约 16KB 的块通过 RDMA 直接散布到客户端缓冲区的逻辑位置,客户端侧的重新组装工作"消失在了网卡的地址运算中"。

当前状态 :该 PR 为 Draft 状态,尚未合入主干。对于生产环境,建议通过 NFS-Ganesha + GDS 的成熟路径实现 GPUDirect 支持,同时持续关注社区进展。

三、效果呈现:RDMA + GPUDirect 能带来什么

3.1 实测性能数据

指标 TCP/IP 基线 RDMA 优化后 提升幅度
集群恢复速度 基准 --- 提升 3 倍
CPU 占用率 100% --- 降低 70%(智能网卡协同)
数据恢复速度 基准 --- 提升 4.84 倍(异构计算加速)
IOPS 基准 --- 裸金属较虚拟化 提升 25%-40%

3.2 对 AI 训练场景的具体价值

  1. Checkpoint 读写加速:大模型训练中频繁读写 Checkpoint(动辄数十 GB),RDMA + GPUDirect 可将 Checkpoint 的保存和加载时间从分钟级降至秒级

  2. 数据加载流水线优化:训练数据从 Ceph 直接流入 GPU 显存,CPU 从数据搬运中解放出来,专注于数据预处理和模型计算

  3. 多任务混合部署:RDMA 的低延迟特性让 Ceph 能够同时支撑在线推理(低延迟要求)和离线训练(高吞吐要求)

四、生产环境部署 Checklist

阶段 检查项 验证方法
硬件 RDMA 网卡(ConnectX-5+)、无损交换机 ibv_devinfo 显示 PORT_ACTIVE
驱动 MLNX_OFED 安装、openibd 服务运行 /etc/init.d/openibd status
系统 ulimit -l 无限制、systemd LimitMEMLOCK=infinity `ulimit -a
网络 IPoIB 接口配置、MTU 正确(65520 或 9000) iperf3 测试带宽接近线速
Ceph ms_cluster_type=async+rdma、GID 配置正确 日志中无 RDMA 连接错误
监控 netdata/ibmonitor 部署 确认 RDMA 计数器有流量
GDS NVIDIA GDS 驱动、NFS-Ganesha 配置 cuFile API 调用成功

关键提醒 :RDMA 配置中最常见的坑是 GID 配置错误 ------不同网卡、不同 RoCE 版本对应的 GID 索引不同。务必通过 show_gids 确认正确索引后配置 ms_async_rdma_gid_idx。另外,RBD(块设备)目前对 RDMA 的支持有限,建议将 CephFS(文件存储)和 RGW(对象存储) 作为 RDMA 优化的首要目标。

相关推荐
2401_834636991 天前
Ceph 分布式存储从入门到精通:架构解析 + cephadm 部署 + 存储池管理
ceph
吾皇斯巴达5 天前
ceph index-less桶可以用radosgw-admin bucket rm吗
ceph
gwf2165 天前
AI训练RDMA拥塞控制:DCQCN/TIMELY/HPCC/Swift —— 芯片级深度剖析与硬件实现
ai训练·rdma·网络架构·拥塞控制·dcqcn·gpudirect·hpcc
gwf2169 天前
AI集群RDMA网络架构总览:从Scale-Out到多平面
rdma·nccl·scaleout·rocev2·ai集群·rnic·gpudirect
gwf21610 天前
RDMA迈向400G/800G:超宽带网络的技术挑战与突破 —— 从芯片架构到RTL实现的深度解析
网络·rdma·dpu·高性能网络·800g·智能网卡·rtl验证
mounter62511 天前
将 RDMA 引入容器:Soft-RoCE (RXE) 网络命名空间支持深度解析
linux·linux kernel·kernel·rdma·net namespace
tiantianuser16 天前
NVME-oF IP 设计15 : 适于高速网络存储系统的IP设计1
网络协议·rdma·高速传输·cmac·roce v2
tiantianuser16 天前
NVME-oF IP 设计16 : 适于高速网络存储系统的IP设计2
网络协议·rdma·高速传输·roce v2·nvme of
运维全栈笔记17 天前
腾讯云 CVM 搭建 Ceph 集群部署笔记
笔记·ceph·腾讯云