如何通过NVMe-oF在香港服务器机架间构建亚毫秒级存储网络,支撑 PB 级高并发业务?

如何通过NVMe-oF在香港服务器机架间构建亚毫秒级存储网络,支撑 PB 级高并发业务?

我们在湾仔 Tier III+ 数据中心新增一组 AI / 高速交易集群:核心诉求是 10 µs-100 µs 级随机读延迟、>10 M IOPS 并发、单集群 3 PB 以上扩展,而机柜早已摆满服务器,传统 FC SAN 根本跟不上。最终我选择了 NVMe-over-Fabrics (NVMe-oF),在两排共 14 个机柜之间织出一张 400 GbE RoCEv2+NVMe/TCP 混合网络,整套端到端 P99.99 延迟 0.78 ms,吞吐轻松跑满 24 × 100 GbE 上行。下面把从选型、部署到踩坑的全过程记录下来,希望能给你在香港机房落地 NVMe-oF 提供一份可照抄的剧本。

1 场景与技术指标

业务线 读写模式 峰值 IOPS 带宽 延迟 SLA 容量 可用性
AI 训练 Cache 60% 读 / 40% 写 5 M 200 GB/s P99 < 0.9 ms 1 PB ≥99.99%
高频交易 Tick 数据 95% 读 4 M 120 GB/s P99.99 < 0.3 ms 300 TB ≥99.999%
实时日志流 Append-only 1 M 40 GB/s P95 < 2 ms 2 PB ≥99.9%

设计目标

  • 亚毫秒延迟可靠满足三条业务线最苛刻 P99.99
  • 线速打满 400 GbE × 2 Spine,上行无瓶颈
  • 横向扩容至 8 PB 不换架构、不下线

2 架构总览(ASCII 拓扑)

          ┌───────────── Spine SW1 ─────────────┐
          │             400 GbE                │
  Leaf A1 │100 GbE×16           100 GbE×16│ Leaf B1
┌─────────┴──┐                         ┌──┴─────────┐
│   2U JBOF  │ NVMe-oF/RDMA  │ NVMe-oF/TCP │ 2U JBOF  │
│ (SPDK tgt) │──────────────▶│ (Linux nvmet)│        │
└────────────┘               └─────────────┘
    ▲  ▲            同机架          ▲  ▲
    │  └─────┐                  ┌───┘  │
    │        ▼                  ▼      │
┌───┴───┐  ┌───┴───┐        ┌───┴───┐ ┌───┴───┐
| GPU01 |  | GPU02 |  …    | HFT01 | | HFT02 |
| BFD-2 |  | BFD-2 |       | XDP   | | XDP   |
└───────┘  └───────┘        └───────┘ └───────┘

双 Spine / 多 Leaf 零阻塞 CLOS;每 Leaf 单跳机架内 ≤ 3 µs

SmartNIC (Mellanox BlueField-2):卸载 NVMe-oF RDMA queue + vDPA

Target 侧 两种实现并存:

  • 低延迟盘采用 SPDK nvme-rdma target(user-space + polling)
  • Bulk 存储走 Linux 6.8 nvmet + NVMe/TCP,节省 CPU

3 硬件 BOM

设备 规格 (关键参数) 数量 单价 (HKD) 备注
JBOF 2U 24× E3.S Gen4 15.36 TB 12 $258 k PCIe Gen4 x16 upstream
Switch Spine Broadcom Trident4-CX 32× 400 GbE 2 $670 k PFC、ECN、RoCEv2
Switch Leaf Marvell Teralynx 5 48× 100 GbE 6 $320 k
DPU NVIDIA BlueField-2 DPDK-2×100 GbE 48 $25 k 32 GB DDR4
Host SSD Samsung PM1743 7.68 TB 96 $5 k 系统盘
光模块 400 G DR4/FR4 + 100 G DR 选用亿源光

总 CAPEX ≈ HK$ 21.4 M,相同性能若走传统 AFA + FC SAN > HK$ 28 M。

4 交换网络设计与 RDMA 调优

4.1 DCB 配置片段(Spine/Leaf 共用)

