SPDK v18.10
主要特性包括:动态内存分配,加密虚拟Bdev, jsonrpc-client,SPDKCLI支持iSCSI和NVMe-oF。
本季度的新版本发布包含了来自55位不同作者的670次代码提交。本季度第一次提交代码的贡献者中,近一半来自于中国地区。在此,我们特别向中国地区的SPDK开源社区贡献者们致以感谢。
SPDK开源社区衷心感谢大家的参与、贡献和努力!
nvme
1.添加了spdk_nvme_ctrlr_cmd_security_send() 和spdk_nvme_ctrlr_cmd_security_receive(),以支持向nvme控制器发送或从nvme控制器接收安全协议数据。
2.添加了spdk_nvme_ns_get_extended_sector_size()。此功能包含每个扇区(如果有的话)的元数据大小。 spdk_nvme_ns_get_sector_size() 仍然只返回每个扇区的数据大小,不包括元数据。
3.添加了新的send_nvme_cmd RPC方法,以允许直接向NVMe控制器发送NVMe命令。更多相关信息,请参阅send_nvme_cmd RPC文档。
Build System
新的配置选项--with-shared和--without-shared [default]提供了构建或不构建SPDK共享库的功能。 这包括整个SPDK共享库,包含所有SPDK静态库以及与每个SPDK静态库对应的单个SPDK共享库。 尽管共享库的生成符合传统的版本命名实践,但是这种命名目前并不讨论任何SPDK ABI兼容性声明。
bdev
1. 添加了spdk_bdev_alias_del_all() 以从块设备中删除所有别名。
2. 添加了一个新的虚拟bdev模块,以使用DPDK CryptoDev Framework执行静态数据加密。该模块最初使用AESNI CBC密码软件,对英特尔QAT硬件加速器提供实验支持,目前也支持CBC密码。未来的工作可能包括额外的密码以及对身份验证的考虑。注意:此模块目前标记为实验性,不要在生产中使用。
3. 现在,默认情况下始终启用RAID虚拟bdev模块。 configure -with-raid和--without-raid选项现在被忽略并弃用,将在下一个版本中删除。
4. bdev层增加了对服务质量(QoS)的带宽限制。相关详细信息,请参阅最新的set_bdev_qos_limit文档。18.04版本中引入的先前set_bdev_qos_limit_iops RPC方法已经被弃用。新的set_bdev_qos_limit RPC方法可以支持带宽和IOPS限制。
5.删除了spdk_bdev_config_json() 和相应的get_bdevs_config RPC方法。
环境抽象层和事件框架
1.spdk_mem_map_translate的size参数现在是一个指针。 这允许函数报告相对于用户发出的原始请求的转换实际大小。
2.引入了一个新结构spdk_mem_map_ops来保存与内存映射相关的回调。此结构现在作为spdk_mem_map_alloc的第二个参数传递,以代替notify回调。
DPDK 18.08
DPDK子模块已更新至DPDK 18.08版本。 SPDK将自动启用DPDK的动态内存管理,DPDK 18.05.1版本。
在应用程序启动时,仍然可以使用[-s | --mem-size <size>]选项保留大页,但是一旦使用这个选项,我们将尝试动态保留更多的用户分配,而不是使用-ENOMEM使得用户分配失败。这允许使用--mem-size 0启动SPDK,并且只使用真正需要的大页。
由于此更改,spdk_ * malloc() 返回的内存缓冲区不再保证在物理上连续。
I/OAT
I / OAT驱动程序现在可以在遇到DMA错误后重新初始化I / OAT通道。
iscsi target
1.用于discovery会话中的CHAP验证的set_iscsi_options和get_iscsi_global_params RPC方法的参数名称已更改,以此保持和construct_target_node RPC方法参数一致。旧名称仍然可用,但将在未来的版本中删除。
2.对于 set_iscsi_discovery_auth及set_iscsi_target_node_auth已添加RPC方法,分别为discovery会话和现有目标节点设置CHAP身份验证。
3. SPDK iSCSI target支持AuthFile,当iSCSI目标启动时,AuthFile可用于加载CHAP共享机密。SPDK之前为这个文件(/usr/local/etc/ SPDK /auth.conf)提供了一个默认位置(如果没有指定)。此默认值已被删除。用户现在必须明确指定该文件的位置,以从文件中加载CHAP共享秘密,或者使用相关的iSCSI RPC方法在运行时添加该文件的位置。
iscsi initiator
SPDK iSCSI initiator不再是实验性的,而是正式成为了bdev模块中的一员。bdev用户指南:iSCSI bdev中简要描述了其基本用法。
其他
1.SPDK应用程序框架现在可以解析长名称命令行参数。 大多数单字符参数现在具有等效的长名称。 相关详细信息,请参阅命令行参数文档,或使用--help命令行参数列出所有可用的参数。
2. bdevperf -s param (io大小)被重新命名为-o,因为-s已经被现有的应用程序用于内存大小。
3. bdevio现在可以接受所有SPDK命令行参数。如今,配置里必须提供-c或--config参数。
4. 以下ioat/perf和nvme/perf参数也被重命名:-s(io size)更名为-o,-d(mem size)更名为-s。
5. 不推荐使用ReactorMask配置文件参数。用户应使用-m或--cpumask命令行选项指定应用程序的CPU Core掩码。
6. 默认配置文件路径名已从iscsi_tgt、nvmf_tgt和vhost中删除。现在只能使用-c命令行选项指定配置文件路径名。
7. 用户不能再在其环境中设置DPDK_DIR,以指定用于构建SPDK的DPDK安装的位置。在最近几个版本中,并没有定义使用DPDK_DIR指定DPDK位置为正确的方法,更没有推荐这种用法。但是删除此种用法可以确保那些由于其他原因定义了DPDK_DIR的用户不会遇到意外情况。在构建SPDK之前,用户应该使用“configure”脚本指定DPDK位置。
8. 虽然我们知道很多开发人员仍然在使用Python 2,但我们已经正式切换到Python 3了。但我们保证所有的新代码仍然对Python 2有效,直到2020年Python官方停止对Python 2提供支持。
9. 可执行脚本禁止显式调用解释器。不需要使用“python ./scripts/rpc.py”之类的语法。所有可执行脚本都必须包含指向正确解释器的正确shebang。没有shebang脚本就不能执行。
10. 添加了一个Python脚本,以便将旧的INI配置文件转换为新的JSON-RPC配置文件格式。
可以在scripts/config_converter.py中找到此脚本。 示例如何使用此脚本:
cat old_format.ini | scripts/config_converter.py> new_json_format.json
Sock
spdk_sock_get_addr()为服务器端口和客户机端口额外添加了两个参数,分别为“sport”和“cport”。
Virtio
以下RPC命令已不再推荐使用:
construct_virtio_user_scsi_bdev
construct_virtio_pci_scsi_bdev
construct_virtio_user_blk_bdev
construct_virtio_pci_blk_bdev
remove_virtio_scsi_bdev
用一个可以创建任何类型的Virtio bdev的构造函数替换了construct_virtio_dev *命令。remove_virtio_scsi_bdev取代remove_virtio_bdev,删除Virtio块和SCSI设备。
Blobfs
添加了返回文件唯一ID的spdk_file_get_id()。
JSON
添加了用于从应用程序发出RPC命令的jsonrpc-client C库。
增加了支持JSON对象迭代的API:
spdk_json_find()
spdk_json_find_string()
spdk_json_find_array()
spdk_json_object_first()
spdk_json_array_first()
spdk_json_next()
Blobstore
Blobstore I/O操作现在基于io_units,而不是Blobstore页面大小。io_unit大小现在与底层块设备的块大小相同。在块大小为512B的块设备上构建的逻辑卷现在可以在QEMU中用作引导设备。
SPDKCLI
用于管理SPDK的spdcli交互式命令工具不再是实验性的。增加了对iSCSI和NVMe-oF targets的支持。
推荐阅读