SPDK发布v20.10版本

近期,SPDK团队正式发布了20.10版本,一起来看看都有哪些新功能吧!(温馨提示:英文函数名较长,为了获得更佳的阅读体验,手机上建议横屏阅读~)

新功能

- NVMe-oF多路径: NVMe-oF target现已支持Asymmetric Namespace Access(ANA,非对称命名空间访问),可为NVMe-oF启动器提供多路径。

 

- NVMe ZNS:NVMe 驱动程序增加了ZNS命令集支持。详情请参阅以下链接:

https://spdk.io/doc/nvme__zns_8h.html

 

-iSCSI重定向:iSCSI target支持iSCSI login重定向功能,尤其在横向扩展iSCSI target系统中,可实现容错和负载平衡。

-中断模式:增加了对中断模式的支持。它允许模块或库选择性地注册spdk_thread等待的文件描述符。此功能目前是实验性的,可在小部分的SPDK库和模块中启用。

 

- 调度程序和调速器:添加了线程调度程序和 CPU 频率调速器框架,用于重新平衡 CPU 内核之间的负载。此功能目前是实验性的。

 

- 已删除旧配置:SPDK 应用程序和 bdev 模块不再支持旧版 INI 配置,仅支持 JSON-RPC 配置。详情请参阅 https://spdk.io/doc/jsonrpc.html

查看完整版本,请点击"阅读原文"或访问以下链接

https://github.com/spdk/spdk/releases/tag/v20.10

特别感谢

本次版本包含来自43位作者的805次提交,其中包含超过47,000行代码更改。我们尤其要感谢在v20.10版本中第一次提交代码的社区贡献者:

                Jimbo Lu

                Krzysztof Karas

                Niklas Cassel

                Pawel Piatek

                Rafal Stefanowski

                Vasuki Manikarnike

                Wang Shilong

SPDK开源社区

    衷心感谢大家的参与和贡献!

详细的发布说明如下

accel

  • 添加了新的 API spdk_accel_batch_cancel 和spdk_idxd_batch_cancel,允许取消批处理序列。

bdev

  • 添加了新函数spdk_bdev_part_base_construct_ext,旧函数 spdk_bdev_part_base_construct已被弃用。spdk_bdev_part_base_construct_ext函数使用bdev名称而不是bdev结构作为参数,从而避免出现race condition,比如在调用时基于名称获取其结构并在实际打开的情况下删除bdev,可能会出现race condition。

  • 删除了bdev模块的spdk_bdev_config_text函数,以报告旧版配置。

blobstore

  • 添加了新函数spdk_bdev_create_bs_dev_ext ,旧函数 spdk_bdev_create_bs_dev_from_desc已被弃用。

dpdk

  • 将DPDK子模块更新为DPDK 20.08。

env

  • 添加了新的API spdk_mem_get_fd_and_offset,以获取给定虚拟地址的文件描述符和偏移量。

event

  • 删除了子模块的spdk_subsystem_config回调函数,作为旧版配置删除的一部分。

  • 删除了用旧格式打印配置的spdk_app_get_running_config函数,并从用于调用它的struct spdk_app_opts回调中删除了usr1_handler。

  • 添加了 SPDK 线程调度程序框架,该框架可用于重新平衡 CPU 内核之间的负载。

  • 调度器的实现是可插拔的,添加了两个调度器:静态调度器和gscheduler调度器。默认情况下使用静态调度器,不会重新调度线程,保留初始分配。

  • 还添加了 CPU 频率调速器框架和实现。dpdk_governor是第一个实现,并且基于DPDK的rt_power库。gscheduler调度器利用CPU频率调控器。

  • 调度程序和调速器框架具有实验性功能。

fio

  • Bdev fio_plugin不再支持旧版配置文件。选项spdk_conf和spdk_json_conf必须指向有效的JSON配置。

gpt

  • 删除了通过旧版配置禁用GPT探测的选项。请使用通用的bdev功能来复制该行为。详情请参见bdev_set_options --disable-auto-examine 和 bdev_examine RPC

intel-ipsec-mb

  • 将intel-ipsec-mb 子模块更新到v0.54

isa-l

  • 将ISA-L子模块更新到v2.29.0

iscsi

  • iSCSI target支持iSCSI login重定向功能,以实现容错和负载平衡,尤其是在横向扩展iSCSI target系统中更是如此。该系统可运行多个SPDK iSCSI target。

json

  • 添加了新的API spdk_json_decode_object_relaxed ,即使没有找到给定**的解码器,也可以解析json值。

  • 添加了新的 API spdk_json_free_object 来释放 spdk_json_decode_object 分配的内存。

log

  • 新增了log flag结构spdk_log_register_flag, spdk_log_get_first_flag, spdk_log_get_next_flag 和宏SPDK_LOG_REGISTER_COMPONENT,启用了注册和与log flag交互的功能。添加了SPDK_INFOLOG,SPDK_DEBUGLOG和SPDK_LOGDUMP宏,以显示特定log flag的日志

  • 在SPDK的发行版本中,已启用事件框架-L和若干SPDK应用程序中的log flag。在调试版本上,该选项还将日志输出级别设置为SPDK_LOG_DEBUG

  • 添加了新的API spdk_log_enable_timestamps 和新的RPC log_enable_timestamps 来转换日志时间戳。

