SPDK发布v21.10版本

SPDK v21.10

本次发布新功能速览:

- DMA库:添加DMA库,为处理含有多个内存域的系统和设备提供必要基础架构,支持在域间执行DMA传输。

- 完全异步的NVMe驱动程序:在控制器初始化和重置过程中删除了NVMe驱动的inline轮询。因此可以在集群解决方案中使用SPDK。

- SPDK 容器脚本:添加了一组脚本作为将 SPDK 封装到 docker 容器镜像中的示例。详情请参见spdk/docker/README.md文件。

- API调度器和改进:用于实现调度器和管理器插件的API已经变成Public API。详情请参见include/spdk/scheduler.h文件。另外还改进了 dynamic_scheduler,在运行低负载多线程的情况下,优先考虑性能选项,而非省电选项。

- Trace解析库:添加了Trace解析库,用于解析SPDK应用程序记录的Trace。该功能会合并多个CPU核的Trace,按时间戳进行排序,然后构建跨越多个缓冲区的Trace条目。

- IDXD perf工具:添加了测量IDXD性能的独立工具。 

请访问https://github.com/spdk/spdk/releases/tag/v21.10,查看本次发布的完整原文。

本次发布包括619次提交,38,000个行代码更改,由47位作者共同完成。

在此特别感谢首次提交代码的以下几位贡献者:

               Andreas Economides

               Denis Nagorny

               Liu Qing

               Sydney Vanda

               Tan Long

               Tomasz Bielecki

               Tomasz Rochumski

               Xin Huang

               Zhao Shushu

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

详细的发布说明如下:

 bdev

添加了新的API spdk_bdev_get_memory_domains,允许获取bdev使用的SPDK内存域。

添加了新的API函数spdk_bdev_readv_blocks_ext和spdk_bdev_writev_blocks_ext。

这些新函数接受spdk_bdev_ext_io_opts结构来扩展IO请求选项,例如DMA内存域,其描述的数据可能属于另一个内存域,不能直接访问。

添加了async_fini_start和新的 API spdk_bdev_module_fini_start_done,允许bdev模块异步完成fini_start。

API spdk_bdev_module_finish_done()已被弃用, 在发布SPDK 22.01 时会将其删除。bdev 相关模块应该使用 spdk_bdev_module_fini_done() 来作为替代。

ocssd bdev 已被删除。Zoned namespaces代替了Open Channel规范。移除的原因是考虑到即使已经上市的设备也只会实现少部分的Open Channel规范,因此没有必要继续对其添加支持。nvme驱动中的OCSSD支持将暂时保留。

dma

添加了新的lib/dma库,为处理含多个内存域的系统和设备提供了必备基础架构。例如,一个带有SoC的PCIe附加卡可能在SoC上运行SPDK,该SoC本身有本地内存,但SPDK可以控制设备,支持访问主机系统内存。该库提供了枚举内存域的基础架构,请求硬件在域间进行DMA传输。

 dpdk

DPDK子模块更新至DPDK 21.08版本。

 event

对spdk_app_opts结构添加了disable_signal_handlers标志。

 idxd

添加了spdk_idxd_get_socket查询idxd设备所在的套接字。

 json

添加了允许编写和解码新类型的API:

  • spdk_json_write_named_uint16

  • spdk_json_write_named_uint8

  • spdk_json_write_uint16

  • spdk_json_write_uint8

  • spdk_json_number_to_uint8

  • spdk_json_decode_uint8

log

添加了API spdk_log_to_syslog_level,在SPDK Log日志级别基础上返回syslog系统日志。

 nvme

添加了新的spdk_nvme_zns_set_zone_desc_ext和spdk_nvme_zns_ext_report_zones函数,分别用于设置区域描述符扩展、获取已扩展区域报告。

添加了新的API spdk_nvme_ctrlr_get_memory_domains,允许获取nvme控制器使用的SPDK内存域。

添加了新的API功能spdk_nvme_ns_cmd_readv_ext和spdk_nvme_ns_cmd_writev_ext。该功能接受spdk_nvme_ns_cmd_ext_io_opts结构,来支持扩展的IO请求选项,例如DMA内存域,用于描述属于另一个内存域而无法直接识别的数据。

