近期,SPDK团队正式发布了20.07版本,一起来看看都有哪些新功能吧!(温馨提示:英文函数名较长,为了获得更佳的阅读体验,手机上建议横屏阅读~)
新功能
-SPDK CSI驱动:添加了CSI驱动,通过NVMe-oF 或 iSCSI将SPDK引入Kubernetes存储。支持动态卷部署,允许Pods对SPDK存储进行透明访问。此功能目前是实验性的。详情参见以下链接https://github.com/spdk/spdk-csi
-加速框架:添加了compare, dualcast, crc32c的命令,以及对所有插件中命令的批处理支持。详情参见以下链接https://spdk.io/doc/accel_fw.html
-I/O 中止:对NVMe, NVMe-oF 和Bdev添加了中止I/O命令的支持。
-Env PCI 驱动:添加了 env API,为注册和访问轮询模式 PCI 驱动提供更大的灵活性。
-RDMA库:添加了 rdma库,为不同的RDMA provider提供抽象层。两个可用的提供程序分别为verbs 和 mlx5 Direct Verbs.
-spdk_dd:添加了一个应用程序,用于在文件和SPDK bdevs之间高效地复制数据。
-bdevperf config: 添加了对类似于FIO的配置文件的支持,允许对更复杂的用例进行基准测试。详情参见以下链接https://spdk.io/doc/bdevperf.html
-DPDK:增加了DPDK 20.05的支持。
查看完整版本,请点击"阅读原文"或访问以下链接
https://github.com/spdk/spdk/releases/tag/v20.07
特别感谢
本次版本包含来自44位作者的842次提交,其中包含超过44,000行代码更改。我们尤其要感谢在v20.07版本中第一次提交代码的社区贡献者:
Dayu Liu
Haichao Li
Jörg Thalheim
Kyle Zhang
Monica Kenguva
Ntsaravana
Peng Yu
Simon A. F. Lund
Sochin Jiang
Sven Breuner
Wenhua Liu
Yibo Cai
SPDK开源社区
衷心感谢大家的参与和贡献!
详细的发布说明如下
accel
添加了新的API spdk_accel_get_capabilities,允许应用程序查询当前启用的accel引擎后端的功能。
通过spdk_accel_submit_crc32c添加了新功能CRC-32C。
软件加速引擎添加了CRC-32C支持。
通过spdk_accel_submit_compare添加了新功能compare。
软件加速引擎的实现增加了对compare操作的支持。
accel_engine.h添加了若干API,以支持批量提交操作。
accel_engine.h添加了若干API,以支持dualcast操作。
accel_fw
更新了accel_fw,不再需要应用程序代其分配accel_task。目前,所有公共API都把回调arg作为参数(以前的参数是accel_task)。
不再使用accel_fw API spdk_accel_task_size,已将其移除。
更新了accel_fw,以支持compare, dualcast, crc32c操作
accel_fw引入了对所有插件中所有命令的批处理支持。详情参阅文档。
bdev
添加了新的API spdk_bdev_abort 来提交中止请求,中止其回调上下文与给定通道上的bdev匹配的所有I / O。
build
fio插件现在可以编译为build/fio,命名为spdk_bdev和spdk_nvme。
现有的Fio配置文件将需要更新。
dpdk
最新的DPDK子模块为DPDK 20.05版本。
env
新的公共API spdk_env_get_primary_core 返回SPDK进程中主核的index。
-
添加了若干新的API,为注册和访问轮询模式PCI驱动程序提供更大的灵活性。详情参见env.h
idxd
更新了accel_fw的idxd库和插件模块,以支持所有accel_fw命令以及批处理。库和插件模块都能支持批处理。
添加了对CRC-32C的IDXD引擎支持。
ioat
添加了新的API spdk_ioat_get_max_descriptors。
nvme
在spdk_nvme_ctrlr_opts 结构中添加了opts_size元素,以解决不同SPDK版本之间的ABI兼容性问题。
添加了新的API spdk_nvme_ctrlr_cmd_abort_ext ,以中止先前提交的回调参数匹配的命令。
公共API添加了便捷函数spdk_nvme_print_command 和spdk_nvme-print_completion 。
新函数spdk_nvmf_cuse_update_namespaces更新了NVMe控制器的cuse 表现形式。
nvme的传输接口添加了新函数qpair_iterate_requests 。传输接口的所有实现都必须实现该函数。
nvmf
NVMe-oF Target不再支持连接调度配置,始终使用以前称为“传输”的调度。
spdk_nvmf_tgt_accept 不再把函数指针用作参数。新的连接由相应的传输自动分配给轮询组。此外,spdk_nvmf_transport_ops已更改,接受函数指针不再将函数指针作为参数。此前传输要调用回调时,现在都应调用spdk_nvmf_tgt_new_qpair。
现在,NVMe-oF Target支持中止任何一项已提交的NVM 或管理员命令。在此前,NVMe-oF Target只能中止异步事件请求命令。
rdma
添加了新的rdma库,它是不同RDMA提供程序上的抽象层。两个可用应用程序分别是verbs(默认情况下,在启用RDMA或显式启用--with-rdma = verbs时使用)和mlx5 Direct Verbs (又名DV,由--with-rdma = mlx5_dv启用)。
使用mlx5_dv需要在系统上安装libmlx5。
rpc
已弃用rpc.py 脚本接受的nvmf_create_transport RPC命令的参数-p或--max-qpairs-per-ctrlr。添加了新参数-m或--max-io-qpairs-per-ctrlr。
添加了sock_impl_get_options和sock_impl_set_options RPC方法。
命令行参数-r和--rpc-socket将不再接受TCP端口。RPC服务器现在必须在Unix域套接字上启动。现在,用户要负责在网络上公开RPC并(在必要时)提供适当的身份验证。
RPC bdev_set_options添加了新的选项bdev_auto_examine,用于控制 bdev 模块的自动检查功能。
添加了新的RPCsock_impl_get_options 和sock_impl_set_options ,以公开新的套接字功能。有关详细信息,请参阅sock部分。
sock
添加了spdk_sock_impl_get_opts 和spdk_sock_impl_set_opts 函数,用于设置/获取套接字层配置选项,可以为每个实现独立设置选项。
添加了recv_buf_size 和 'send_buf_size'套接字层选项,它们仅用于posix实现。
添加了基于uring的套接字实现,该代码位于module/sock/uring中。此功能仅在内核版本大于5.4.3的Linux中可用。当前,我们的CI pool添加了针对iSCSI目标的套接字测试以及SPDK NVMe-oF TCP传输的测试。
-
添加了enable_recv_pipe socket套接字层选项,以允许在接收时禁用双重缓冲。
新选项仅用于posix实现。
-
添加了enable_zerocopy_send套接字层选项,以允许在发送时禁用零拷贝流。
新选项仅用于posix实现。
util
一些此前公开的CRC32函数已从公共API中删除,包括spdk_crc32_update, spdk_crc32_table_init 和the spdk_crc32_table struct.
vhost
删除了函数spdk_vhost_blk_get_dev 。
转载须知
推荐阅读
Iostat.py: 输出SPDK Bdev IO子系统性能指标
点击“阅读原文”,查看20.07 release原文~