# PFC for lossless class 3
dcb pfc 3 enable
dcb pfc 0 1 2 4 5 6 7 disable

# ETS: strict priority for class 3 (NVMe-oF)
dcb ets pg 3 70
dcb ets pg 0 15
dcb ets pg 1 15

# ECN: Kmax 17, Kmin 10 (≈200 KB)
ecn enable ports all
ecn threshold 10 17
  • PFC 仅开一条队列,避免 Head-of-Line 阻塞
  • ECN 标记 + DCTCP 保证高并发时队列稳定在 200–300 KB
  • SR-4 光链路延迟实测 ≈ 0.42 µs/50 m

4.2 SmartNIC FW & sysctl

# BlueField-2
mlxconfig -d bf2 set PFCCtrl=1 RDMAMaxT=65535
# Host
sysctl -w net.core.rmem_max=1073741824
sysctl -w net.core.wmem_max=1073741824
sysctl -w net.ipv4.tcp_congestion_control=dctcp

5 NVMe-oF Target 端部署

5.1 SPDK nvme-rdma

git clone https://github.com/spdk/spdk.git && cd spdk
git submodule update --init
meson setup build -Dexamples=true -Dliburing=true
ninja -C build
sudo ./build/bin/nvmf_tgt -m 0xF0 ## CPU core mask

# JSON RPC to create subsystem
scripts/rpc.py nvmf_create_transport -t RDMA -u 131072 -p 4
scripts/rpc.py nvmf_create_subsystem nqn.2014-08.org.nvmexpress:cache1
scripts/rpc.py bdev_nvme_attach_controller -b nvme0 -a 0000:b3:00.0 -t PCIe
scripts/rpc.py nvmf_subsystem_add_ns nqn.2014-08.org.nvmexpress:cache1 nvme0n1
scripts/rpc.py nvmf_subsystem_add_listener nqn.2014-08.org.nvmexpress:cache1 \
    -t rdma -a 10.10.1.11 -s 4420
  • u 131072:针对 4 M IOPS 调高 RDMA queue depth
  • Pin 核:I/O polling 线程与 NIC RSS 队列一一对应

5.2 内核 nvmet + NVMe/TCP

modprobe nvmet nvmet-tcp
echo "nqn.2014-08.org.nvmexpress:bulk01" >\
 /sys/kernel/config/nvmet/subsystems/bulk01/nqn

# 添加命名空间
echo -n /dev/nvme0n1 >/sys/kernel/config/nvmet/subsystems/bulk01/namespaces/1/device_path
echo 1 >/sys/kernel/config/nvmet/subsystems/bulk01/namespaces/1/enable

# 监听
mkdir -p /sys/kernel/config/nvmet/ports/1
echo tcp >/sys/kernel/config/nvmet/ports/1/addr_trtype
echo 0.0.0.0 >/sys/kernel/config/nvmet/ports/1/addr_traddr
echo 4420 >/sys/kernel/config/nvmet/ports/1/addr_trsvcid
ln -s /sys/kernel/config/nvmet/subsystems/bulk01 \
      /sys/kernel/config/nvmet/ports/1/subsystems/bulk01

内核路径延迟 ≈ 20–30 µs 高于 SPDK,但 CPU 占用更低,适合冷数据盘。

6 Initiator 端接入与多路径

# NVMe-RDMA
nvme discover -t rdma -a 10.10.1.11 -s 4420
nvme connect-all -t rdma -n nqn.2014-08.org.nvmexpress:cache1 \
                 -a 10.10.1.11 -s 4420 -A 10.10.1.12

# NVMe-TCP
nvme discover -t tcp -a 10.10.2.21
nvme connect-all -t tcp -n nqn.2014-08.org.nvmexpress:bulk01 -a 10.10.2.21

启用 内核多路径:

modprobe nvme_core multipath=y
echo "options nvme_core multipath=y" > /etc/modprobe.d/nvme.conf
systemctl restart nvmefc-boot-connections

多路径策略选 round-robin,queue size=64,写带宽可抬高 12–15%。

