为 Cinder 后端添加对 discard/unmap/trim 的支持¶
https://blueprints.launchpad.net/nova/+spec/cinder-backend-report-discard
目前,libvirt/qemu 在将卷附加到实例时支持 discard 选项。通过此功能,可以从客户机向物理存储设备发送 unmap/trim 命令。
Cinder 后端将报告一个连接能力,Nova 将在附加卷时使用该能力。
问题描述¶
目前,Nova 无法知道 Cinder 后端是否支持 discard/trim/unmap 功能。Cinder 正在添加功能以提供此信息。该规范旨在添加利用该信息的能力。
用例¶
如果 Cinder 后端使用可以利用 discard 功能的介质,则应该有办法做到这一点。这将提高此类后端的长期性能。
提议的变更¶
将添加代码以检查从 Cinder attach API 返回给 Nova 的 ‘discard’ 属性。如果存在且设置为 True,我们将修改 libvirt 卷驱动程序返回的配置以包含
driver_discard = "unmap"
只有当实例配置了支持 Trim/Unmap 命令的接口和总线类型时,才能获得所需的支持。在可以检测到 discard 实际上无法为实例工作的情况下,我们将记录警告,但仍继续进行附加操作。
目前 virtio-blk 后端不支持 discard。
有几种方法可以获得支持 discard 的实例,例如使用 virtio-scsi 存储接口和 scsi 总线类型。要创建具有此支持的实例,必须从配置了 hw_scsi_model=virtio-scsi 和 hw_disk_bus=scsi 的镜像启动。
重要的是要注意,nova.conf 选项 hw_disk_discard 不会被此功能读取。我们完全依赖 Cinder 来指定是否应为卷使用 discard。
备选方案¶
替代方案包括为所有驱动器添加 discard,如果操作员设置了 hw_disk_discard,但这被认为不是解决问题的最佳方法,因为无法轻松混合不同的底层卷提供程序。
我们也可以在附加 Cinder 卷时热插一个能够支持 discard 的 SCSI 控制器。这将允许混合来自镜像的非 trim 启动磁盘,然后附加将获得好处的 Cinder 卷。风险是实例可能无法实际支持执行 UNMAP。
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
对于受益于 discard 功能的后端,将会有性能提升。
有关更多信息,请参阅 https://en.wikipedia.org/wiki/Trim_(computing)。
其他部署者影响¶
希望在其 Cinder 后端中使用此功能的部署者需要确保实例配置了支持 discard 的 SCSI 模型和总线。这包括 IDE、AHCI 和 Xen 磁盘。virtio-blk 是唯一缺少此支持的后端。
一种启用此功能的方法是修改 Glance 镜像以包含以下属性
hw_scsi_model=virtio-scsi
hw_disk_bus=scsi
此外,计算节点需要使用 libvirt 1.0.6 或更高版本和 QEMU 1.6.0 或更高版本。
开发人员影响¶
无
实现¶
负责人¶
主要负责人:* Patrick East
工作项¶
修改 libvirt 驱动程序中的卷附加代码以检查新的 Cinder 连接属性。
添加新功能的单元测试,并根据需要修改任何现有测试。
配置 Pure Storage 第三方 CI 系统以启用此功能并将其作为 Cinder CI 进行验证。此配置更改将提供给任何其他第三方 CI 维护者,以允许其他系统使用此功能启用进行测试。
依赖项¶
- Cinder Blueprint(已完成并在 Liberty 中发布)
https://blueprints.launchpad.net/cinder/+spec/cinder-backend-report-discard
测试¶
单元测试需要包含来自 Cinder 的 discard 标志的所有排列。
我们可以配置其中一个 jenkins 作业以启用此功能。一个不错的起点可能是 Ceph 作业。潜在地,可以添加一个 Tempest 测试,该测试在配置选项后面进行验证,以验证卷附加是否获得正确的 discard 设置。
文档影响¶
我们可能需要向云管理员指南添加文档,说明如何利用此功能。
参考资料¶
历史¶
发布名称 |
描述 |
|---|---|
Mitaka |
引入 |