SPDK发布v19.10

SPDK发布V19.10新版本啦!

新版本性能有很大的提升:

  • NVMe over TCP Target的相关优化提高了单个CPU Core的性能30%

  • SPDK NVMe初始化时间得到了10倍的改进,以增强应用程序重启的可服务性

此版本包含以下新功能

  • 分区bdev API:区域是bdev接口的扩展。该概念来自ATA / SCSI,目前正作为NVMe TP使用。现在可以查询Bdev以检查区域语义。

  • Opal bdev:已添加新的opal bdev,以支持通过Opal规范管理NVMe自加密驱动器。此功能目前是实验性的。

  • NVMe字符设备:添加了基于CUSE库的NVMe字符设备实现。它允许在Linux内核中为控制器和名称空间(即/ dev / nvmeXnY)创建NVMe设备节点。这些字符设备可由nvme-cli之类的工具使用。此功能目前是实验性的。

  • 通过RPC挂载BlobFS :通过RPC挂载BlobFS并添加到主机的路径上。

  • OCF:添加了对OCF v19.06的支持。添加了只写,写无效和写回模式支持。

  • DPDK:添加了对DPDK 19.08的支持。

  • RPC名称:在不同组件之间简化的RPC调用的名称。以前的RPC名称可用,但是将不建议使用。

完整版本更新于:https://github.com/spdk/spdk/releases/tag/v19.10

点击阅读全文获取最新SPDK19.10版本

rpc

在此版本中,许多SPDK的RPC被重命名为更加一致和直观。
旧名称将继续使用,但是将显示弃用警告。

在'bdev_nvme_set_options'RPC方法中添加了可选参数'--arbitration-burst'和'--low / medium / high-priority-weight' 。

在'construct_null_bdev'RPC方法中添加了可选参数'--md-size'。

在'construct_null_bdev'RPC方法中添加了可选参数'--dif-type'和'--dif-is-head-of-md' 。

添加了blobfs_detectRPC方法来检测给定bdev上是否存在blobfs。

添加了blobfs_createRPC方法以在给定的bdev上构建blobfs。

添加了blobfs_mountRPC方法,以通过FUSE将给定bdev上的blobfs挂载到主机路径。

然后,在主机路径上,用户可以直接执行一些文件操作,这些文件操作将映射到blobfs。

bdev

spdk_bdev_io_complete_nvme_status()spdk_bdev_io_get_nvme_status()中添加了新参数cdw0,该参数允许设置/获取NVMe完成队列DW0条目。这允许供应商特定的IO命令将命令特定的完成信息返回给启动器。

添加了spdk_bdev_get_write_unit_size()用于检索写操作所需的逻辑块数的功能。

新的与区域相关的字段已添加到get_bdevsRPC调用的结果中:

  • zoned:指示该设备是分区设备还是常规阻止设备

  • zone_size:单个区域中的块数

  • max_open_zones:最大开放区域数

  • optimal_open_zones:开放区域的最佳数量该zoned字段是一个布尔值,并且始终存在,而其余字段仅适用于分区的bdev。

    新功能spdk_bdev_open_ext已添加,并且spdk_bdev_open功能被弃用。

新的open函数引入了提供回调函数的需求,该回调函数将被诸如bdev删除之类的异步事件调用。spdk_bdev_open_ext函数接受bdev名称作为参数,而不是bdev结构,以避免在调用(根据名称获取其结构)和实际打开bdev之间删除bdev时出现竞争状态。

添加了新的“调整大小”事件,以通知有关块设备的块计数属性的更改。
仅当使用spdk_bdev_open_ext功能打开了块设备时,才传送事件。

zone bdev API

为分区的bdev添加了新的公共头。分区bdev是bdev接口的扩展。

spdk_bdev_get_zone_size()spdk_bdev_get_max_open_zones()spdk_bdev_get_optimal_open_zones()
被用于检索分区的设备信息添加的API。
spdk_bdev_get_zone_info()添加了API,以检索有关分区设备中区域的信息。
添加了spdk_bdev_zone_management()用于更改区域状态的API。
spdk_bdev_zone_append()并且spdk_bdev_zone_append_with_md()添加了用于将数据追加到区域的API 。
添加了spdk_bdev_io_get_append location()用于检索I / O附加位置的功能。
添加了spdk_bdev_is_zoned()用于检查bdev是否支持分区名称空间语义的功能。

