新版本!SPDK 发布 v18.07

SPDK社区近期发布了SPDK v18.07,快来看一看都有哪些功能吧!

bdev

引入了新的公共头文件 bdev_module.h,以便于开发新的bdev模块。此头文件包含 spdk_bdev_part 和 spdk_bdev_part_base 对象的接口,以便在单个基本bdev之上创建多个虚拟bdev,并且应该充当模块作者的主API。
添加了spdk_bdev_get_opts() 和 spdk_bdev_set_opts() 以设置bdev-wide选项。
添加了一种机制,用于处理从bdev层的I/O提交请求返回的内存不足情况错误(ENOMEM)。请参见spdk_bdev_queue_io_wait()。
spdk_bdev_get_io_stat()函数现在返回累计总数,而不是在每次调用时重新置零。这允许多个caller同时查询I/O统计信息而不会相互冲突。 现有用户需要调整其代码以记录先前的I/O统计信息,以计算调用之间的增量。
添加了I/O队列深度跟踪和样本选项。请参见spdk_bdev_get_qd(),spdk_bdev_get_qd_sampling_period()和spdk_bdev_set_qd_sampling_period()。

RAID模块

添加了一个名为“raid”的新bdev模块作为实验模块,它聚合了底层NVMe bdev并公开了一个raid bdev。 请注意,vhost不能与此模块一起使用,因为它还不支持多元素io向量。

Log

多个SPDK应用程序上可用的调试日志组件标志已从-t重命名为-L,以防止与跟踪点混淆,并允许将选项添加到已使用-t表示其他内容的工具中。

Blobstore

添加了一个新函数spdk_bs_dump(),它将blobstore的所有内容转储到文件指针中,包括元数据,这对于调试非常有用。
为精简配置的blob添加了两个新操作:spdk_bs_inflate_blob() 与spdk_bs_blob_decouple_parent() 。
前者将为blob中所有精简配置区域分配集群,并通过从备份blob中读取正确的数据来填充它们;
后者的工作方式类似,但只会分配与blob的直接父节点中的数据相对应的集群。 分配给祖父节点的集群或根本没有被分配的集群将保持精简配置。

BlobFS

将spdk_file_truncate()的返回类型从void更改为int,以允许传递ENOMEM错误。

NVMe驱动

为NVMe错误模拟添加了新的API函数spdk_nvme_qpair_add_cmd_error_injection () 和spdk_nvme_qpair_remove_cmd_error_injection ()。 用户可以将指定的命令设置为失败,并显示特定的错误状态。
将spdk_nvme_ctrlr_register_timeout_callback()中的timeout_sec参数名称更改为timeout_us,并将类型从uint32_t更改为uint64_t。这将为用户提供对超时期限的更细粒度的控制。

NVMe Over Fabrics

spdk_nvmf_tgt_destroy() 函数现在是异步的,并将回调作为参数。
添加了spdk_nvmf_qpair_disconnect() 以允许用户断开qpairs。
添加了spdk_nvmf_subsystem_get_max_namespaces() 以查询给定子系统的最大允许命名空间数。

编译系统

编译系统现在生成一个组合共享库(libspdk.so),可以用它来替代单个静态库(libspdk_* a)。组合库包含SPDK的所有组件,旨在使与SPDK的链接更容易。静态库还提供给那些只链接所需的最小组件集的用户。

git pre-commit与pre-push hooks

pre-commit hook将运行scripts / check_format.sh,并在允许git commit运行之前验证没有格式化错误。在允许git push运行之前,使用gcc和clang编译器运行pre-push hook使CONFIG_WERROR=y在有CONFIG_DEBUG=y和没有CONFIG_DEBUG=y的情况下运行。 在每个DEBUG构建test/ unit / unittest.sh之后运行并验证。结果记录在make.log文件中。
要启用类型:’git config core.hooksPath .githooks’。 要在配置后覆盖,请使用git –no-verify标志。

RPC

start_nbd_disk RPC方法现在返回到内核NBD设备节点的路径,而不总是返回true。

DPDK 18.05

DPDK子模块基于DPDK 18.05版本上进行了重新构建。 DPDK 18.05支持动态内存分配,但由于在DPDK 18.05发布之后发现了一些问题,因此SPDK 18.07未启用该支持。 因此,SPDK 18.07将继续使用传统内存分配模型。 计划在DPDK 18.08版本之后启用动态内存分配,以解决这些问题。

环境抽象层和事件框架

spdk_mem_map_translate()函数现在采用size参数来指示内存区域的大小。 环境实现可以使用它来验证请求的转换。
I/O通道实现已移至其自己的库 – lib / thread。 先前在spdk / io_channel.h中的公共API现在位于spdk / thread.h中。文件spdk / io_channel.h保留并包含spdk / thread.h。
添加了spdk_reactor_get_tsc_stats以返回每个反应器的有趣统计信息。

写在最后

本季度的新版本发布包含了来自51位不同作者的757次代码提交 —— 这刷新了SPDK单次发布版本贡献者数量的记录! 在此,我们特别要感谢所有第一次提交代码的贡献者:

Aneesh Pachilangottil
Jakub Radtke
John Barnard
Kunal Sablok
Leonid Ravich
Mike Playle
Patrick Ohly
Sai Tallamraju
Senthil Kumar V
Shahar Salzman
Srikanth Kaligotla

SPDK开源社区衷心感谢大家的参与、贡献和努力!

原文地址:DPDK与SPDK开源社区

发表评论

电子邮件地址不会被公开。 必填项已用*标注