新春快乐 牛年大吉
近期,SPDK团队正式发布了21.01版本,一起来看看都有哪些新功能吧!(温馨提示:由于英文函数名较长,为了获得更佳的阅读体验,手机上建议横屏阅读~)
新功能
- 动态调度程序:SPDK轻量级线程现在可以动态地调度到SPDK事件框架中的reactor上。调度程序会重新平衡空闲线程,调整CPU频率,并将空闲的reactor切换到中断模式。有关详细信息,请参见https://www.spdk.io/doc/scheduler.html。此功能目前是实验性的。
- vfio-user用户 NVMe-oF 传输类型:添加了对新vfio-user 用户NVMe-oF传输类型的支持,模拟NVMe设备通过共享内存到虚拟机或单独进程的传输。此功能目前是实验性的。
-vfio-user 用户NVMe传输类型:添加了对vfio-user 用户NVMe传输类型的支持,允许直接从进程连接到模拟的NVMe设备。此功能目前是实验性的。
- NVMe ZNS Zone Append: 添加了对Zoned Namespace Command Set 中 Zone Append 命令的支持。
- pkg-config: SPDK 现在可以生成 pkg-config 文件,从而简化了确定哪些库必须链接到 SPDK 应用程序的过程。详情参见 https://spdk.io/doc/pkgconfig.html
- DPDK: 添加了DPDK 20.11的支持。
从20.01 LTS版本进行更新的用户请注意,旧配置(.ini)文件已删除,现在支持JSON-RPC。有关新配置机制的信息,请参见
https://spdk.io/doc/jsonrpc.html#jsonrpc_convert
查看完整版本,请访问以下链接:
https://github.com/spdk/spdk/releases/tag/v21.01
特别感谢
本次版本包含来自45位作者的587次提交,其中包含超过31,000行代码更改。我们尤其要感谢在v21.01版本中第一次提交代码的社区贡献者:
David Marchand
Feilong Lin
Guo Zhihong
Jiewei Ke
Madhu Adav MJ
Mao Jiang
Michael Bang
Naresh Gottumukkala
Nick Connolly
Roman Penyaev
Rui Chang
ShadowMov
Shihao Sun
Weifeng Su
Zhiqiang Liu
SPDK开源社区
衷心感谢大家的参与和贡献!
详细的发布说明如下
bdev
在spdk_bdev_opts结构中添加了opts_size元素,以解决不同SPDK版本之间的ABI兼容性问题。在spdk_bdev_get_opts函数中添加了opts_size参数。在spdk_bdev_opts中添加了两个字段small_buf_pool_size和large_buf_pool_size,用于确定整个bdev模块的缓冲池大小。
添加了新的API spdk_bdev_wait_for_examine,允许查看examine检查过程的状态。连同相应的bdev_wait_for_examine RPC,始终在spdk_bdev_subsystem_config_json期间被调用,确保每个bdev准备就绪。
添加了新的API spdk_bdev_io_get_aio_status,以获取bdev_io作为Linux AIO errno的状态。还为bdev模块添加了spdk_bdev_io_complete_aio_status 函数和SPDK_BDEV_IO_STATUS_AIO_ERROR ,完成带有Linux AIO errno的bdev_io。
添加了新的API spdk_bdev_get_module_name以获取块设备模块名称。此外,还添加了spdk_bdev_get_module_ctx,获取由指定描述符打开的块设备的bdev模块上下文。
为bdev模块的spdk_bdev结构添加了max_segment_size和max_num_segments,以指定拆分需求。
blob
在spdk_bs_opts结构中添加了opts_size元素,以解决不同SPDK版本之间的ABI兼容性问题。在spdk_bs_opts_init函数中添加了opts_size参数。
在spdk_blob_opts结构中添加了opts_size元素,以解决不同SPDK版本之间的ABI兼容性问题。并在spdk_blob_opts_init函数中添加opts_size参数。
在spdk_blob_open_opts结构中添加了opts_size元素,以解决不同SPDK版本之间的ABI兼容性问题。在spdk_blob_open_opts_init函数中添加了opts_size参数。
build
SPDK 现在可以生成 pkg-config 文件,从而简化了确定哪些库必须链接到 SPDK 应用程序的过程。
dpdk
将DPDK子模块更新为DPDK 20.11。
删除了--with-igb-uio-driver配置选项。自DPDK 20.11以来,igb_uio驱动程序已移至单独的dpdk-kmods存储库。如有需要,用户可以参考dpdk-kmods存储库来构建驱动程序。
env
spdk_env_opts 结构的 pci_whitelist、pci_blacklist 和 master_core 已被弃用。新成员分别命名为 pci_allowed、pci_blocked 和 main_core。
在spdk_app_opts结构中添加了opts_size元素,以解决不同SPDK版本之间的ABI兼容性问题。在spdk_app_opts_init函数中添加了opts_size参数。
event
spdk_app_opts 结构中的 pci_whitelist 和 pci_blacklist 已被弃用。新成员的分别是 pci_allowed 和 pci_blocked。
命令行选项--pci-blacklist已被弃用,由--pci-blocked代替。
命令行选项--pci-whitelist / -W已被弃用,由--pci-allowed / -A代替。
添加了新的实验性动态调度程序,该程序可以重新平衡空闲线程,用dpdk_governor调整CPU频率,并将空闲的reactor内核转换为中断模式。有关详细信息,请参见调度程序文档(https://www.spdk.io/doc/scheduler.html)。
ioat
PCI BDF白名单选项已从ioat_scan_accel_engine RPC中删除。使用SPDK应用程序命令行选项,仍然可以允许或拒绝IOAT PCI功能。
isa-l
将ISA-L子模块更新为v2.30.0。
json
添加了 API spdk_jsonrpc_send_bool_response,允许将 json bool 结果写入函数中发送响应。
更新了 API bdev_nvme_set_options 并添加了 keep_alive_timeout_ms 参数。现在你可以在建立 NVMe bdev 之前指定keep_alive_timeout。
nbd
将函数spdk_nbd_stop的返回类型从void改为int。用两个参数更新了spdk_nbd_fini,使其行为从同步变为异步。
nvme
在NVMe驱动中添加了指令支持。
添加了两个异步API spdk_nvme_ctrlr_cmd_directive_receive和spdk_nvme_ctrlr_cmd_directive_send,分别用于指令发送和指令接收命令。
添加了新函数spdk_nvme_ctrlr_reset_subsystem以执行NVMe子系统重置。注意:NVMe-oF target尚不支持子系统复位。
添加了新函数spdk_nvme_bytes_to_numd将字节传输到多个dwords。
添加了新的自定义传输SPDK_NVME_TRANSPORT_VFIOUSER,使NVMe驱动能够通过vfio-user target连接NVMe。
在NVMe驱动中添加了vfio-user自定义传输的实现,由vfio-user传输通过vfio-user target连接NVMe。
添加了新函数spdk_nvme_ctrlr_set_remove_cb来删除或覆盖在controller探测时指定的remove_cb和remove_ctx。
通过新的API spdk_nvme_zns_zone_append和spdk_nvme_zns_zone_append_with_md,添加了对ZNS zone append命令的支持。
nvmf
nvmf_fc_lld_fini现在接受回调,因此需要将FC Broadcom LLD驱动程序更新为最新版本。
FC传输支持primary tagging和VMID。
Broadcom FC LLD驱动程序和SPDK NVMe-oF FC将LLD API nvmf_fc_init_poller_queues整合到另一个LLD API nvmf_fc_init_q中。因此,需要将Broadcom FC LLD驱动程序更新为最新版本。
传输接口中的destroy和qpair_fini函数现在接受cb_fn和cb_arg在完成时进行调用,它们的执行可以是异步的。
SPDK NVMe-oF target现在支持用于发现日志更改的异步事件通知。这允许启动程序创建与discovery controller的持久连接,并接收日志更改的通知。
在spdk_nvmf_transport_opts结构中添加了opts_size元素,以解决不同SPDK版本之间的ABI兼容性问题。并在spdk_nvmf_transport_opts_init函数中添加opts_size参数。
在NVMe-oF中添加了新的自定义vfio-user用户传输类型实现,可以将模拟的NVMe设备提供给QEMU和SPDK NVMe驱动程序。
添加了新的 API spdk_nvmf_tgt_listen_ext,用 spdk_nvmf_listen_opts 将通用选项传递给特定的传输,取代了nvmf_subsystem_set_options 提供的功能,同时删除了在子系统中使用特定传输选项的 nvmf_subsystem_set_options RPC。
nvmf_subsystem_add_listener RPC 中的 trsvcid 现在是可选的。
目前,暂停子系统只会暂停所有管理队列。无须完全暂停子系统,即可管理主机和监听器,以及添加命名空间。此外,target现在允许暂停子系统内的单个命名空间。要从子系统中删除一个命名空间,只须暂停特定的命名空间。在执行这些操作时,其他命名空间的 I/O 将继续进行。
rpc
RPC iscsi_create_portal_group添加了新的可选参数wait,并添加了一个新的RPC iscsi_start_portal_group。在启动时创建所有关联的目标节点之前,它们不会监听门户网站组的门户网站。否则在SPDK iSCSI目标应用程序重启时,某些iSCSI启动器可能无法重新登录。
bdev_set_options函数中添加了两个可选参数--small-buf-pool-size和--large-buf-pool-size。
vhost
在vhost_create_blk_controller RPC中添加了可选的packed_ring_recovery参数,同时支持在线恢复功能以启用压缩ring实时恢复。
转载须知
推荐阅读
点击“阅读原文”,查看21.01 release原文