miscellaneous

  • log_rpc库的内容已移至事件库。log_rpc库已不复存在。

  • app_rpc库的内容已移至事件库。app_rpc库已不复存在。

  • bdev_rpc库的内容已移至bdev库。app_rpc库已不复存在。

  • bdevperf 应用程序现在默认禁用 zcopy API。在本次更改之前,bdevperf 默认启用了 zcopy API,这对不支持 zcopy 的 bdevs 造成了高达 25% 的性能影响,因为 API 通过分配缓冲区来模拟零拷贝。bdevperf -x 参数重命名为 -Z,默认值更改为 false。对于支持 zcopy 的 bdevs,使用 -Z 标志来启用 zcopy API。

net

  • 删除了供用户空间 TCP 堆栈使用的net 框架。

nvme

  • NVMe驱动程序添加了分区命名空间命令集支持。有关详细信息,请参见nvme_zns.h

  • 添加了新的APIspdk_nvme_detach_async 和spdk_nvme_detach_poll_async,用以并行分离多个控制器,从而减少一些NVMe SSD的长时间关闭通知。

  • 添加了新的API spdk_nvme_ns_get_ana_group_id和spdk_nvme_ns_get_ana_state,以分别获取给定命名空间的ANA group ID和ANA状态。

  • 如果没有要求特定的命令集(通过在spdk_nvme_ctrlr_opts 结构中设置command_set member),SPDK将根据控制器支持的内容自动选择最合适的命令集。

nvmf

  • 添加了新的API spdk_nvmf_subsystem_add_ns_ext ,弃用此前的API spdk_nvmf_subsystem_add_ns

  • NVMe-oF target现已支持Asymmetric Namespace Access(ANA,非对称命名空间访问)报告,可为NVMe-oF启动器提供多路径。

  • 在spdk_nvmf_transport_opts 结构中添加了no_wr_batching 参数,以禁用RDMA传输中的工作请求批处理。

  • NVMf Target传输现在可以通过spdk_nvmf_target_opts-> transport_specific提供的JSON上下文,来解析nvmf_create_transport RPC中的任何其他JSON参数。

  • 添加了新的RPC nvmf_subsystem_set_options,允许子系统内传输特定的选项。

  • 添加了新的API spdk_nvmf_transport_stop_listen_async ,以停止在提供的地址处接受新连接。nvmf_subsystem_remove_listener  RPC现在使用该函数。

  • 添加了新的API spdk_nvmf_subsystem_disconnect_host ,以断开给定 hostnqn 的所有连接。nvmf_subsystem_remove_host  RPC现在使用该函数。

ocf

  • 将 OCF 子模块更新到 v20.03.1

rpc

  • 新的可选参数enable_placement_id 和 enable_quickack 已添加到sock_impl_set_options RPC。

  • 添加了新的 RPC bdev_examine_bdev ,能让用户对bdev进行显式检查。只有当RPC bdev_set_options将bdev_auto_examine设置为false时,才能使用。在'nvmf_create_transport' RPC方法中添加了可选的'no_wr_batching'参数。

  • 添加了新的 RPC, iscsi_target_node_set_redirect 和 iscsi_target_node_request_logout。在RPC iscsi_create_portal_group中添加了新的可选参数private ,以支持iSCSI login重定向功能。

  • 新的可选参数ana_reporting 已添加到RPC nvmf_create_subsystem,新的RPC nvmf_subsystem_listner_set_ana_state 已添加到ANA报告中。

  • 添加了新的RPC nvmf_subsystem_get_listenersz和 nvmf_subsystem_get_qpairs,以检索NVMe-oF子系统的配置。

scsi

  • 添加了两个新的API spdk_scsi_dev_construct_ext和spdk_scsi_dev_add_lun_ext,允许上层(例如vhost-scsi)在scsi bdev调整大小时收到通知。

  • spdk_scsi_dev_construct和spdk_scsi_dev_add_lun最终可能会被弃用并被删除。

sock

  • 在spdk_sock_impl_opts 结构中添加了enable_placement_id 字段,使用户可以配置placement_id功能。默认设置为未启用。

  • 在struct spdk_sock_impl_opts 中添加了enable_quick_ack 字段,以启用或禁用POSIX sock子模块的quick ack。默认设置为未启用。

thread

  • fd_group 适用于支持中断模式。

  • 添加了新的API以支持实验性中断模式,允许模块或库选择性地注册spdk_thread可以等待的文件描述符,以替代轮询。在v20.10版本中,只有小部分的SPDK库和模块启用了此功能。

util

  • 添加了一个名为fd_group的新实用程序。它由epoll在Linux平台上实现。spdk_thread和reactor可以用它来实现中断模式。

  • 添加了spdk_bit_pool实用程序。有关详细信息,请参见bit_pool.h 。

vhost

  • 从19.07版本开始,SPDK已切换到DPDK的rte_vhost库,删除了内部rte_vhost库(用于DPDK 19.05之前版本),删除了依赖于内部rte_vhost库的实验性vhost nvme target。

vpp

  • 删除了VPP的套接字抽象。

SPDK发布v20.10版本

转载须知

DPDK与SPDK开源社区公众号文章转载声明

推荐阅读

????欢迎加入2020年中国2020 SPDK,PMDK, VTune Profiler线上技术会议!

????2020 英特尔Packet Processing Virtual Summit线上直播免费报名中!

????SPDK发布v20.07版本

SPDK发布v20.10版本

SPDK发布v20.10版本

点击“阅读原文”,查看20.10 release原文