Opal bdev 

实验:已添加新的Opal bdev,以支持通过Opal规范支持对NVMe自加密驱动器的管理。如果包含该命名空间的控制器支持Opal ,则用户可以从NVMe命名空间bdev创建opal bdev 。当前仅支持名称空间ID = 1。下面的RPC已添加到支持Opal:bdev_nvme_opal_initbdev_nvme_opal_revertbdev_opal_createbdev_opal_deletebdev_opal_get_info
bdev_opal_new_userbdev_opal_set_lock_state
它不支持在应用程序重启后重新创建Opal bdev。该bdev模块应被视为非常试验性的,并且RPC在将来的发行版中可能会发生重大变化。

delay bdev

添加了bdev_delay_update_latency以允许用户更新给定的延迟bdev的延时值。

compress bdev

一个新的RPC bdev_compress_get_orphans被添加到compress bdevs列表中,由于缺少持久化Metadata文件而无法加载。在这种情况下只能删除它们。

null bdev

元数据支持已添加到Null bdev模块。

保护信息支持已添加到Null bdev模块。

nvme

添加no_shn_notification到NVMe控制器初始化选项后,用户可以为NVMe控制器启用它。启用该选项后,控制器将不会执行关闭过程,而只是禁用控制器,用户可以稍后再次启动其应用程序以将控制器初始化为就绪状态。

添加了一个控制器标志SPDK_NVME_CTRLR_WRR_SUPPORTED,以指示控制器
可以支持加权轮循仲裁功能与提交队列。

为仲裁功能增加arbitration_burst选项,并增加三个
low/medium/high_priority_weight加权轮循仲裁选项。

新增spdk_nvme_ns_cmd_write_uncorrectable

添加了新的错误处理和报告功能。这包括几个新的API函数,用以在qpair或
控制器发生故障时促进应用程序恢复。

spdk_nvme_ctrlr_reconnect_io_qpair-重新连接失败的I / O qpair。
spdk_nvme_ctrlr_set_trid-设置现有控制器的Trid。在故障转移情况下可以用来更改trid。

spdk_nvme_ctrlr_is_failed-返回控制器的失败状态。
spdk_nvme_ctrlr_fail-强制控制器进入故障状态。

修改了多个API函数的返回行为,以便在qpair失败时更好地向应用程序指示。此功能列表包括:

spdk_nvme_qpair_process_completions
spdk_nvme_ns_cmd_*
spdk_nvme_ctrlr_process_admin_completions
spdk_nvme_ctrlr_cmd_*

现在,当这些函数在其上运行的qpair或控制器发生故障时,它们将返回-ENXIO 。

实验:添加了NVMe字符设备支持,以允许在Linux内核中为控制器以及命名空间创建NVMe设备节点,并照常从Linux环境中处理ioctl请求。

nvmf

spdk_nvmf_tgt_create函数现在接受类型的对象spdk_nvmf_target_opts
作为其唯一参数。这个新结构包含先前传递给该函数的max_subsystems参数。

添加了新的公共API函数spdk_nvmf_get_tgt,该函数允许用户通过提供对象名称来检索指向该spdk_nvmf_tgt对象的指针。在RPC或应用程序仅创建单个目标的特殊情况下,此函数可以接受空名称参数,并将返回唯一可用的目标。

现在,大多数NVMe-oF RPC都接受可选的tgt_name参数。这将使这些RPC与创建多个目标的应用程序一起使用。

三个新的NVMe-oF RPC被添加,nvmf_create_targetnvmf_delete_targetnvmf_get_targets。这些新的RPC提供了用于管理多个目标对象的基本接口。在SPDK中,目标对象定义了唯一的发现服务。从此版本开始,这些RPC不能与树状SPDK目标应用程序spdk_tgt和nvmf_tgt一起使用,它们使用单个全局目标结构。因此,它们不包含在scripts / rpc.py中。还添加了三个新的标头函数,以帮助处理多个目标。

spdk_nvmf_tgt_get_name将目标指针作为参数并返回其可读名称。
spdk_nvmf_get_first_target不接受任何参数,并返回全局列表中的第一个目标。
spdk_nvmf_get_next_tgt将目标指针用作参数并返回全局列表中的下一个指针。

