跳转到: 导航, 搜索

Admin-set-resource-quota-dynamically

Warning.svg 旧设计页面

此页面曾用于帮助设计 OpenStack 早期版本的一个特性。它可能已经被实现,也可能没有。因此,此页面可能不会更新,并且可能包含过时的信息。上次更新时间为 2015-01-09

  • Launchpad 条目: NovaSpec:admin-set-resource-quota-dynamically
  • 创建日期: 2013年9月18日
  • 贡献者: Yu Zhang

简介

为了在 IaaS 云操作中实现高成本效益,云管理员试图在保证用户 QoS 需求的同时节省物理资源。随着越来越多的 IaaS 云部署,IaaS 操作中的成本效益问题变得越来越重要,吸引了公共和私有云所有者和管理员的关注。

IaaS 操作中的高成本效益已成为一个重要问题,吸引了公共和私有云所有者和管理员的关注。
高成本效益的 IaaS 操作需要定量且准确地为 VM 实例分配物理资源配额,例如物理 CPU 执行时间、物理内存限制、blkio 和网络带宽。从 Grizzly 版本开始,OpenStack 引入了 实例资源配额 功能,该功能提供了静态实例配额分配的能力。通过此功能,可以在创建实例时为其静态分配和保留定量且准确的资源配额。此功能是对 OpenStack 基本资源分配机制的重大改进,在基本机制中只能指定基本参数,例如 VCPU 数量。

高成本效益的 IaaS 操作需要定量且准确地为 VM 实例分配物理资源配额,例如物理 CPU 执行时间、物理内存限制、blkio 和网络带宽。从 Grizzly 版本开始,OpenStack 引入了 实例资源配额 功能,该功能提供了静态实例配额分配的能力。通过此功能,可以在创建实例时为其静态分配和保留定量且准确的资源配额。此功能是对 OpenStack 基本资源分配机制的重大改进,在基本机制中只能指定基本参数,例如 VCPU 数量。
高成本效益的 IaaS 操作需要定量且准确地为 VM 实例分配物理资源配额,例如物理 CPU 执行时间、物理内存限制、blkio 和网络带宽。从 Grizzly 版本开始,OpenStack 引入了 实例资源配额 功能,该功能提供了静态实例配额分配的能力。通过此功能,可以在创建实例时为其静态分配和保留定量且准确的资源配额。此功能是对 OpenStack 基本资源分配机制的重大改进,在基本机制中只能指定基本参数,例如 VCPU 数量。
从 Grizzly 版本开始,OpenStack 引入了
实例资源配额,该功能提供了静态
实例配额分配的能力。通过此功能,可以在创建实例时为其静态分配和保留定量且准确的资源配额。此功能是对 OpenStack 基本资源分配机制的重大改进,在基本机制中只能指定基本参数,例如 VCPU 数量。
此功能是对 OpenStack 基本资源分配机制的重大改进,在基本机制中只能指定基本参数,例如 VCPU 数量。
此功能是对 OpenStack 基本资源分配机制的重大改进,在基本机制中只能指定基本参数,例如 VCPU 数量。
此功能是对 OpenStack 基本资源分配机制的重大改进,在基本机制中只能指定基本参数,例如 VCPU 数量。

