SPDK v21.07
最近,SPDK团队正式发布了21.07版本。 一起看看有什么新功能吧。 (温馨提示:英语函数名称较长,为了获得更好的阅读体验,建议用手机横屏阅读() ) ) )。
新功能
33558www.Sina.com/idxd库添加了对内核DSA驱动程序的支持。
添加3358www.Sina.com/init库,实现SPDK子系统初始化。
添加了对在3358 www.Sina.com/spdk APP应用程序中执行bpf跟踪的支持。 详情请参阅https://spdk.io/doc/usdt.html。
增加了一个可以生成-内核DSA:幂律概率分布的zipf随机数发生器。 将bdevperf与nvme perf工具结合使用,可以在生成覆盖所有LBA的块的同时选择更频繁的小LBA地址。
请访问https://github.com/spdk/spdk/releases/tag/v 21.07了解此次发布的完整原文。
http://www.Sina.com/http://www.Sina.com /
此版本包含711个提交,35,000个代码行更改,由56个作者共同创建。
在此特别感谢首次提交代码的以下贡献者:
Curt Bruns
Jakub Wyka
约翰莱昂
约翰蒂
Matt Dumm
Matthew Burbridge
Rajarshi Chowdhury
Scott Peterson
Swapnil Ingle
Tyler Sun
武孟金
Yuri Kirichok
http://www.Sina.com/http://www.Sina.com /
-Init 库:
-用户态DTrace:
添加了APIs pdk _ Accel _ submit _ copy _ CRC32c,并在复制数据时运行crc32 c。
添加APIs pdk _ Accel _ batch _ prep _ copy _ CRC32c并批处理crc32 c和复印命令。
添加了APIs pdk _ Accel _ submit _ copy _ CRC32cv,并提交了链式crc32 c和复制命令。
- zipf实用程序:
将spdk _ bdev _ read _ blocks _ with _ MD arg偏移定义从int64_t更改为uint64_t。
使用红黑树统一组织bdev的名称和别名,实现更快的搜索。
删除了ZCOPY模拟。 可以检查bdev模块是否支持ZCOPY,如果不支持,可以运行现有的READ/WRITE命令。
已将iov添加到spdk_bdev_zcopy_start。
特别感谢
将DPDK子模块更新为DPDK 21.05。
!
从spdk_idxd_probe函数中删除probe_cb参数。 删除spdk_idxd_probe_cb函数指针的定义。 必须在idxd_user.c上运行。
添加了APIs pdk _ idxd _ submit _ copy _ CRC32c,并在复制数据的同时运行crc32 c。
添加了APIs pdk _ idxd _ batch _ prep _ copy _ CRC32c,以创建在复制数据的同时运行crc32 c的批处理。
我们已经支持accel_engine库(module/accel/idxd/accel_engine )下的用户状态idxd驱动程序。 这次,我们将内核状态的idxd驱动程序添加到了accel_engine库中。 通过此方法,可以通过SPDK idx库(lib/IDXD )的内核DSA驱动程序实现使用idxd设备的包装库功能。 然后,用户可以使用RPC通过用户状态驱动程序或内核状态驱动程序使用DSA设备进行适当的配置。
SPDK开源社区衷心感谢
添加了新的init库,可以初始化APP应用程序框架内部的SPDK子系统。 此功能是公开的,可以运行不使用spdk APP应用程序框架的APP应用程序。
>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,禁用hldkfd log页面读取。若结果为true,则上层会读取hldkfd 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文档(https://spdk.io/doc/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
点点“赞”和“在看”,给我充点儿电吧~