spdk_nvmf_tgt_accept接受额外的参数,允许传递任意的new_qpair回调信息。当具有多个nvmf目标或不适合从全局变量检索上下文信息时,这将简化代码。

blobstore

新功能spdk_bdev_create_bs_dev_from_desc已添加,并且不建议使用spdk_bdev_create_bs_dev功能。
新的create函数可以与spdk_bdev_open_ext函数协同使用,后者提供回调函数,可以通过异步事件(如bdev移除)调用该回调函数。

blobfs_bdev

添加了一个新的blobfs模块bdev,以简化bdev在bdev上的操作。

添加spdk_blobfs_bdev_detect函数来检测给定块上是否存在blobfs设备。

添加spdk_blobfs_bdev_create函数来在给定块设备上创建blobfs。

通过FUSE 将函数spdk_blobfs_bdev_mount添加到给定块设备上的blobfs挂载到主机路径,然后,专门为一个挂载点创建一个新线程来处理blobfs API的FUSE请求。

build

选项将FUSE组件构建到blobfs_bdev模块中,以便安装blobfs文件系统。
这需要安装libfuse3。默认情况下,它是禁用的。如果./configure--with-fuse选项一起运行,它将被启用。

iSCSI

iSCSI Portal (入口)将不再与cpumask关联。新的连接的调度转向更加动态的机制。

添加一个新的RPCiscsi_portal_group_set_auth来设置特定于现有iSCSI Portal组的CHAP的认证。此RPC通过iSCSI Portal组的全局参数覆盖设置。

socket

添加spdk_sock_is_connected以检查套接字当前是否已连接。
spdk_sock_group_poll现在返回成功事件的数量。

env

添加spdk_pci_device_unclaim()了清理pciq声明文件的功能。

event

framework_start_initRPC在初始化期间,不再因错误而停止应用程序。

DPDK

将DPDK子模块更新为DPDK 19.08。

ocf

将OCF子模块更新为OCF v19.06

与更新一起,添加了新的缓存模式“只写”。

通过RPC添加了新的缓存模式,可以使用wi-写入无效和wa-写入。

新版本的OCF提供了完全异步的管理API。

特别感谢


本次版本包含来自44位作者的845次提交,其中包含超过44k行代码更改。我们特别要感谢所有第一次提交代码的贡献者:

  • Benjamin Saunders

  • Kay Bouché

  • Marcin Dzięgielewski

  • Michael Haeuptle

  • Michal Ben Haim

  • Tom Nabarro

  • Yang Fan

  • Yan Wang

  • Yao Liu

