上回我们说其实SPDK还支持NVMe Over Fabric,就是唐杰之前讲的那个今年NVMe标准新添加的条款。其实这个NVMf就是个利益均沾的条款,当初中国还是大清国的时候,错过了工业化,国力衰落,列强趁机瓜分了中国。但是新贵美国刚刚脱贫,来的晚了,分不到好地盘了,也没签多少不平等条约。那怎么办呢,肥肉就在眼前,不能不吃啊,就搞了个利益均沾,别人有的好处他也有份。
SSD是个新事物,势头很猛,NAND Flash厂商靠这个赚了很多钱,SSD厂商也名声大噪,甭管有没有赚到钱,融资倒是没个停。那些传统存储和网络厂商也看得眼红了,所以塞进来这个NVMe Over Fabric,一下子谁都可以靠NVMe赚钱,不只是SSD和Flash厂商了,因为NVMe不只是主机到SSD的协议,也可以是网络上的协议。
SPDK也可以作为一个NVMe Over Fabrics的用户态程序。作为一个块设备,数据通过RDMA的形式在网络上传输,只需要有支持RDMA的网卡和OFED软件包。
RDMA解惑
存储行业真是水深的不行,尽管是存储数据这么一件简单的事情,没想到是如此的复杂,有各种各样的产品,也有各种各样的应用环境。有时感觉自己搞清楚了,突然又冒出个新名词,发现还是一头雾水。那这个RDMA又是个什么东东?
首先我们知道Direct Memory Access (DMA),就是设备直接访问内存,不需要通过CPU了,节省了CPU的时间,效率也大为提升。RDMA差不多也是这样,Remote Direct Memory Access (RDMA)就是直接访问另一台机器的内存,而不用人家的CPU参与。
RDMA这种形式有三大优点:
- 零复制:无需网络软件层的参与,应用就能传送数据。数据直接在内存之间传输,而不用在网络层一级级复制。
- 跳过内核:用户态程序就能直接传输数据,不需要内核的参与。
- 跳过CPU:应用直接访问远端机器的内存,不需要人家CPU的参与,同时也不会占用远端机器的Cache。
RoCE和OFED
RoCE(RDMA over Converged Ethernet)是一种允许通过以太网使用远程直接内存访问(RDMA)的网络协议。
OFED又是什么?OpenFabrics Enterprise Distribution (OFED)是一个开源的软件,专门用来做RDMA。包括内核驱动,RDMA的各种操作,跳过内核的机制,还有内核态和用户态的编程接口API。支持MPI,socket数据传输(RDS,SDP),NAS和SAN存储,文件系统和数据库等。
目前大部分RDMA都是通过以太网和Infiniband传输的。
SPDK的NVMf
要知道SPDK是从DPDK过来的,那DPDK是为网络数据传输设计。所以在NVMe over Fabrics这里,SPDK类似于iSCSI,如上图一样,也有target和initiator。使用比较简单,首先安装一下:
- Federa:dnf install libibverbs-devel librdmacm-devel
- Ubuntu: apt-get install libibverbs-dev librdmacm-dev
接着打开RDMA并编译:
make CONFIG_RDMA=y <other config parameters>
引用