为 Cinder 后端添加报告 discard/unmap/trim 功能

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

目前,libvirt/qemu 在将卷附加到实例时支持 discard 选项。通过此功能,可以从客户机向物理存储设备发送 unmap/trim 命令。

Cinder 后端应报告一个连接能力,该能力可用于指示 Nova 如何附加卷。

本规范旨在添加支持为 Cinder 卷启用 discard 的辅助功能。

问题描述

目前,Nova 无法知道 Cinder 后端是否支持 discard/trim/unmap 功能。本规范旨在向 Nova 提供此信息。

用例

如果 Cinder 后端使用的介质可以利用 discard 功能,则应提供一种方法来实现这一点。这将提高此类后端的长期性能。

提议的变更

任何想要支持此功能的驱动程序只需在 intialize_connection 返回的属性中添加一个条目即可。

“discard”: True,

Pure Storage 驱动程序的一个示例是

properties = {
    "driver_volume_type": "iscsi",
    "data": {
        "target_iqn": target_port["iqn"],
        "target_portal": target_port["portal"],
        "target_lun": connection["lun"],
        "target_discovered": True,
        "access_mode": "rw",
        "discard": True,
    },
}

备选方案

替代方案包括为每个支持此功能的后端在 cinder.conf 中添加一个设置。这包括一个手动步骤,更容易出错。

数据模型影响

REST API 影响

需要更新对 ‘initialize_connection’ 的响应的文档,其中包含说明提供此新信息的注释。

安全影响

通知影响

其他最终用户影响

性能影响

对于受益于 discard 功能的后端,将会有性能提升。

有关更多信息,请参阅 https://en.wikipedia.org/wiki/Trim_(computing)。

其他部署者影响

部署者需要向 Glance 镜像添加一些属性才能使其工作。一旦从修改后的镜像启动实例,驱动程序报告的 discard 功能将被激活。

hw_scsi_model=virtio-scsi hw_disk_bus=scsi

glance image-update –property hw_scsi_model=virtio-scsi

–property hw_disk_bus=scsi <image-uuid>

这将在以下位置通过代码更改在实例上创建正确的控制器 https://review.openstack.org/#/c/70263/。一旦正确的控制器到位,Cinder 后端指定的 unmap 功能将被利用。

二次卷附加将单独处理,并会遵守连接时提供的 discard 设置。

开发人员影响

实现

负责人

主要负责人

  • Daniel Wilson

工作项

将“discard”: True 行添加到 Pure Storage 驱动程序。

同时在 Nova 中实现此功能。 https://review.openstack.org/#/c/205726/1

依赖项

测试

此规范不需要 Tempest 测试。Pure Storage CI 将使用现有的 tempest 测试来测试此代码路径。

文档影响

需要更新对 ‘initialize_connection’ 的响应的文档,其中包含说明提供此新信息的注释。

参考资料

https://en.wikipedia.org/wiki/Trim_(computing)