SPDK开源社区衷心感谢大家的贡献和努力!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SPDK(存储性能开发套件)官方文档中文版。 第一章 简介 1 1.1.什么是SPDK? 1 1.2.入门 1 1.3. Vagrant开发环境 3 1.4.更新日志(略) 6 第二章 概念 6 2.1. 用户空间驱动程序** 6 2.2. 来自用户空间的DMA** 7 2.3. 消息传递和并发** 9 2.4. NAND Flash SSD内部 13 2.5. 将I / O提交到NVMe设备** 15 2.5.1 NVMe规范 15 2.5.2 SPDK NVMe驱动程序I / O路径 15 2.6. 使用Vhost-user进行虚拟化I / O. 16 2.6.1 介绍 16 2.6.2 QEMU 17 2.6.3 设备初始化 18 2.6.4 I / O路径 19 2.6.5 SPDK优化 20 2.7. SPDK目录结构概述 20 2.8. SPDK移植指南 22 第三章 用户指南 22 3.1. 系统配置用户指南 22 3.1.1 IOMMU配置 22 3.2. SPDK应用程序概述 23 3.2.1 配置SPDK应用程序 23 3.3. iSCSI Target 26 3.3.1. iSCSI Target入门指南 26 3.3.2. 通过配置文件配置iSCSI Target 27 3.3.3. 通过RPC方法配置iSCSI Target 28 3.3.4. 配置iSCSI启动器 29 3.3.5. rpc配置示例*** 30 3.3.6. iSCSI 热插拔 32 3.4. NVMe over Fabrics Target 32 3.5. Vhost Target(略) 37 3.6 块设备用户指南 38 3.6.1 bdev介绍 38 3.6.2 通用RPC命令 38 3.6.3 Ceph RBD 39 3.6.4 压缩虚拟Bdev模块 40 3.6.5 加密虚拟Bdev模块 41 3.6.6 延迟vbdev模块 41 3.6.7 GPT(GUID分区表) 42 3.6.8 iSCSI bdev 43 3.6.9 Linux AIO bdev 43 3.6.10 OCF虚拟bdev 43 3.6.11 Malloc bdev 44 3.6.12 NULL bdev 44 3.6.13 NVMe bdev 44 3.6.14 逻辑卷Lvol 45 3.6.15 RAID 46 3.6.16 Passthru 46 3.6.17 Pmem 46 3.6.18 Virtio Block 47 3.6.19 Virtio SCSI 47 3.7 BlobFS(Blobstore文件系统) 48 3.7.1 RocksDB集成 48 3.7.2 FUSE插件 49 3.8 JSON-RPC方法(略) 49 第四章 程序员指南 49 4.1. Blobstore程序员指南 49 4.1.1 介绍 50 4.1.2 运作理论 50 4.1.3 设计注意事项 52 4.1.4 例子 54 4.1.5配置 54 4.1.6 组件细节 54 4.2. 块设备层编程指南 56 4.3 编写自定义块设备模块 58 4.3.1 介绍 58 4.3.2 创建一个新模块 59 4.3.3创建虚拟Bdev 60 4.4 NVMe over Fabrics目标编程指南 61 4.4.1 介绍 61 4.4.2 原语结构体 61 4.4.3 基础函数 62 4.4.4访问控制 62 4.4.5发现子系统 62 4.4.6 传输 63 4.4.7选择线程模型 63 4.4.8 跨CPU核心扩展 63 4.4.9 零拷贝支持 63 4.4.10 RDMA 63 4.5 Flash传输层 64 4.5.1 术语 64 4.5.2 使用方法 67 4.6 GDB宏用户指南 69 4.6.1 介绍 69 4.6.2 加载gdb宏 71 4.6.3 使用gdb数据目录 72 4.6.4 使用.gdbinit加载宏 72 4.6.5 为什么我们需要显式调用spdk_load_macros 72 4.6.6 以上可用的宏总结 73 4.6.7 添加新宏 73 4.7 SPDK “Reduce”块压缩算法 73 4.7.1 介绍 73 4.7.2 例子 74 4.8 通知库 78 第五章 基本信息 79 5.1 事件框架 79 5.1.1 事件框架设计注意事项 80 5.1.2 SPDK事件框架组件 80 5.1.3 应用框架 80 5.2 逻辑卷 81 5.2.1 术语 81 5.2.2 配置逻辑卷 84 5.3 矢量数据包处理(略) 86 第六章 杂项 86 6.1 介绍 86 6.2 NVMe的P2P API 86 6.3 确定设备支持 87 6.4 P2P问题 87 第七章 驱动程序 88 7.1 NVMe驱动程序*** 88 7.1.1 介绍 88 7.1.2 例子 88 7.1.3 公共接口 89 7.1.4 NVMe驱动程序设计 89 7.1.5 NVMe over Fabrics主机支持 91 7.1.6 NVMe多进程 91 7.1.7 NVMe Hotplug 92 7.2 I/OAT驱动程序 93 7.2.1 公共接口 93 7.2.2 关键功能 93 7.3 Virtio驱动程序 93 7.3.1 介绍 93 7.3.2 2MB大页面 93 第八章 工具 94 8.1 SPDK CLI 94 8.1.1 安装所需的依赖项 94 8.1.2 运行SPDK应用程序实例 94 8.1.3 运行SPDK CLI 94 8.1.4 可选 - 创建Python虚拟环境 94 8.2 nvme-CLI 95 8.2.1 nvme-cli with SPDK入门指南 95 8.2.2 使用场景 95 第九章 性能测试报告(略) 96 第十章NVMe-oF Target跟踪点*** 96 10.1 介绍 96 10.2 启用跟踪点 97 10.3 捕获事件的快照 97 10.4 捕获足够的跟踪事件 98 10.5 添加新的跟踪点 99

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值