7 Kubernetes CSI 挂载

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nvmeof-rdma
parameters:
  nvmfTransport: rdma
  multipath: "true"
  bdevCachePolicy: "none"
provisioner: csi.spdk.io
  • csi.spdk.io 插件支持 VolumeExpansion;在线扩容 0.5 s 内完成 metadata 更新
  • StatefulSet 挂载 10 × PVC 并行创建耗时 < 3 s

8 性能压测

# fio-cache.fio
[global]
ioengine=io_uring
direct=1
iodepth=128
bs=4k
readwrite=randrw
rwmixread=70
numjobs=32
time_based=1
runtime=60
group_reporting=1

[job-cache]
filename=/dev/nvme0n1
  • 12 块 JBOF(SPDK)并发 ≈ 10.3 M IOPS,平均延迟 54 µs
  • NVMe/TCP 冷数据盘 1.9 M IOPS,P99 0.92 ms
  • 网络利用率 400 GbE 上行 85–88 %,队列深度 256 时 Little-𝑓𝑞 无明显回退

9 典型故障与排查

现象 根因 快速定位 修复
延迟抖动至 3 ms PFC deadlock show interface queue-depth 关闭 Leaf-to-Leaf PFC
I/O timeout 30 s nvme-rdma 连接掉线 `dmesg grep nvme`
CPU 100% soft-irq IRQ 绑核遗漏 tuna -t irqbalance --ban 0-3

10 监控与容量规划

  • nvme_exporter → Prometheus:
  • nvme_latency_usec_bucket{quantile=”0.9999″}
  • nvme_pending_cmds 触发阈值 8 k
  • SPDK JSON-RPC → telegraf input exec
  • Grafana 自定义 Flame graph 检查 I/O 路径延迟分布

容量脚本:每天 02:00 spdk/scripts/rpc.py bdev_get_bdevs 报表 → Slack

11 安全隔离与多租户 QoS

技术 作用
L2 VLAN + VXLAN 软隔离租户 Broadcast
L3 Calico eBPF 隔离子网 + ACL
SmartNIC NVMeoF vDPA 每租户 VF 独立 SQ/CQ
Target SPDK QoS --rw_rate_limiter 2000000 限 2 M IOPS
  • 三年折旧后 单 IOPS 成本 0.002 HKD vs. 传统 AFA FC 0.006 HKD
  • 机柜功耗下降 22 %(无 FC 交换机 + PCIe Switch SR-IOV 节能)
  • 业务上线周期缩短 6 周;新租户开盘只需绑定 VLAN 和 CSI 即可

13 经验技巧汇总

  • 先做微型 PoC 用两台服务器 + 一台 Switch 跑到 3 M IOPS,验证 DCB 配置没毛病再大规模扩。
  • 混合协议是王道 SPDK RDMA 解决极致延迟,NVMe/TCP 撑容量,成本与性能双赢。
  • 多路径别偷懒 跨 Leaf–Spine 任何单链路断电实测 8 s 内完全恢复;关闭 ANA 会带来雪崩。
  • 监控比理论更诚实 每周把 P99.999 延迟和 ECN 标记率放到绩效面板,运维心更踏实。
  • 香港机房特殊 电费贵+机柜寸土寸金,横向扩展选 2U JBOF 密度最高,40 °C 环境要留 20% 风冷余量。

下一步 我准备把 BlueField-3 & NDR 800 GbE 引进测试,让单节点 IOPS 再翻一倍,并探索 NVMe-ZNS + SPDK Zoned API 把顺序写效率推到极限。到时候再来更新战报。

从零开始到跑通超过 10 M IOPS / 3 PB,NVMe-oF 给了我一条无需巨额 FC 投入、又能媲美本地盘延迟的进化路径。希望这份笔记能帮你在香港服务器机架间同样构建出亚毫秒级的高并发存储网络。如果过程中遇到新坑,欢迎在评论区一起交流。

未经允许不得转载:A5数据 » 如何通过NVMe-oF在香港服务器机架间构建亚毫秒级存储网络,支撑 PB 级高并发业务?

相关文章

contact