nova如何让cpu超配比生效

就个人目前所知,L版有3种方式配置cpu的超配比。当然有什么错误之处,还请见谅!

a、AggregateCoreFilter的cpu_allocation_ratio metadata key

使用:nova aggregate-set-metadata 1 cpu_allocation_ratio=2.0

b、compute node的配置文件nova.conf支持cpu_allocation_ratio参数设置

c、原本的controller node nova.conf的cpu_allocation_ratio参数设置

优先级:a > b > c

为什么是这样的优先级呢,下面看代码:

class AggregateCoreFilter(BaseCoreFilter):
    """AggregateCoreFilter with per-aggregate CPU subscription flag.
    Fall back to global cpu_allocation_ratio if no per-aggregate setting found.
    """
    def _get_cpu_allocation_ratio(self, host_state, filter_properties):
        import pdb;pdb.set_trace()
        aggregate_vals = utils.aggregate_values_from_key(
            host_state,
            ‘cpu_allocation_ratio‘)
        try:
            ratio = utils.validate_num_values(
                aggregate_vals, host_state.cpu_allocation_ratio, cast_to=float)         # host_state是从nova数据库中compute_node表来的
        except ValueError as e:
            LOG.warning(_LW("Could not decode cpu_allocation_ratio: ‘%s‘"), e)
            ratio = host_state.cpu_allocation_ratio
        return ratio
        
# 如果没设置Aggregation主机聚合的cpu_allocation_ratio metadata key,返回空set
def aggregate_values_from_key(host_state, key_name):
    """Returns a set of values based on a metadata key for a specific host."""
    aggrlist = host_state.aggregates
    return {aggr.metadata[key_name]
              for aggr in aggrlist
              if key_name in aggr.metadata
              }
              
def validate_num_values(vals, default=None, cast_to=int, based_on=min):
    """Returns a correctly casted value based on a set of values.

    This method is useful to work with per-aggregate filters, It takes
    a set of values then return the ‘based_on‘{min/max} converted to
    ‘cast_to‘ of the set or the default value.

    Note: The cast implies a possible ValueError
    """
    num_values = len(vals)              # 如果没设置Aggregation主机聚合的cpu_allocation_ratio metadata key
    if num_values == 0:
        return default                  # 还是调用host_state.cpu_allocation_ratio

    if num_values > 1:
        LOG.info(_LI("%(num_values)d values found, "
                     "of which the minimum value will be used."),
                 {‘num_values‘: num_values})

    return based_on([cast_to(val) for val in vals])   # 如果Aggregation主机聚合设置了多个cpu_allocation_ratio metadata key,默认取最小的

这里还有个疑问,host_state中的cpu_allocation_ratio是如何更新的呢?

看个compute node支持独立设置cpu_allocation_ratio的bp

Add cpu_allocation_ratio and ram_allocation_ratio to ComputeNode: https://review.openstack.org/#/c/215471/9

Update ComputeNode values with allocation ratios in the RT:https://review.openstack.org/#/c/216362/  (compute端的,通过resource_tracker定时任务实现)

resource_tracker.py又是什么?

它的作用就是Keep the ComputeNode model updated with usage,也是compute节点的一个定时任务。bp实现:https://review.openstack.org/#/c/9402/

Add cpu_allocation_ratio and ram_allocation_ratio to ComputeNode bp实现中的 nova/objects/compute_node.py(重点部分)

 @staticmethod
    def _from_db_object(context, compute, db_compute):
        special_cases = set([
            ‘stats‘,
            ‘supported_hv_specs‘,
            ‘host‘,
            ‘pci_device_pools‘,
            ])
        fields = set(compute.fields) - special_cases
        for key in fields:
            value = db_compute[key]
            # NOTE(sbauza): Since all compute nodes don‘t possibly run the
            # latest RT code updating allocation ratios, we need to provide
            # a backwards compatible way of hydrating them.
            # As we want to care about our operators and since we don‘t want to
            # ask them to change their configuration files before upgrading, we
            # prefer to hardcode the default values for the ratios here until
            # the next release (Mitaka) where the opt default values will be
            # restored for both cpu (16.0) and ram (1.5) allocation ratios.
            # TODO(sbauza): Remove that in the next major version bump where
            # we break compatibilility with old Kilo computes
            if key == ‘cpu_allocation_ratio‘ or key == ‘ram_allocation_ratio‘:
                if value == 0.0:
                    # Operator has not yet provided a new value for that ratio
                    # on the compute node
                    value = None
                if value is None:
                    # ResourceTracker is not updating the value (old node)
                    # or the compute node is updated but the default value has
                    # not been changed
                    value = getattr(CONF, key)              # 如果是0.0,cpu_allocation_ratio将会controller节点的cpu_allocation_ratio为准
                    if value == 0.0 and key == ‘cpu_allocation_ratio‘:
                        # It‘s not specified either on the controller
                        value = 16.0
                    if value == 0.0 and key == ‘ram_allocation_ratio‘:
                        # It‘s not specified either on the controller
                        value = 1.5
            compute[key] = value

nova-compute Periodic tasks 机制  http://blog.csdn.net/gj19890923/article/details/50583435

Nova object 模型介绍 http://blog.csdn.net/tan198707/article/details/16994363

时间: 2024-10-18 08:48:36

nova如何让cpu超配比生效的相关文章

openstack如何设置cpu和内存的超配比例

