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

这篇具有很好参考价值的文章主要介绍了【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文章来源地址https://www.toymoban.com/news/detail-790498.html

到了这里,关于【SPDK】【NoF】使用SPDK部署NVMe over TCP的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于SPDK-vhost的云原生KubeVirt虚拟化IO的优化方案(二)

    摘要 在上一篇文章《基于SPDK-vhost的云原生KubeVirt虚拟化IO的优化方案》中我们分享了在云原生KubeVirt场景中引入SPDK-vhost从而加速虚机中IO存储性能的方案,本文将在此方案基础上介绍对云原生虚机的热迁移(Live Migration)、热恢复(Live Recovery)特性的支持,并分享我们基于I

    2024年01月23日
    浏览(47)
  • NVMe-oF 1.1规范:多路径、非对称命名空间和NVMe/TCP

    提到NVMe over Fabric,我就会想到它的几种应用场景: 1、 存储阵列到主机的网络连接(替代FC、iSCSI等); 2、 服务器、本地NVMe存储解耦(跨机箱/JBOF),SSD存储资源池化共享; 3、 分布式存储/超融合系统内部互连? 关于上面第3点,对技术专家来说应该早有答案,而我会在下

    2024年02月02日
    浏览(47)
  • wireshark提取RTSP over TCP中的视频流

    前面文章中介绍了rtp中提取H264或者H265视频的方式,其适用于基于RTP over UDP的方式,因为UDP方式,视频流RTP、RTCP是通过不同的UDP连接来传输的,因此抓包只需要根据端口的不同,即可区分RTP和RTCP,此种方式,wireshark脚本可以做很好的提取。但是如果是RTSP OVER TCP的方式,其R

    2023年04月08日
    浏览(46)
  • 面试专栏:TCP和TLS连接专栏

    三次握手(Three-Way Handshake)建立连接: 第一次握手(SYN): 客户端向服务器发送一个TCP报文,其中包含SYN(同步)标志位,以及客户端的初始序列号。这表示客户端请求建立连接,并希望开始通信。 第二次握手(SYN + ACK): 服务器接收到客户端的SYN报文后,会发送一个带

    2024年02月03日
    浏览(25)
  • Python3通过串口服务器读取设备Modbus数据【modbus_rtu_over_tcp】

    工业采集设备支持ModbusRtu 协议,通讯端口为232串口 或485接口,上位机连接采集终端,不方便走线【串口线 、485总线】,利用现有网络,通过串口服务器进行连接。 实现方案: 1、虚拟串口,上位机通过串口直接采集数据, 缺点:需要安装、开启虚拟串口程序,增加不稳定因

    2024年02月11日
    浏览(60)
  • TCP/IP协议专栏——分片报文详解——网络入门和工程维护必看

    一个链路层数据报能承载的最大数据量称为最大传送单元(MTU)。 因为IP数据报(IP头+DATA)被封装在链路层数据报中,故链路层的MTU严格地限制着IP数据报的长度, 而且在IP数据报的源与目的地路径上的各段链路可能使用不同的链路层协议,有不同的MTU. 例如,以太网的MTU为15

    2024年01月19日
    浏览(64)
  • 【Qt专栏】Qt实现TCP服务端和客户端通信

    网络通信是程序员必须会的一项生存技能,这里简单的实现了服务端和客户端通信的两个小示例,代码可以直接拿来用,开发环境是Qt5.9.6。 1.项目架构 2.tcpserver.h文件 3.tcpserver.cpp文件 4.测试效果 1.项目架构 2.tcpserver.h文件 3.tcpserver.cpp文件 4.测试效果 好了,两个小程序写完并

    2024年02月12日
    浏览(37)
  • TCP/IP协议专栏——以太帧结构 详解——网络入门和工程维护必看

    以太网帧发送数据时都是从8个字节的前导码开始的。前导码是1和0的交互。 在以太网中,数据通信的基本单位是 以太网帧 ( frame ),由 头部 ( header )、数据 ( data )以及 校验和 ( checksum )三部分构成: 头部 以太网帧头部包含 3 个字段,依次是: 1、目的地址:长度是 6 字节,用

    2023年04月18日
    浏览(44)
  • Jenkins中Publish Over SSH插件使用(1)

    SSH插件 前言Publish Over SSH插件是jenkins里面必不可少的插件之一,主要的功能有两个把jenkins服务器上的文件,传输到远程nginx, 远程执行shell命令和脚本。 1. SSH插件下载与配置 1.1 下载Publish over SSH插件 系统管理—》管理插件 下载后的本地路径:$JENKINS_HOME/plugins/publish_over 1.2 全

    2024年02月21日
    浏览(38)
  • 使用NVMe的用户库libzbd编写和ZNS设备通讯的小程序

    libzbd是一个用户态库,用于与支持Zoned Namespace(ZNS)技术的SSD进行交互。以下是一个使用libzbd库编写向ZNS SSD写入数据并读取打印的简单程序。 请注意,该示例仅用于演示目的,并且省略了错误处理和其他细节。

    2024年02月16日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包