CPUEntitlement
- Launchpad 条目: NovaSpec:cpu-entitlement
- 创建时间: 2013年1月8日
- 贡献者: Oshrit Feder
总结
扩展Openstack Nova资源模型,以支持不同VM实例类型vCPU的差异化CPU预留(配额)
发布说明
使管理员能够保证VM的CPU预留
原理
云用户可以根据其计算需求从各种实例类型中订购实例,并相应地付费。vCPU资源指示分配给VM的计算资源量,但由于硬件及其物理CPU资源在所有VM之间共享,因此VM无法保证任何最小的CPU预留。实际上,VM在CPU上调度的时长随时间变化,并且取决于底层hypervisor调度算法的实现、其他VM的CPU消耗需求、超卖比率、主机的CPU强度等。一些hypervisor暴露了CPU预留功能(IBM PowerVM、ESX、Xen),而在其他hypervisor中,可以使用其他工具来强制执行它(例如,KVM中的cgroups)。我们建议提供一个统一的API来支持不同VM实例类型的差异化CPU预留(配额)。
在使用通用硬件时,相关问题是托管VM的不同计算节点可能具有异构的计算性能。在这种情况下,VM接收的CPU容量(或预留的CPU容量)取决于其调度的计算节点,并且如果迁移到不同的计算节点,可能会有所不同。我们建议管理员为某些主机定义计算能力,作为一种相对地衡量计算节点相对于其他计算节点的方法,并确保无论实际底层硬件如何,都能保证一致的CPU容量。
需要考虑的另一个与CPU预留相关的功能是配额。管理员可能希望控制用户的“CPU配额”——就像实例数量配额和vCPU数量配额一样,CPU配额对用户实例消耗的pcpu数量设置上限。
用户故事
- 管理员希望保证VM的CPU预留
前提条件
设计
截至本文档编写时,KVM是Openstack中常用的hypervisor。管理员可以通过分配vCPU、设置整体CPU超卖级别和使用core_filter来有限地控制VM的CPU资源。hypervisor的调度器根据调度器的算法将所有VM调度到pcpu上。当完全超卖并且所有配置的VM请求CPU时,公平的调度器将为每个VM提供1/overcommit_level的CPU。为了为每个VM分配CPU预留,我们建议扩展实例类型,添加compute_units_per_vcpu,以确定cpu_entitlement级别并定义应预留多少核心。Entitlement_filter将弃用现有的Core_filter并强制单个compute_node上compute_units_per_vcpu的总和小于计算出的节点总compute_units_per_core。在Nova Compute中,每个平台会将compute_unit转换为特定的hypervisor内部机制;例如,KVM中的shares。
受EC2启发,为Nova compute中的每个节点添加compute_unit_per_core,可以为管理员提供区分节点CPU容量的概念。节点的compute_unit_per_core指定相对于默认CPU容量的节点CPU容量。
实现
我们建议以简单而灵活的方式公开此功能
- 在Nova.conf中,管理员将被允许定义各种VM的compute_unit_per_vcpu,形式为compute_unit_per_vcpu = high:1.0, normal:0.5, low:0.25, default:0.25。在上面的示例中,high表示每个VM的vCPU的CPU配额为1个核心(100%的pcpu)。如果VM有2个vCPU,则其总CPU配额= 2个核心(200%)。Default表示如果实例类型未指定任何内容,则表示默认VM CPU配额。
- 在Instance_Type的extra_spec字段中,管理员将指定预定义的compute_unit_per_vcpu之一,以设置每个VM的CPU配额。
- 为了强制执行cpu_entitlement,scheduler_default_filters应包括entitlement_filter
- 为了区分各个计算节点的CPU容量,管理员可以将每个计算节点设置为compute_unit_per_core(0.3、0.5等),这表示相对于默认CPU容量的相对容量。
代码变更
受影响的组件:Nova.conf、Instance_type、Nova_Compute:主机容量、驱动程序、Scheduler:entitlement_filter
相关条目
https://blueprints.launchpad.net/nova/+spec/quota-instance-resource
Quota-instance-resource条目处理扩展Nova的InstanceType,添加“CPU控制参数”。此蓝图与其互补,因为它使用相同的机制来暴露VM CPU预留。
测试/演示计划
这不必在规范接近 Beta 之前添加或完成。
未解决的问题
这应该突出显示需要在进一步的规范中解决的任何问题,而不是规范本身的问题;因为任何存在问题的规范都无法获得批准。
BoF 议程和讨论
使用本节记录 BoF 期间的笔记;如果将其保留在批准的规范中,请用于总结讨论内容并记录任何被拒绝的选项。