了解一下NVMe OF的initiator与target,搭建简单环境测试。
本文参考链接:https://www.cnblogs.com/JamesLi/p/11399054.html
NVMe OF分为initiator端与target端,由initiator端发起请求与target端NVM subsystem建立连接,进而实现initiator端远程访问target端NVM subsystem,常用访问协议有RDMA、TCP,本文讲解基于TCP传输协议的NVMe OF测试环境搭建。
想要简单了解RDMA的同学可以参考之前写的文章:https://blog.csdn.net/zz2633105/article/details/119519952?spm=1001.2014.3001.5501
准备工作
initiator端与target端一般为两个linux设备,但如果没有条件放一个设备也可以。这里所说的linux设备可以是真是的设备,也可以是虚拟机。
initiator端准备
1)安装nvme-cli:执行nvme list命令,若提示未找到nvme命令则自行安装,例如ubuntu系统执行apt install nvme-cli。
2)加载nvme相关驱动:执行modprobe nvme_core、modprobe nvme-fabrics、modprobe nvme_tcp命令,然后执行lsmod | grep nvme命令,结果如下:
# lsmod | grep nvme
nvme_tcp 36864 0
nvme_fabrics 24576 1 nvme_tcp
nvme_core 126976 2 nvme_tcp,nvme_fabrics
执行ls /dev/nvme-fabrics命令查看驱动是否加载成功,若存在节点,则驱动加载OK,常用的发行版linux系统都能支持,但如果嵌入式linux系统需要配置内核选项支持NVMe OF,配置如下:
CONFIG_NVME_CORE=y
CONFIG_BLK_DEV_NVME=y
CONFIG_NVME_FC=y
CONFIG_NVME_TCP=y
CONFIG_NVME_TARGET=y
target端准备
1)加载nvme相关驱动:modprobe nvmet、modprobe nvme_tcp命令,然后执行lsmod | grep nvme命令,结果如下:
# lsmod | grep nvme
nvmet_tcp 28672 1
nvmet 126976 7 nvmet_tcp
nvme 49152 0
nvme_core 126976 2 nvmet,nvme
执行ls /sys/kernel/config/nvmet/命令查看驱动是否加载成功,若存在目录,则驱动加载OK,常用的发行版linux系统都能支持,但如果嵌入式linux系统需要配置内核选项支持NVMe OF,配置如下:
CONFIG_NVME_CORE=y
CONFIG_BLK_DEV_NVME=y
CONFIG_NVME_FC=y
CONFIG_NVME_TCP=y
CONFIG_NVME_TARGET=y
2)准备物理盘或虚拟盘
initiator端通过传输协议读写target端侧NVM子系统,而这个NVM子系统下可以挂真实NVMe盘,也可以STAT盘,甚至是虚拟盘,由于本文只是搭建测试环境,故采用虚拟盘形式。
随意找个目录,执行dd if=/dev/zero of=test.raw bs=1M count=0 seek=512 命令,再找个没有使用的loop号(可以执行ls /dev/loop*查看,比如loop100),执行 losetup /dev/loop100 test.raw,最后执行fdisk -l命令查看是否加载设备成功,结果如下:
# fdisk -l
.......
Disk /dev/loop100: 512 MiB, 536870912 bytes, 1048576 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
若后续不使用了可以执行losetup -d /dev/loop100移除设备。
target端操作
注意后续所有操作需要sudo权限
创建NVM subsystem
执行以下命令创建NVM subsystem
cd /sys/kernel/config/nvmet/subsystems
mkdir nqn.2014-08.org.nvmexpress.mytest
允许任何initiator访问NVM subsystem
执行以下命令
cd nqn.2014-08.org.nvmexpress.mytest
echo 1 > attr_allow_any_host
申请namespace id
任意选个NSID创建,比如
cd namespaces
mkdir 1
NSID绑定存储设备
绑定存储设备并使能,执行以下
cd 1
echo /dev/loop100 > device_path
echo 1 > enable
注意上面的loop100就是上面创建的虚拟盘,如果有真实盘,则替换即可,比如echo /dev/nvme0n1 > device_path或echo /dev/sda1 > device_path。
创建NVMe over TCP的Transport层
cd /sys/kernel/config/nvmet/ports
mkdir 1234
cd 1234
echo tcp > addr_trtype
echo ipv4 <

本文详细介绍了如何在Linux环境中搭建基于TCP传输协议的NVMeOverFabric(NVMeOF)测试环境。包括initiator和target端的驱动加载、虚拟磁盘创建、NVM子系统配置、连接与断开、性能测试等步骤,帮助读者理解NVMeOF的工作原理和操作流程。

2388

被折叠的 条评论
为什么被折叠?



