技术详解
NVMe-oF技术详解:以太网存储网络高速访问实践
导读
NVMe-oF(NVMe over Fabrics,网络NVMe)是打破存储扩展瓶颈的革命性技术——它将NVMe协议从本地PCIe总线延伸到网络传输层,使应用服务器能够以接近本地NVMe SSD的超低延迟(小于20微秒)访问网络上任意节点的NVMe存储设备。与传统的iSCSI(延迟通常在500微秒以上)和FC SAN(Fibre Channel,依赖专用硬件)相比,NVMe-oF在延迟、带宽和部署灵活性上都实现了质的飞跃,成为AI训练数据集存储池、云计算块存储和高性能数据库的首选存储网络方案。联瑞电子(LR-LINK)基于Intel E810芯片的RDMA高性能网卡,原生支持RoCEv2(RDMA over Converged Ethernet),是构建高性能NVMe-oF存储网络的核心组件,同时提供本地NVMe RAID控制器LRNV9541-4IR满足本地高可靠存储需求。
什么是NVMe-oF
NVMe(Non-Volatile Memory Express)最初是为了充分释放PCIe SSD性能而设计的主机总线协议,相比SCSI/SATA协议具有更低的命令队列深度、更少的CPU开销和更低的延迟。但NVMe最初只支持本地访问(Host直连到NVMe SSD),限制了存储资源的灵活扩展和共享。
2016年,NVM Express组织发布了NVMe-oF 1.0规范,将NVMe命令集从PCIe传输层解耦,使其可以运行在多种网络传输层(Fabrics)之上:包括RDMA(InfiniBand/RoCEv2/iWARP)、光纤通道(FC)和TCP/IP以太网。NVMe-oF的核心设计目标是:在网络传输层引入的额外延迟不超过10微秒,确保网络NVMe的访问体验接近本地NVMe。
相比传统存储网络协议,NVMe-oF的优势体现在以下几个维度:
|
对比维度
|
iSCSI(传统)
|
FC SAN(传统)
|
NVMe-oF(新)
|
|
访问延迟
|
500µs ~ 1ms
|
100 ~ 500µs
|
10 ~ 20µs(RDMA)
|
|
最大带宽
|
10GbE
|
64Gbps(FC Gen 7)
|
400GbE(可扩展)
|
|
主机CPU开销
|
高(内核协议栈)
|
中
|
极低(RDMA卸载)
|
|
部署成本
|
低(标准以太网)
|
高(专用HBA+FC交换机)
|
中(RDMA以太网)
|
|
命令队列深度
|
1 队列 / LUN
|
1 队列 / LUN
|
65535 队列 × 65535 深度
|
▲ 高密度NVMe存储服务器与全闪存架构
NVMe-oF的传输协议对比
NVMe-oF规范支持多种底层传输协议,不同的传输协议在延迟、带宽和部署复杂度上有显著差异:
|
传输协议
|
端到端延迟
|
最高带宽
|
网卡要求
|
部署难度
|
|
NVMe/RDMA(RoCEv2)★
|
10 ~ 20µs
|
400GbE/节点
|
RDMA网卡(Intel E810)
|
中(需配置PFC/ECN)
|
|
NVMe/TCP
|
50 ~ 200µs
|
100GbE(受CPU限制)
|
普通以太网卡即可
|
低(标准TCP/IP)
|
|
NVMe/FC
|
30 ~ 100µs
|
64Gbps(FC Gen 7)
|
专用FC HBA卡
|
高(专用FC交换机)
|
在三种传输协议中,NVMe/RDMA(基于RoCEv2)是目前大规模部署最多、性能最优的方案,尤其适合AI训练和高性能计算场景。NVMe/TCP虽然延迟较高,但得益于其对标准以太网的兼容性,适合对延迟要求不极端的通用场景,以及作为现有TCP网络基础设施的平滑升级路径。
NVMe/RDMA为什么需要RDMA网卡
NVMe-oF高性能的核心在于RDMA(Remote Direct Memory Access,远程直接内存访问)技术。RDMA允许一台计算机的网卡直接读取或写入另一台计算机的内存,整个过程无需目标主机的CPU介入,也不经过任何操作系统的内核协议栈处理。
在NVMe-oF的Initiator(发起端)向Target(目标端,存储服务器)发送读写请求时,RDMA的工作过程如下:
-
Initiator的应用程序(或NVMe-oF驱动)将I/O请求放入RDMA发送队列(Send Queue),并提供目标内存的虚拟地址和访问密钥(R_Key)。
-
Initiator的RDMA网卡(如Intel E810)通过PCIe DMA从主机内存读取I/O数据,通过网络直接写入Target主机的内存地址(RDMA WRITE操作),完全不经过Target的CPU和内核。
-
Target的NVMe-oF Target驱动感知到内存中的新I/O请求,调度本地NVMe SSD完成存储操作,并通过RDMA WRITE将完成状态写回Initiator的内存。
-
Initiator的RDMA网卡收到完成通知后,通过CQ(完成队列)通知应用程序I/O操作已完成。
这一全程"zero-copy"(零拷贝)的数据传输机制,使得CPU的参与只限于发起和完成I/O请求,数据传输本身由RDMA网卡硬件完成,CPU开销降低了80%以上。这也是NVMe/RDMA能够在主机CPU完全不成为瓶颈的情况下,实现100GbE乃至400GbE满速存储访问的根本原因。
RoCEv2(RDMA over Converged Ethernet v2)是目前以太网环境下最主流的RDMA实现,它将RDMA数据帧封装在标准的UDP/IP以太网帧中,可以运行在普通的数据中心以太网基础设施上,但需要网络交换机开启PFC(Priority Flow Control,优先级流控)和ECN(Explicit Congestion Notification,显式拥塞通知)以实现无损网络传输,避免数据包丢失导致RDMA性能急剧下降。
NVMe-oF存储集群架构
▲ NVMe-oF RoCEv2存储集群架构:计算节点通过RDMA网络直接访问存储节点NVMe
NVMe-oF部署实践要点
在Linux系统上部署NVMe-oF(以NVMe/RDMA RoCEv2为例),需要在Initiator端和Target端分别完成配置:
Target端配置(存储服务器):
# 确认RDMA网卡驱动已加载(Intel E810网卡使用ice驱动)
modprobe ice irdma
# 加载NVMe-oF Target模块
modprobe nvmet nvmet-rdma
# 配置Target子系统(暴露本地NVMe设备)
mkdir -p /sys/kernel/config/nvmet/subsystems/nvme-test
echo 1 > /sys/kernel/config/nvmet/subsystems/nvme-test/attr_allow_any_host
# 配置命名空间(Namespace,即暴露的NVMe设备)
mkdir -p /sys/kernel/config/nvmet/subsystems/nvme-test/namespaces/1
echo "/dev/nvme0n1" > /sys/kernel/config/nvmet/subsystems/nvme-test/namespaces/1/device_path
echo 1 > /sys/kernel/config/nvmet/subsystems/nvme-test/namespaces/1/enable
# 创建RDMA端口并关联子系统
mkdir -p /sys/kernel/config/nvmet/ports/1
echo "rdma" > /sys/kernel/config/nvmet/ports/1/addr_trtype
echo "192.168.100.10" > /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/nvme-test /sys/kernel/config/nvmet/ports/1/subsystems/
Initiator端配置(计算服务器):
# 安装nvme-cli工具
yum install -y nvme-cli # CentOS/RHEL
apt install -y nvme-cli # Ubuntu/Debian
# 加载Initiator模块
modprobe nvme-rdma
# 发现Target暴露的子系统
nvme discover -t rdma -a 192.168.100.10 -s 4420
# 连接到Target(建立NVMe-oF会话)
nvme connect -t rdma -a 192.168.100.10 -s 4420 -n nvme-test
# 查看已连接的NVMe设备(网络NVMe盘)
nvme list
# 测试读写延迟和吞吐
fio --filename=/dev/nvme1n1 --direct=1 --rw=randread --bs=4k --iodepth=32 --numjobs=4 --runtime=60 --name=nvmeof_test
RoCEv2无损网络配置要点:为了确保RoCEv2的低延迟和高性能,交换机必须启用以下关键特性:(1) PFC(Priority Flow Control):对RDMA流量使用的优先级队列(通常Priority 3)开启PFC,在拥塞时发送PAUSE帧代替丢包;(2) ECN/DCQCN:启用显式拥塞通知,触发发送端主动降速而非引发丢包;(3) 确保交换机的缓冲区深度足以吸收短暂的流量突发,避免出现缓冲区溢出引发的丢包重传。
联瑞电子NVMe-oF推荐方案
▲ 联瑞电子NVMe-oF解决方案在数据中心的规模化部署
联瑞电子针对NVMe-oF场景提供从网卡到本地存储控制器的完整产品方案:
100G RDMA
-
接口:PCIe 4.0 x16
-
端口:双口 QSFP28 100GbE
-
芯片:Intel E810
-
特性:RoCEv2 / iWARP / RDMA
适用场景:NVMe-oF Target/Initiator,100G存储网络
400G RDMA
-
接口:PCIe 5.0 x16
-
端口:双口 QSFP112 200GbE(400G总带宽)
-
特性:RoCEv2 / GPUDirect Storage
适用场景:AI超大规模集群存储网络、下一代NVMe-oF(200G双口)
NVMe RAID
-
接口:PCIe 3.0 x8
-
端口:4× M.2 NVMe插槽
-
RAID:硬件RAID 0/1/JBOD
适用场景:存储节点本地NVMe RAID池,高可靠本地缓存层
典型应用场景
AI大模型训练数据集存储池:大语言模型和多模态AI模型的训练数据集规模通常在数百TB到数PB级别。训练过程中,GPU集群需要持续以极高的速率从存储集群中读取训练样本。传统的NFS/POSIX文件系统在高并发随机读取时性能急剧下降,而基于NVMe-oF/RoCEv2的分布式存储系统可以实现每个存储节点约12.5GB/s的读取吞吐,整个存储集群的聚合带宽随节点数线性扩展,彻底消除存储I/O对GPU训练效率的影响。结合NVIDIA的GPUDirect Storage技术,数据可以从NVMe SSD通过RDMA网卡直接传输到GPU显存,完全绕过CPU和主机内存,进一步降低数据加载延迟。
云计算块存储服务:公有云和私有云的块存储服务需要为大量虚拟机提供低延迟的持久化存储。传统的iSCSI方案在高负载下延迟不稳定(抖动大),无法满足数据库等延迟敏感型应用的需求。基于NVMe-oF/RoCEv2的云原生块存储(类似AWS EBS io2系列)可以在保证超低延迟(<1ms P99)的同时,提供高达256,000 IOPS的服务能力,远超传统iSCSI方案。
高性能关系型数据库:Oracle、MySQL、PostgreSQL等关系型数据库的性能高度依赖存储的随机读写延迟。将数据库的数据文件和WAL日志放置在NVMe-oF卷上,可以在享受本地NVMe性能的同时,实现数据的网络共享和高可用。存储节点的NVMe RAID(联瑞LRNV9541-4IR)提供本地数据冗余,RDMA网络提供高速访问路径,两者结合构成企业级高性能数据库存储方案。
常见问题FAQ
Q:NVMe/TCP和NVMe/RDMA(RoCEv2)该怎么选?
A:选择依据主要看延迟要求和是否已有RDMA基础设施。NVMe/TCP部署门槛低,无需购置RDMA网卡,适合延迟要求在100微秒以内(不需要极端低延迟)的通用场景,以及现有TCP网络平滑升级。NVMe/RDMA(RoCEv2)延迟可达10~20微秒,吞吐更高、CPU开销更低,但需要支持RoCEv2的网卡(如联瑞Intel E810系列)以及网络交换机配置PFC/ECN,适合AI训练、高性能数据库等对存储性能有极高要求的场景。
Q:NVMe-oF在网络丢包时会出现什么问题?
A:RoCEv2对网络丢包非常敏感。一旦RDMA数据包丢失,接收方会触发NACK重传请求,在收到重传完成之前,整条RDMA连接上的后续数据传输都会被阻塞(Head-of-Line Blocking),导致存储访问延迟急剧升高,严重时可引发存储超时和应用崩溃。这也是为什么NVMe/RDMA方案必须配合交换机的PFC无损网络功能——PFC通过在端口层面发送PAUSE帧阻止上游发送,而不是丢包,从根本上避免了RoCEv2的丢包问题。
Q:联瑞的Intel E810网卡是否支持最新版本的NVMe-oF 1.1规范?
A:联瑞LRES1014PF-2QSFP28(Intel E810)和LRES1260PF-2QSFP112均完整支持NVMe-oF 1.1规范,包括RDMA Transport(NVMe/RDMA)和新增的NVMe/TCP支持。配合Linux内核5.0+的nvme-rdma驱动和nvmet-rdma Target驱动,可以实现完整的NVMe-oF功能。LRES1260PF-2QSFP112支持双口合计400G速率与RoCEv2硬件卸载,在大规模AI存储网络场景下具有出色的吞吐能力。
Q:NVMe-oF的单台存储服务器能支撑多少台Initiator并发访问?
A:取决于存储服务器的CPU处理能力、NVMe SSD的IOPS上限和网卡带宽。对于搭载联瑞LRES1014PF-2QSFP28(2×100GbE,合计100G)并配置24块企业级NVMe SSD的存储节点,理论上可以为30~50台Initiator提供并发访问服务,每台Initiator获得约2Gbps的平均带宽。实际部署中,建议根据业务负载特征(读写比例、块大小分布)进行专项压力测试后确定最大并发数。
需要专业选型建议?
联瑞电子技术团队提供一对一选型咨询,助您找到最优方案
立即咨询 →