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 为例):

# 下载并安装 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 设备

ibv_devinfo
# 应显示端口状态为 PORT_ACTIVE

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

# /etc/network/interfaces
auto ib0
iface ib0 inet static
    address 172.16.1.10/24
    mtu 65520

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

# /etc/security/limits.conf
root soft memlock unlimited
root hard memlock unlimited
ceph soft memlock unlimited
ceph hard memlock unlimited

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

LimitMEMLOCK=infinity
LimitCORE=infinity
PrivateDevices=no

1.3 Ceph 配置文件核心参数在这里插入图片描述

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

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

[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_nameRDMA 设备名ib0mlx5_0
ms_async_rdma_roce_verRoCE 版本2(RoCEv2 更通用)
ms_async_rdma_gid_idxGID 索引通过 show_gids 查询
ms_async_rdma_local_gid本地 GID(可选)可通过脚本自动注入

获取 GID 的自动化方式

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

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

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 日志

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

方法二:监控 RDMA 流量

使用 netdataibmonitor 监控 RDMA 网卡流量:

ibmonitor
# 观察 RDMA 读写计数器是否增长

方法三:性能压测

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

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=infinityulimit -a | grep locked
网络IPoIB 接口配置、MTU 正确(65520 或 9000)iperf3 测试带宽接近线速
Cephms_cluster_type=async+rdma、GID 配置正确日志中无 RDMA 连接错误
监控netdata/ibmonitor 部署确认 RDMA 计数器有流量
GDSNVIDIA GDS 驱动、NFS-Ganesha 配置cuFile API 调用成功

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值