版本"/>
SPDK发布21.07版本
SPDK v21.07
近期,SPDK团队正式发布了21.07版本,一起来看看都有哪些新功能吧!(温馨提示:由于英文函数名较长,为了获得更佳的阅读体验,手机上建议横屏阅读~)
新功能
-内核DSA:在IDXD库添加了对内核DSA驱动的支持。
-Init 库:添加Init库,实现SPDK子系统初始化。
-用户态DTrace:添加了在SPDK应用程序运行bpftrace的支持。详情请访问.html。
- zipf实用程序:添加了可以产生幂律概率分布的zipf随机数发生器。配合使用bdevperf 和nvme perf工具,既可生成覆盖所有LBA的块,同时会更频繁地选择小的LBA地址。
请访问.07,查看本次发布的完整原文。
特别感谢!
此版本包括711个提交,35,000个行代码更改,由56位作者共同完成。
在此特别感谢首次提交代码的以下几位贡献者:
Curt Bruns
Jakub Wyka
John Levon
Jonathan Teh
Matt Dumm
Matthew Burbridge
Rajarshi Chowdhury
Scott Peterson
Swapnil Ingle
Tyler Sun
Wu Mengjin
Yuri Kirichok
SPDK开源社区衷心感谢大家的参与、贡献和努力!
详细的发布说明如下:
accel_fw
添加了API spdk_accel_submit_copy_crc32c,在拷贝数据时运行CRC32C。
添加了API spdk_accel_batch_prep_copy_crc32c,分批处理CRC32C和拷贝命令。
添加了API spdk_accel_submit_copy_crc32cv,提交链式CRC32C和拷贝命令。
bdev
将spdk_bdev_read_blocks_with_md arg偏移量定义从int64_t更改为uint64_t。
使用红黑树统一组织bdev名称和别名,实现更快查找。
删除了ZCOPY模拟:可以检查bdev模块是否支持ZCOPY,若不支持则执行现有READ/WRITE命令。
对spdk_bdev_zcopy_start添加了iov。
dpdk
DPDK子模块更新至DPDK 21.05。
idxd
移除spdk_idxd_probe 函数中的probe_cb参数。删除spdk_idxd_probe_cb函数指针的定义。应该在idxd_user.c中执行。
添加了API spdk_idxd_submit_copy_crc32c,在拷贝数据的同时运行CRC32C。
添加了API spdk_idxd_batch_prep_copy_crc32c,以编写批处理操作,在拷贝数据的同时运行CRC32C。
我们已经支持accel_engine库(module/accel/idxd/accel_engine)下的用户态idxd驱动程序。此次在accel_engine 库添加了对内核态idxd驱动程序的使用。此方法可实现包装库功能,通过SPDK idx库(lib/idxd)的内核DSA驱动程序,使用IDXD设备。随后,用户可使用RPC,通过用户态驱动程序或内核态驱动程序使用DSA设备,进行相应配置。
init
添加了新的init库,实现SPDK 子系统初始化,SPDK子系统之前位于应用程序框架内部。此功能已公开,不使用SPDK应用程序框架的应用程序可执行该功能。
iscsi
在RPC iscsi_set_options添加了新参数:pdu_pool_size, immediate_data_pool_size, 和data_out_pool_size,以便在不同可用的内存情况下运行iSCSI target。
json
添加了API spdk_json_write_named_uint128和spdk_json_write_uint128,执行uint128相关数据。
net
删除了弃用的net库。
添加了对ZCOPY的支持。如果bdev模块支持ZCOPY且已启用ZCOPY,则ZCOPY会先于READ和WRITE被执行。
nvme
spdk_nvme_map_prps和spdk_nvme_map_cmd已移至nvmf/vfio-user,充当内部API,因为vfio-user是上述两个API的唯一用户。
添加了spdk_nvme_ns_cmd_copy新功能,为命名空间提交简单的拷贝命令。
根据NVMe 1.4 spec的定义更新了spdk_nvme_generic_command_status_code结构,包括更新的状态代码。
目前spdk_nvme_ctrlr_get_default_ctrlr_opts将use_cmb_sqs设置为false。这表明,如果控制器有CMB,并在CMB支持SQ,则SPDK默认不会将CMB用于SQ,即用户必须在acttch控制器操作之前将spdk_nvme_ctrlr_opts 结构中的use_cmb_sqs设置为true。
添加了spdk_nvme_detach_poll新功能,简化了常见用例,可在所有分离完全前继续轮询。
为spdk_nvme_ctrlr_register_timeout_callback添加了新参数timeout_admin_us,因此调用方可以给管理员命令或io命令指定不同的超时。
更新了现有的spdk_nvme_detach_async功能,以便在活动上下文轮询时添加一到多个分离。
重命名spdk_nvme_ctrlr_data结构下cmic成员的其一变量,将multi_host更改为multi_ctrlr。如果将该变量设置为1,则表明NVM子系统可能有两个以上的控制器。但multi_host 也曾指示过特殊用况,如NVM子系统被多个主机占用。
对spdk_nvme_ctrlr_opts结构添加了新选项disable_read_ana_log_page,禁用ANA log页面读取。若结果为true,则上层会读取ANA log页面。默认设置为false。
添加了新的API, spdk_nvme_ctrlr_reset_async 和 spdk_nvme_ctrlr_reset_poll_async,以异步重置控制器。
添加了新的RPC bdev_nvme_reset_controller,以重置NVMe控制器。
添加了spdk_nvme_ns_get_nguid 功能,以获取给定命名空间的NSUID。
加了spdk_nvme_ctrlr_is_fabrics功能,以指示ctrlr句柄是否和fabrics控制器关联。
nvmf
添加了min_cntlid和max_cntlid to nvmf_create_subsystem,限制控制器ID范围。
添加了spdk_nvmf_subsystem_get_min_cntlid和spdk_nvmf_subsystem_get_max_cntlid,以请求参数。
删除了spdk_nvmf_request_get_buffers_multi API。
加了nvmf_set_crdt RPC,设置命令重试延时。
扩展了spdk_nvmf_poll_group_stat,包含目前qpair count统计数据。
删除了以下几项弃用的API:
spdk_nvmf_poll_group_get_stat (function in nvmf.h),
spdk_nvmf_transport_poll_group_get_stat (function in nvmf.h),
spdk_nvmf_transport_poll_group_free_stat(function in nvmf.h),
spdk_nvmf_rdma_device_stat (struct in nvmf.h),
spdk_nvmf_transport_poll_group_stat (struct in nvmf.h),
poll_group_get_stat (transport op in nvmf_transport.h),
poll_group_free_stat (transport op in nvmf_transport.h).
rpc
添加了新的RPC bdev_rbd_register_cluster 和 bdev_rbd_unregister_cluster,允许创建并删除rados对象集群,用户即可选择集群,创建相关的rbd设备。
修改了bdev_rbd_create参数,允许使用cluster-name可选参数,在已注册Rados Cluster Object基础上创建rbd bdev。
添加了新的RPC bdev_rbd_get_clusters_info,允许获取已注册Rados Cluster 名称信息。
对bdev_nvme_set_options RPC添加了可选参数timeout_admin_us。
在scripts/rpc.py提供的 bdev_raid_create方法中,将参数stripe-size_kb修改为stripe-size-kb,以保持一致性。
在RPC idxd_scan_accel_engine添加了新的可选参数config_kernel_mode,以启用内核态IDXD驱动程序。
删除了RPC sock_impl_set_options的弃用参数enable-zerocopy-send,改用enable-zerocopy-send-server或enable-zerocopy-send-client。
删除了RPC sock_impl_set_options的弃用参数disable-zerocopy-send,改用disable-zerocopy-send-server或disable-zerocopy-send-client。
rpm
删除了已弃用的pkg/spdk.spec,请改用rpmbuild/spdk.spec。
查看具体信息请访问RPM文档(.html)。
thread
针对timer poller,使用红黑树来进行操作,从而提供更快的插入和删除操作,在io_devices实现更快查找。
从公共头删除了spdk_io_channel结构,将其移至thread_internal.h。
trace
添加了spdk_trace_register_description_ext功能,注册可变数目的跟踪点参数。
添加了链接多个跟踪条目的功能,扩大参数缓冲区的规模。
util
通过使用同个BSD许可协议下FreeBSD操作系统提供的宏,添加了红黑树宏指令。
添加了新的宏SPDK_SIZEOF_MEMBER,用于获取结构体成员的大小。
添加了spdk_crc32c_iov_update功能,支持iovs的crc32c计算。添加可产生幂律概率分布的zipf随机数生成器。应用于块设备的性能测试时,生成器会在全范围LBA进行选择,但会频繁选择小的LBA地址。
转载须知
DPDK与SPDK开源社区
公众号文章转载声明
推荐阅读
2021美国峰会系列一 | SPDK项目状态
2020中国峰会系列七 | 使用SPDK进行容器探索
SPDK | 每秒8千万次I/O性能实现
Release notes for VPP 21.06
点点“赞”和“在看”,给我充点儿电吧~
更多推荐
SPDK发布21.07版本
发布评论