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 |
引入 |