Cyborg SPDK 驱动程序提案

https://blueprints.launchpad.net/openstack-cyborg/+spec/cyborg-spdk-driver

本文档提出为 Cyborg 的 SPDK 驱动程序提供初始设计。

问题描述

SPDK 是一个高性能工具包,提供用户空间、轮询模式、异步、无锁 NVMe 驱动程序,用于后端存储加速。我们的目标是为 Cyborg 添加一个 SPDK 驱动程序来管理 SPDK,并进一步提高存储性能。

用例

  • 当 Cinder 使用 Ceph 作为其后端时,用户应该能够使用 Cyborg SPDK 驱动程序来发现 SPDK 加速器后端,枚举已安装 SPDK 的 Ceph 节点列表。

  • 当 Cinder 直接使用 SPDK 的 BlobStore 作为其后端时,用户应该能够完成与上述 SPDK 相同的生命周期管理操作。枚举 SPDK 后,用户可以附加(安装)该节点上的 SPDK。任务完成后,用户还可以从该节点分离 SPDK。最后,用户应该能够更新最新和可用的 SPDK。

提议的变更

总的来说,目标是开发支持 SPDK 框架的发现/列出/更新/附加/分离操作的 Cyborg SPDK 驱动程序。

SPDK 框架

SPDK 框架包含以下组件

      +-----------userspace--------+  +--------------+
      | +------+ +------+ +------+ | | +-----------+ |
+---+ | |DPDK  | |NVMe  | |NVMe  | | | |   Ceph    | |
| N +-+-+NIC   | |Target| |Driver+-+-+ |NVMe Device| |
| I | | |Driver| |      | |      | | | +-----------+ |
| C | | +------+ +------+ +------+ | | +-----------+ |
+---+ | +------------------------+ | | | Blobstore | |
      | |     DPDK Libraries     | | | |NVMe Device| |
      | +------------------------+ | | +-----------+ |
      +----------------------------+ +---------------+

BlobStore NVMe 设备格式

BlobStore 拥有整个 NVMe 设备,包括元数据管理和数据管理,定义了三种基本的磁盘空间单元(如逻辑块、页、簇)。NVMe 设备从第一个逻辑块开始划分为簇。

LBA 0 LBA N +———–+———–+—–+———–+ | 簇 0 | 簇 1 | … | 簇 N | +———–+———–+—–+———–+

Cluster0 具有特殊格式,由页面组成。Page0 是 Cluster0 的第一个页面。Super Block 包含 BlobStore 的基本信息。

页面 0

页面 1 … 页面 N

Super Block

元数据区域

每个 blob 被分配一组不连续的页面。这些页面形成一个链接列表。通常,BlobStore 采用直接操作裸机设备的方式,避免文件系统,从而提高效率。

生命周期管理阶段

  • 我们应该能够在通用驱动模块中添加一个判断后端节点是否具有 SPDK 工具包的判断。如果为真,则初始化 DPDK 环境(如 hugepage)。

  • 导入通用驱动模块后,我们应该能够发现(探测)系统中的 SPDK。

  • 根据后端存储场景确定,枚举(列出)最佳 SPDK 节点,返回一个布尔值来判断是否应该附加 SPDK。

  • 在将运行 SPDK 的节点附加后,我们可以现在发送关于命名空间的信息请求,然后创建一个 I/O 队列对来将读/写请求提交到命名空间。

  • 当 Ceph 作为后端使用时,由于最新的 Ceph(如 Luminous)使用 BlueStore 作为存储引擎,BlueStore 和 BlobStore 非常相似。我们无法使用 BlobStore 来加速 Ceph,但我们可以使用 Ioat 和 poller 来提高存储速度。

  • 当 SPDK 作为后端使用时,我们应该能够使用 BlobStore 来提高性能。

  • 无论何时用户请求,我们都应该能够分离 SPDK 设备。

  • 无论何时用户请求,我们都应该能够更新 SPDK 到最新和稳定的版本。

备选方案

数据模型影响

  • Cyborg SPDK 驱动程序将在发生发现/列出/更新/附加/分离操作时通知 Cyborg Agent 更新数据库。

REST API 影响

该蓝图建议添加以下 API

  • cyborg discover-driver(driver_type)

  • cyborg driver-list(driver_type)

  • cyborg install-driver(driver_id, driver_type)

  • cyborg attach-instance <instance_id>

  • cyborg detach-instance <instance_id>

  • cyborg uninstall-driver(driver_id, driver_type)

  • cyborg update-driver <driver_id, driver_type>

安全影响

通知影响

其他最终用户影响

性能影响

SPDK 可以在后端提供用户空间、轮询模式、异步、无锁 NVMe 驱动程序,用于存储加速。

其他部署者影响

部署者可以在已安装 SPDK 的节点上调用 SPDK,在驱动程序实现后。

开发者影响

实现

负责人

主要负责人

luwei he <heluwei@huawei.com>

工作项

  • 实现本文档中提出的 cyborg-spdk-driver。

  • 将 SPDK 提案提交给 py-spdk。py-spdk 被设计为 SPDK 客户端,提供 python 绑定。

依赖项

  • Cyborg API 规范

  • Cyborg Agent 规范

  • Cyborg 驱动程序规范

  • Cyborg Conductor 规范

测试

  • 将添加单元测试来测试 Cyborg SPDK 驱动程序。

  • 将添加功能测试来测试 Cyborg SPDK 驱动程序。例如:discover–>list–>attach,是否可以成功通过工作流程。

文档影响

在 Cyborg 项目中记录 SPDK 驱动程序

参考资料

  • Cyborg API 规范

  • Cyborg Agent 规范

  • Cyborg 驱动程序规范

  • Cyborg Conductor 规范

历史记录

修订版

发布

描述

Queens

引入