默认OpenStack的CPU超配比例是1:16,内存超配比例是1:1.5.下面配置的就是这个比例,你可以自己算一下,cat /proc/cpuinfo里面的逻辑核数,再x16就是你能够分配给虚拟机的.内存也是类似. 配置文件nova.conf中修改了如下参数 #cpu_allocation_ratio=16.0   #ram_allocation_ratio=1.5 当然了,这个值其实是给nova-scheduler看的,人家来决定,你有没有资源创建虚拟机,以及创建在哪个节点上. 原文地址:h

Nova 是如何统计 OpenStack 计算资源

引言 运维的同事常常遇到这么四个问题: Nova 是如何统计 OpenStack 计算资源的? 为什么 free_ram_mb, free_disk_gb 会是负数? 即使 free_ram_mb, free_disk_gb 为负数,为什么虚拟机依旧能创建成功? 因资源不足采用随机调度的方式会导致创建虚拟机失败,而指定 host 却能创建成功? 本文将从以上四个问题入手,结合 Kilo 版本 Nova 源码,在默认 Hypervisor 为 Qemu-kvm 的前提下(不同 Hypervisor

Nova 如何统计 OpenStack 资源

1.云计算的本质在于将硬件资源软件化,以达到快速按需交付的效果,最基本的计算.存储和网络基础元素并没有因此改变.就计算而言,CPU.RAM 和 DISK等依旧是必不可少的核心资源. 从源代码和数据库相关表可以得出,Nova 统计计算节点的四类计算资源: CPU: 包括 vcpus(节点物理 cpu 总线程数), vcpus_used(该节点虚拟机的 vcpu 总和) RAM: 包括 memory_mb(该节点总 ram),memory_mb_used(该节点虚拟机的 ram 总和),free_r

CPU参数详解

PcpCPU参数详解 1.主频 主频也叫时钟频率,单位是MHz,用来表示CPU的运算速度.CPU的主频=外频×倍频系数.很多人认为主频就决定着CPU的运行速度,这不仅是个片面的,而且对于服务器来讲,这个认识也出现了偏差.至今,没有一条确定的公式能够实现主频和实际的运算速度两者之间的数值关系,即使是两大处理器厂家 Intel和AMD,在这点上也存在着很大的争议,我们从Intel的产品的发展趋势,可以看出Intel很注重加强自身主频的发展.像其他的处理器厂家,有人曾经拿过一快1G的全美达来做比较,它

top 查看cpu 负载

top 是linux 运维人员常用的一个命令,主要查看当前系统的一些负载情况,但一般情况,多用于查看cpu负载,所以针对cpu 负载简单坐下说明.如下图 输入top命令后,按1,会显示详细的cpu线程,查看cpu负载的参数,主题要看load average 这个参数,这三个数字取得的1分钟,5分钟,15分钟的的数值,这个数值怎么来反应当前系统的cpu负载呢,以我这台为例,我有8个逻辑cpu,我当前服务器的理想值应该是 8*0.7=5.6, 也就是说load average 这个值低于5.6左右,

【计算机原理】CPU部分.md

本文由CPU阿甘改编而得,主要讲的是系统启动和程序执行时CPU做的工作. CPU的构成 中央处理器(CPU,Central Processing Unit)由运算器.控制器.Cache等. 控制器:主要是对指令进行译码. 运算器:主要是执行定点或者浮点运算等. 寄存器:主要功能是保存计算的中间结果 可以看出CPU的主要功能是接收指令,执行指令.不过CPU不能保存指令. 最大的优点在于速度快,以ns为单位,内存比它慢了100倍,硬盘比它慢了1000多万倍. 下面我们主要介绍一下计算机从加电到加载操

CPU Memory 入门

这篇文章是了解硬件系统概念,提供个人PC服务器选择参考. CPU概述: CPU代表主机的运算能力,计算机的性能在很大程度上由CPU的性能决定,而CPU的性能主要体现在其运行程序的速度上. CPU性能参数: 主频: 主频也叫时钟频率,单位是兆赫(MHz)或千兆赫(GHz),用来表示CPU的运算.处理数据的速度.通常,主频越高,CPU处理数据的速度就越快. CPU的主频=外频×倍频系数.所说的超频,都是超CPU的外频(当然一般情况下,CPU的倍频都是被锁住的).但对于服务器CPU来讲,超频是绝对不允

Linux环境下Java应用性能分析定位-CPU使用篇

1     CPU热点分析定位背景 CPU资源还是很昂贵的,为了深刻感受到这种昂贵,间下图当前CPU的资源售价: 所以对于程序猿们来说,需要让程序合理高效的使用CPU资源.利用有限的CPU资源来解决完成我们面对的实际问题,这就是为什么我们要尽可能优化程序. 不篇从微观层面展开介绍说明,不做宏观层面的介绍(譬如数据中心级容量监控,管理调度(OpenStack,Kubernates等)以及迁移(手动,自动,冷迁,热迁)). 本篇将以倒推式方法组织目录结构.出现了问题怎么办,以及为什么要这样做,以及后

MySQL5.7运行CPU达百分之400处理方案

原文:MySQL5.7运行CPU达百分之400处理方案 用户在使用 MySQL 实例时,会遇到 CPU 使用率过高甚至达到 100% 的情况.本文将介绍造成该状况的常见原因以及解决方法,并通过 CPU 使用率为 100% 的典型场景,来分析引起该状况的原因及其相应的解决方案. 常见原因 系统执行应用提交查询(包括数据修改操作)时需要大量的逻辑读(逻辑 IO,执行查询所需访问的表的数据行数),所以系统需要消耗大量的 CPU 资源以维护从存储系统读取到内存中的数据一致性. 说明:大量行锁冲突.行锁等