根据我们 IaaS 运营实践中得出的要求,我们认识到实例级物理资源配额分配仍有进一步改进的空间。除了静态实例配额分配能力外,动态实例配额调整对于云管理员也很有价值。通过这种动态调整能力,他们可以在实例运行时根据需求重新分配资源。例如,管理员可以为运行计算密集型或延迟关键型工作负载的高优先级实例分配更多的物理 CPU 执行时间。此外,可以为运行 I/O 密集型工作负载的高优先级实例分配更多的 blkio 带宽。结合动态调整能力和现有的静态分配能力,可以在创建实例之前或之后做出此类资源分配决策。
根据我们 IaaS 运营实践中得出的要求,我们认识到实例级物理资源配额分配仍有进一步改进的空间。除了静态实例配额分配能力外,动态实例配额调整对于云管理员也很有价值。通过这种动态调整能力,他们可以在实例运行时根据需求重新分配资源。例如,管理员可以为运行计算密集型或延迟关键型工作负载的高优先级实例分配更多的物理 CPU 执行时间。此外,可以为运行 I/O 密集型工作负载的高优先级实例分配更多的 blkio 带宽。结合动态调整能力和现有的静态分配能力,可以在创建实例之前或之后做出此类资源分配决策。
根据我们 IaaS 运营实践中得出的要求,我们认识到实例级物理资源配额分配仍有进一步改进的空间。除了静态实例配额分配能力外,动态实例配额调整对于云管理员也很有价值。通过这种动态调整能力,他们可以在实例运行时根据需求重新分配资源。例如,管理员可以为运行计算密集型或延迟关键型工作负载的高优先级实例分配更多的物理 CPU 执行时间。此外,可以为运行 I/O 密集型工作负载的高优先级实例分配更多的 blkio 带宽。结合动态调整能力和现有的静态分配能力,可以在创建实例之前或之后做出此类资源分配决策。
动态实例配额调整对于云管理员也很有价值。通过这种动态调整能力,他们可以在实例运行时根据需求重新分配资源。例如,管理员可以为运行计算密集型或延迟关键型工作负载的高优先级实例分配更多的物理 CPU 执行时间。此外,可以为运行 I/O 密集型工作负载的高优先级实例分配更多的 blkio 带宽。结合动态调整能力和现有的静态分配能力,可以在创建实例之前或之后做出此类资源分配决策。
例如,管理员可以为运行计算密集型或延迟关键型工作负载的高优先级实例分配更多的物理 CPU 执行时间。此外,可以为运行 I/O 密集型工作负载的高优先级实例分配更多的 blkio 带宽。结合动态调整能力和现有的静态分配能力,可以在创建实例之前或之后做出此类资源分配决策。
例如,管理员可以为运行计算密集型或延迟关键型工作负载的高优先级实例分配更多的物理 CPU 执行时间。此外,可以为运行 I/O 密集型工作负载的高优先级实例分配更多的 blkio 带宽。结合动态调整能力和现有的静态分配能力,可以在创建实例之前或之后做出此类资源分配决策。
例如,管理员可以为运行计算密集型或延迟关键型工作负载的高优先级实例分配更多的物理 CPU 执行时间。此外,可以为运行 I/O 密集型工作负载的高优先级实例分配更多的 blkio 带宽。结合动态调整能力和现有的静态分配能力,可以在创建实例之前或之后做出此类资源分配决策。
例如,管理员可以为运行计算密集型或延迟关键型工作负载的高优先级实例分配更多的物理 CPU 执行时间。此外,可以为运行 I/O 密集型工作负载的高优先级实例分配更多的 blkio 带宽。结合动态调整能力和现有的静态分配能力,可以在创建实例之前或之后做出此类资源分配决策。
例如,管理员可以为运行计算密集型或延迟关键型工作负载的高优先级实例分配更多的物理 CPU 执行时间。此外,可以为运行 I/O 密集型工作负载的高优先级实例分配更多的 blkio 带宽。结合动态调整能力和现有的静态分配能力,可以在创建实例之前或之后做出此类资源分配决策。
结合动态调整能力和现有的静态分配能力,可以在创建实例之前或之后做出此类资源分配决策。
结合动态调整能力和现有的静态分配能力,可以在创建实例之前或之后做出此类资源分配决策。

在本蓝图中,我们建议动态调整可用物理资源的能力,例如实例 VCPU 的 CPU 执行时间、物理内存占用、磁盘 I/O 带宽等。通过此功能,可以定量确定实例运行时应分配和保留多少物理资源。
在本蓝图中,我们建议动态调整可用物理资源的能力,例如实例 VCPU 的 CPU 执行时间、物理内存占用、磁盘 I/O 带宽等。通过此功能,可以定量确定实例运行时应分配和保留多少物理资源。
在本蓝图中,我们建议动态调整可用物理资源的能力,例如实例 VCPU 的 CPU 执行时间、物理内存占用、磁盘 I/O 带宽等。通过此功能,可以定量确定实例运行时应分配和保留多少物理资源。
在本蓝图中,我们建议动态调整可用物理资源的能力,例如实例 VCPU 的 CPU 执行时间、物理内存占用、磁盘 I/O 带宽等。通过此功能,可以定量确定实例运行时应分配和保留多少物理资源。

设计与实现

此功能取决于 libvirt 提供的 cgroup 支持。例如,通过公开 libvirt 中 virDomain 类的 setSchedulerParameters() 方法,我们可以实现对物理 CPU 执行时间的管理。
例如,通过公开 libvirt 中 virDomain 类的 setSchedulerParameters() 方法,我们可以实现对物理 CPU 执行时间的管理。
例如,通过公开 libvirt 中 virDomain 类的 setSchedulerParameters() 方法,我们可以实现对物理 CPU 执行时间的管理。

为了实现此 CPU 执行时间管理,建议的修改包括

  • 在 nova-api 中定义了一个名为 _action_set_cpu_time_quota() 的操作

要修改的文件
/nova/api/openstack/compute/servers.py
/nova/compute/instance_actions.py

  • 在 nova-compute 中定义了一个名为 set_cpu_time_quota() 的 api

要修改的文件
/nova/compute/api.py
/nova/compute/rpcapi.py
/nova/compute/manager.py

  • libvirt 中 virDomain 类的 setSchedulerParameters() 方法在 nova-virt 中公开

要修改的文件
/nova/virt/driver.py
/nova/virt/libvirt/driver.py

此 CPU 执行时间管理的执行流程如下图所示

Execution flow

状态与时间表

动态调整 CPU 执行时间的功能已在我们本地的 OpenStack 环境中实现并运行良好。

测试

待添加

范围

由于此功能依赖于 Linux 的 cgroup 和 libvirt,因此,如果未使用 KVM 或 libvirt,此功能可能无法工作。
但基于此功能,对其他 hypervisor 和驱动程序的支持应该更容易添加。

参考资料

  • cgroup 文档

https://linuxkernel.org.cn/doc/Documentation/cgroups/cgroups.txt

  • libvirt API 文档

http://libvirt.org/html/libvirt-libvirt.html

  • 相关蓝图

实例资源配额
- Wiki: https://wiki.openstack.org/wiki/InstanceResourceQuota
- Blueprint: https://blueprints.launchpad.net/nova/+spec/quota-instance-resource