【SPDK】【NoF】使用SPDK部署NVMe over TCP

SPDK NVMe over Fabrics Target是一个用户空间应用程序,通过以太网,Infiniband或光纤通道等结构呈现块设备,SPDK目前支持RDMA和TCP传输。

本文将在已经编译好SPDK的基础上演示如何使用SPDK搭建NVMe over TCP,前提是您已经将一块NVMe硬盘挂载到linux系统中。

如果您想获取有关SPDK更详细的信息,请参考 官方文档。

演示过程的Host主机的ip地址是192.168.0.21,Target主机的ip地址是192.168.0.22

Target端配置
假设您已经成功编译SPDK

初始化SPDK
# 进入spdk目录
$ cd spdk

# 运行脚本转让设备控制权给SPDK
$ sudo scripts/setup.sh
0000:03:00.0 (15ad 07f0): nvme -> uio_pci_generic

# 查看设备状态
$ sudo scripts/setup.sh status
Hugepages
node     hugesize     free /  total
node0   1048576kB        0 /      0
node0      2048kB     1024 /   1024

Type     BDF             Vendor Device NUMA    Driver           Device     Block devices
NVMe     0000:03:00.0    15ad   07f0   0       uio_pci_generic  -          -

启动 nvmf-tgf
$ sudo build/bin/nvmf_tgt

创建TCP传输
$ sudo scripts/rpc.py nvmf_create_transport -t TCP -u 16384 -m 8 -c 8192


创建 NVMe 块设备
$ sudo scripts/rpc.py bdev_nvme_attach_controller -b NVMe1 -t PCIe -a 0000:03:00.0

将NVMe块设备分配给子系统
# 创建子系统
$ sudo scripts/rpc.py nvmf_create_subsystem nqn.2016-06.io.spdk:cnode1 -a -s SPDK00000000000001 -d SPDK_Controller1

# 将NVMe块设备分配给刚刚创建的子系统
$ sudo scripts/rpc.py nvmf_subsystem_add_ns nqn.2016-06.io.spdk:cnode1 NVMe1n1

# 为子系统添加TCP监听器
$ sudo scripts/rpc.py nvmf_subsystem_add_listener nqn.2016-06.io.spdk:cnode1 -t TCP -a 192.168.0.22 -s 4420


Host端配置
安装 nvme-cli
$ sudo apt install nvme-cli

加载驱动程序
$ sudo modprobe nvme-tcp

发现 Target
$ sudo nvme discover -t tcp -a 192.168.0.22 -s 4420
Discovery Log Number of Records 1, Generation counter 5
=====Discovery Log Entry 0======
trtype:  tcp
adrfam:  ipv4
subtype: nvme subsystem
treq:    not required
portid:  0
trsvcid: 4420
subnqn:  nqn.2016-06.io.spdk:cnode1
traddr:  192.168.0.22
sectype: none

连接Target
$ sudo nvme connect -t tcp -n "nqn.2016-06.io.spdk:cnode1" -a 192.168.0.22 -s 4420

# 查看设备
$ sudo fdisk -l
...
Disk /dev/nvme0n1: 5 GiB, 5368709120 bytes, 10485760 sectors
Disk model: SPDK_Controller1
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x441af706

Device         Boot Start      End  Sectors Size Id Type
/dev/nvme0n1p1       2048 10485759 10483712   5G 83 Linux
...

此时可将块设备nvme0n1p1进行挂载访问

取消连接Target
$ nvme disconnect -n "nqn.2016-06.io.spdk:cnode1"

# 或者
$ nvme disconnect-all


Reference
[1]: https://spdk.io/doc/nvmf.html
[2]: https://www.cnblogs.com/JamesLi/p/11399054.html

你可能感兴趣的:(#,介质专栏,spdk,nof)