4、NVMe over RDMA 部署环境准备:硬件选型、操作系统配置与驱动验证

各位同学,大家好。这一章我们聊聊部署前的准备工作。说白了,NVMe over RDMA 能不能跑得稳,一半看硬件选型,一半看驱动配置。我在项目里见过不少翻车案例,都是因为前期准备没做到位。今天我把这些经验掰开揉碎了讲给你听。

4.1 硬件选型:网卡、交换机、服务器

硬件选型这块,我个人的习惯是「先定协议,再定设备」。NVMe over RDMA 目前主流是 RoCE v2 和 InfiniBand 两条路。你想想看,如果选错了网卡,后面性能调优会非常痛苦。

4.1.1 网卡选型

网卡是整个链路的核心。我建议重点关注以下几点:

  • 支持 RDMA 协议:必须明确支持 RoCE v2 或 InfiniBand。普通以太网卡不行。
  • 带宽与端口:至少 25GbE 起步,推荐 100GbE。端口数根据拓扑决定。
  • 厂商选择:Mellanox(现 NVIDIA)是主流,Intel 也有支持 RoCE 的卡。我个人更倾向 Mellanox,驱动生态成熟。
  • 固件版本:新卡到手第一件事,升级固件。我曾经遇到过老固件导致连接数受限的坑。

重要提醒:不要只看标称带宽。实际吞吐受 PCIe 通道数、NUMA 亲和性影响很大。建议用双端口 100GbE 卡,插在 CPU 直连的 PCIe 插槽上。

4.1.2 交换机选型

交换机这块,很多人容易忽略。RoCE v2 需要交换机支持 PFC(优先级流控制)和 ECN(显式拥塞通知)。没有这些,丢包率一高,性能直接腰斩。

特性 要求 说明
PFC 必须支持 防止 RoCE 流量丢包
ECN 强烈建议 降低延迟抖动
缓冲区 越大越好 至少 8MB 以上
端口速率 与网卡匹配 25/100/200GbE

嗯,这里要注意。如果你用 InfiniBand,交换机必须选对应的 IB 交换机,不能混用。RoCE v2 的好处是可以用标准以太网交换机,但配置 PFC 和 ECN 需要额外花心思。

4.1.3 服务器选型

服务器选型,核心看 CPU 和内存带宽。NVMe over RDMA 是 IO 密集型,CPU 要够快,内存通道要够多。

  • CPU:建议 Intel Xeon 或 AMD EPYC,核心数 16 以上。我测试过,AMD EPYC 的 PCIe 通道数更多,适合多卡场景。
  • 内存:至少 64GB,推荐 128GB 以上。RDMA 注册内存需要预留空间。
  • PCIe 插槽:必须 CPU 直连,不要走 PCH。否则延迟会高 1-2 微秒。
  • NVMe 盘:建议用企业级 SSD,比如 Intel P5800X 或 Samsung PM9A3。消费级盘扛不住持续写入。

个人经验:我在一个项目中用了消费级 SSD,跑了 3 天就出现 IO 延迟抖动。换成企业级盘后,问题消失。别在这上面省钱。

4.2 操作系统配置

操作系统我推荐 CentOS 7.9 或 Rocky Linux 8.x。Ubuntu 20.04 也可以,但内核需要手动升级。我个人习惯用 Rocky Linux,稳定且兼容性好。

4.2.1 内核参数调优

操作系统配置的核心是内核参数。以下是我常用的配置:

# 调整内存注册限制
echo "options mlx4_core log_num_mtt=30 log_mtts_per_seg=4" >> /etc/modprobe.d/mlx4.conf

# 调整网络缓冲区
sysctl -w net.core.rmem_max=134217728
sysctl -w net.core.wmem_max=134217728

# 调整 RDMA 相关参数
sysctl -w net.ipv4.tcp_rmem="4096 87380 134217728"
sysctl -w net.ipv4.tcp_wmem="4096 65536 134217728"