添加了新函数spdk_nvme_ctrlr_get_regs_bpinfo,用于获取控制器的启动分区信息。

添加了spdk_nvme_ctrlr_write_boot_partition,spdk_nvme_ctrlr_read_boot_partition_start和spdk_nvme_ctrlr_read_boot_partition_poll新函数,支持写入和读取控制器的启动分区。

Added spdk_nvme_ctrlr_get_opts to retrieve the current controller options.

添加了spdk_nvme_ctrlr_get_opts以获取当前控制器选项。

为spdk_nvme_io_qpair_opts添加了async_mode,以便能够异步创建提交和完成的队列。目前,PCIe层可支持这种模式,用状态机追踪qpair的创建并立即返回给用户。

设置默认模式为false,同步来创建io qpairs。

添加了spdk_nvme_ctrlr_get_regs_cc函数来获取NVMe控制器CC(配置)寄存器。

添加了spdk_nvme_ctrlr_prepare_for_reset函数,以通知驱动程序:应用程序正准备重置指定的NVMe控制器。此函数允许驱动程序在即将发生复位的情况下做决定。

nvmf

为spdk_nvmf_ctrlr_data结构添加了oncs,传输层能够决策是否支持RESERVATION功能。

在 spdk_nvmf_ns_opts 结构中加入了 opts_size 元素,以解决不同 SPDK 版本之间的 ABI 兼容性问题。在spdk_nvmf_ns_opts结构中加入了一个新的选项anagrpid。

在RPC nvmf_subsystem_add_ns中添加了新参数anagrpid。

在 RPC nvmf_subsystem_listener_set_ana_state 中添加了新参数anagrpid。目前spdk_nvmf_subsystem_destroy 支持异步,它接受回调和回调参数。

在nvmf_set_config RPC中添加了新参数poll_groups_mask,允许为nvmf轮询组指定某部分CPU核。这有助于避免在一些CPU核执行定期定时器任务时,频繁运行,导致不平衡。

在nvmf_bdev_ctrlr_end_zcopy中添加了新参数commit,允许指示是否应该提交缓冲区。

在 spdk_nvmf_transport_ops 添加了 listen_dump_opts,以便传输层能够显示监听操作。

在 bdev_nvme_attach_controller RPC 添加了 fabrics_connect_timeout_us,允许指定连接操作超时。

在bdev_nvme_attach_controller RPC中添加了multipath,允许指定多路径行为。在spdk_nvmf_target_opts 结构扩展了新成员 discovery_filter,允许指定在发现日志生成期间应用的过滤规则。更多信息请参考enum spdk_nvmf_tgt_discovery_filter文件。

 scheduler

添加了新的API实现调度器和管理器功能。请访问include/spdk/scheduler.h查看细节。

scsi

添加了spdk_scsi_dev_get_first_lun和spdk_scsi_dev_get_next_lun两个新功能,支持SCSI设备的LUNs遍历。

目前,每个SCSI设备最多能支持256个LUN,删除了宏常数SPDK_SCSI_DEV_MAX_LUN。

trace_parser

添加了新的lib/trace_parser库。该库的功能支持解析SPDK应用程序记录的traces。具体能够合并源自多个CPU核的traces,按照时间戳排序,同时构建跨越多个缓冲区的traces条目。

 util

目前spdk_fd_group_add API使用name参数。

本次发布包含以下两个资源文件:

•Source code (zip)

•Source code (tar.gz)

请访问release page(https://github.com/spdk/spdk/releases/tag/v21.10)进行下载。

SPDK发布v21.10版本_第1张图片

转载须知

DPDK与SPDK开源社区

公众号文章转载声明

推荐阅读

SPDK发布v21.07版本

基于TADK的应用分类

基于TADK的SQLI检测

2021美国峰会系列三 | SPDK性能基准测试

SPDK动态负载均衡

SPDK发布v21.10版本_第2张图片

SPDK发布v21.10版本_第3张图片

点点“赞”“在看”,给我充点儿电吧~

你可能感兴趣的:(java,python,linux,docker,数据库)