SPDK用户态 iSCSI 客户端库功能介绍

作者简介:闫亮,软件工程师,从事存储软件的测试和优化工作。

文章转载自DPDK与SPDK开源社区

基本概念

SPDK 用户态iSCSI 客户端库是通过 Linux iSCSI 客户端工具包的用户端实现。iSCSI 协议是基于IP协议存储网络标准,用于连接数据存储设备。该协议通过基于TCP/IP网络执行SCSI命令实现存储设备的块等级访问。iSCSI 协议可帮助数据使用内部网传输,来管理远距离的存储设备。它可用于基于局域网,广域网,或者互联网的数据传输,实现不依赖于地理位置的数据存储和检索。基本使用场景见下图:

Linux 系统的默认iSCSI工具库是由open-iscsi项目提供。该工具库提供了一些常用的iSCSI操作命令, 比如iscsiadm提供发现,连接远端iSCSI目标机。SPDK则提供完全用户态解决方案。参考下图:

相关代码文件在spdk/lib/bdev/iscsi/目录上,其中主要文件是bdev_iscsi,c, bdev_iscsi,h, bdev_iscsi_rpc.c。由目录结构可以看出,SPDK iSCSI用户态代码主要以bdev模块形式实现,连接到远端iSCSI节点逻辑盘,在逻辑盘创建bdev后可以用来给SPDK使用。函数bdev_iscsi_initialize是iscsi bdev模块的初始化函数。这个函数在解析完配置后,会调用create_iscsi_disk,同时可以设置iSCSI和bdev参数,并尝试链接到远端iSCSI节点。如果链接成功,就会调用iscsi_connect_cb函数。这个函数将会执行iSCSI查询任务,同时会调用bdev_iscsi_inquiry_cb回调函数。这个回调函数会执行iSCSIreadcapacity16任务,同时iscsi_readcapacity16_cb回调函数也会被调用。这个回调函数会执行create_iscsi_lun函数来创建iSCSI逻辑单元盘。在这个过程中,会注册io_device,SPDK bdev和poller,然后SPDK就可以使用这个iSCSIbdev了。可参考下面的流程图:

Bdev_iscsi_rpc.c 文件主要实现了construct_iscsi_bdev和delete_iscsi_bdev RPC命令,一个用于创建iSCSI盘,另一个用于删除iSCSI盘。具体使用方法可以查看两个命令的帮助信息。需要注意的是,编译SPDK时加上”—with-iscsi-initiator”,这两个RPC 命令才可以使用。

使用介绍

以下内容是SPDK用户态iSCSI 客户端库的基本使用介绍。
目标机器端的配置:
1.从github 获取 spdk软件源,进行编译。
命令如下:

2.通过iscsi配置文件或者RPC命令配置和启动iscsi target(相当于iscsi存储服务器),本文以配置文件为例。具体配置请参考附录1。启动SPDK命令如下:

测试端的配置:

1.安装libiscsi软件包, 推荐从源码安装, 步骤如下:

2.下载和编译SPDK,参考目标机器端的配置步骤1。SPDK编译时需要加上—with-iscsi-initiator选项 。命令如下:

如果需要跑fio_plugin, 需要配置fio的源码路径:

3.需要配置bdev文件bdev.conf, 具体内容请见附录2。
4.运行bdevperf测试iSCSI Target。命令如下:

“-w” 后面的参数可以是 “read write rw randread randwrite randrw flush reset unmap verify”其中一个。
”-m”参数是core的个数, 本例使用一个core。目前推荐使用一个core。

5.还可以使用spdk的bdev层的fio_plugin使用SPDK iSCSI initiator测试SPDK iSCSI Target。Fiojob的配置见附录3。

备注:建议使用SPDK bdevperf来测试,可以更好地评估软件的性能,SPDK FIO plugin会引入更多的FIO软件开销。

附录1

附录2

附录3


  • 本站原创文章仅代表作者观点,不代表SDNLAB立场。所有原创内容版权均属SDNLAB,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用,转载须注明来自 SDNLAB并附上本文链接。 本站中所有编译类文章仅用于学习和交流目的,编译工作遵照 CC 协议,如果有侵犯到您权益的地方,请及时联系我们。
  • 本文链接https://www.sdnlab.com/23018.html
分享到:
相关文章
条评论

登录后才可以评论

SDNLAB君 发表于19-03-05
0