# 关闭大页透明合并
echo never > /sys/kernel/mm/transparent_hugepage/enabled

为什么会这样配置?内存注册限制是为了让 RDMA 能注册更大的内存区域。网络缓冲区调大是为了应对突发流量。透明大页合并必须关,否则会导致内存分配延迟。

4.2.2 NUMA 绑定

NUMA 绑定是性能关键。我建议把网卡和 NVMe 盘绑定到同一个 NUMA 节点上。怎么查?用 lstopo 命令看拓扑。

# 查看 NUMA 拓扑
lstopo --of png > topology.png

# 绑定网卡中断到指定 CPU
echo "00000001" > /proc/irq/xxx/smp_affinity

警告:如果不做 NUMA 绑定,跨节点访问会导致延迟增加 30% 以上。我曾经踩过这个坑,排查了整整两天才发现是 NUMA 问题。

4.3 RDMA 驱动安装与验证

驱动安装是最后一步,也是最容易出问题的一步。我建议用官方驱动,不要用系统自带的。

4.3.1 驱动安装步骤

以 Mellanox ConnectX-5 为例:

  1. 下载驱动:从 NVIDIA 官网下载 MLNX_OFED 驱动包。
  2. 安装依赖:yum install -y gcc kernel-devel
  3. 运行安装脚本:./mlnxofedinstall --force
  4. 重启网络服务:/etc/init.d/openibd restart
  5. 验证驱动:ibstat 查看状态
# 安装示例
./mlnxofedinstall --force --without-fw-update
/etc/init.d/openibd restart
ibstat

# 输出示例
CA 'mlx5_0'
  CA type: MT4123
  Number of ports: 1
  Firmware version: 16.32.1010
  Node GUID: 0x248a070300a1b2c3
  System image GUID: 0x248a070300a1b2c3
  Port 1:
    State: Active
    Physical state: LinkUp
    Rate: 100 Gb/sec (4X EDR)

4.3.2 驱动验证

驱动装好后,必须做功能验证。我一般用以下工具:

  • ibping:测试 RDMA 连通性
  • ib_write_bw:测试写带宽
  • ib_read_lat:测试读延迟
# 服务端
ib_write_bw -d mlx5_0 -p 18515

# 客户端
ib_write_bw -d mlx5_0 -p 18515 192.168.1.100

# 输出示例
# 带宽:98.5 Gb/sec
# 延迟:1.2 us

关键指标:带宽应达到线速的 95% 以上,延迟在 1-2 微秒。如果带宽低于 80%,检查 PFC 配置或 PCIe 链路。

4.3.3 常见问题排查

驱动安装后,如果 ibstat 显示 State: Down,别慌。先检查物理连接,再检查固件版本。我曾经遇到过固件不匹配导致端口起不来的情况,升级固件后解决。

避坑指南:我曾经在 CentOS 7.6 上装 MLNX_OFED 4.9,结果内核模块编译失败。后来换成 5.0 版本就好了。建议用最新 LTS 版本。

4.4 本章知识体系

下面这张图总结了本章的核心逻辑。你可以看到,硬件选型是基础,操作系统配置是桥梁,驱动安装是最后一步。每一步都环环相扣。

NVMe over RDMA 部署环境准备 硬件选型 网卡 / 交换机 / 服务器 操作系统配置 内核参数 / NUMA 绑定 驱动安装与验证 MLNX_OFED / ibstat 网卡:RoCE v2 / InfiniBand 交换机:PFC / ECN 服务器:CPU / PCIe / NVMe 内核参数调优 NUMA 绑定 透明大页关闭 驱动安装 ibstat 验证 ib_write_bw 测试 核心目标:低延迟 + 高带宽 + 稳定运行 每一步都影响最终性能,不要跳过任何环节

好了,这一章的内容就到这里。硬件选型、操作系统配置、驱动安装,这三步走完,你的环境就准备好了。下一章我们开始实战部署,到时候会用到今天配置的所有东西。