为 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-scsihw_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 设置。

文档影响

我们可能需要向云管理员指南添加文档,说明如何利用此功能。

参考资料

Cinder Blueprint

https://blueprints.launchpad.net/cinder/+spec/cinder-backend-report-discard

Cinder Spec

https://specs.openstack.org/openstack/cinder-specs/specs/liberty/cinder-backend-report-discard.html

历史

修订版

发布名称

描述

Mitaka

引入