增强 KVM 存储 QoS

https://blueprints.launchpad.net/nova/+spec/enhanced-kvm-storage-qos

QEMU 1.7 [1] 和 Libvirt 1.2.11 [2] [3] 提供了指定每个磁盘最大突发 IOPS 和最大突发带宽的选项。此外,磁盘 IO 大小也可以作为此版本的 QEMU 的一部分来指定。

此蓝图建议为连接卷的 QoS 规格添加对这些附加设置的支持。

问题描述

目前,Nova libvirt 驱动程序不支持设置存储 IOPS 限制。因此,某些实例可能会耗尽存储资源,影响其他租户。

用例

  • 将通过 Cinder 导出的卷的前端 QoS 规格与 burst IOPs 和带宽相关联,这些将在超visor端处理。这是对现有 IOPs 和带宽限制的补充。

  • 为通过 Cinder 导出的卷设置块 IO 大小,用于 IOPs。

  • 通过使用 Cinder 附加规格,为实例附加的磁盘设置 IOPs 和带宽突发限制以及块 IO 大小。

提议的变更

Cinder 附加的卷可以分配额外的 QoS 规格。当卷附加时,Nova 应该应用前端 QoS 规格。这些是按卷应用的。

此蓝图建议使用 Cinder 卷附加规格指定额外的每卷 QoS 规格。libvirt 驱动程序将基于每个卷将这些 IOPs 和带宽限制应用于实例磁盘。

此外,此蓝图建议使用 cinder 卷附加规格,基于每个卷地为 Cinder 附加的卷添加块 IO 大小控制。

仅在通过 Cinder 导出的卷的情况下才支持前端卷规格。Nova 直接提供的本地驱动器不提供 QoS 规格。

用例示例

  • 管理员为特定卷类型设置前端 QoS 规格
    cinder qos-create my-qos consumer=front-end

    total_bytes_sec_max=300000000

    cinder qos-associate my-qos <volume_type_id>

    cinder create <size> –volume-type <volume_type_id>

    # 当卷附加到 KVM 实例时应用这些 QoS 规格 nova volume-attach <instance_id> <volume_id>

可用的附加 QoS 规格,其中每个规格都会在每个设备的 libvirt XML 定义中添加额外的行,具体来说是在 <iotune> 部分中,如下所示:

  • read_bytes_sec_max

    add <read_bytes_sec_max>value</read_bytes_sec_max>

  • write_bytes_sec_max

    add <write_bytes_sec_max>value</write_bytes_sec_max>

  • total_bytes_sec_max - 包括读/写

    add <total_bytes_sec_max>value</total_bytes_sec_max>

  • read_iops_sec_max

    add <read_iops_sec_max>value</read_iops_sec_max>

  • write_iops_sec_max

    add <write_iops_sec_max>value</write_iops_sec_max>

  • total_iops_sec_max - 包括读/写

    add <total_iops_sec_max>value</total_iops_sec_max>

  • size_iops_sec

    add <size_iops_sec>value</size_iops_sec>

备选方案

数据模型影响

REST API 影响

安全影响

通知影响

其他最终用户影响

由于 Nova 支持 N-1 版本的计算节点,如果这些新的 QoS 规格应用于正在运行 Queens 的计算节点,则这些新的规格将被忽略。Queens 节点不会提供任何错误消息。

现有 Cinder QoS 规格记录在 Cinder 管理员文档集中。[8]

性能影响

允许某些卷的突发 IOPs 和带宽将允许某些应用程序在需要时更好地执行。

其他部署者影响

开发人员影响

升级影响

实现

负责人

主要负责人

simon-dodsley

工作项

  • 通过扩展 nova/virt/libvirt/volumes/ 块卷驱动程序将新的卷属性传递到 LibvirtConfigGuestDisk 通过 `connection_info` 字典中的 qos_specs’,在 libvirt 卷驱动程序中添加突发和 IO 大小 QoS 规格支持。

  • 扩展 LibvirtConfigGuestDisk 类以添加磁盘设备的磁盘突发限制 [2]

依赖项

Ubuntu 16.04 中包含的 QEMU [4] [5] 和 Ubuntu 16.04 中更高版本的 libvirt [4] [5]。也已包含在 Fedora 24 中 [6] [7]

测试

  • 单元测试

  • 现有测试将确保 quest XML 格式正确,假设存在所需版本的 libvirt 和 QEMU。

文档影响

libvirt 驱动程序文档中描述了额外的 QoS 功能 [1]

将更新 Cinder 管理员指南以添加这些新的前端 QoS 存储参数。

参考资料

历史

修订

发布名称

描述

Rocky

引入