openstack主机内存ram超额分配

openstack提供资源利用率的方式一种主要途径是创建虚拟机时对内存进行超额分配。在对物理主机的选择策略如下代码所示:

    def host_passes(self, host_state, filter_properties):
        """Only return hosts with sufficient available RAM."""
        instance_type = filter_properties.get(‘instance_type‘)
        requested_ram = instance_type[‘memory_mb‘]
        free_ram_mb = host_state.free_ram_mb
        total_usable_ram_mb = host_state.total_usable_ram_mb

        ram_allocation_ratio = self._get_ram_allocation_ratio(host_state,
                                                          filter_properties)

        memory_mb_limit = total_usable_ram_mb * ram_allocation_ratio
        used_ram_mb = total_usable_ram_mb - free_ram_mb
        usable_ram = memory_mb_limit - used_ram_mb
        if not usable_ram >= requested_ram:
            LOG.debug("%(host_state)s does not have %(requested_ram)s MB "
                    "usable ram, it only has %(usable_ram)s MB usable ram.",
                    {‘host_state‘: host_state,
                     ‘requested_ram‘: requested_ram,
                     ‘usable_ram‘: usable_ram})
            return False

        # save oversubscription limit for compute node to test against:
        host_state.limits[‘memory_mb‘] = memory_mb_limit
        return True

total_usable_ram_mb为物理主机所能提供的物理内存,如4G,8G,ram_allocation_ration为内存超额分配系数,在nova.conf中设置。openstack默认超额分配系数为1.5。free_ram_mb为主机剩余内存值,该值可为负数。used_ram_mb为以分配内存,一般为该主机上已创建虚拟机内存总和。memory_mb_limit为超额后的内存,当剩余可以可用的useble_ram内存小于虚拟机的创建时所需内存时,表示该主机无法创建虚拟机,系统将不会选择该主机创建虚拟机。

时间: 2024-08-27 13:38:11

openstack主机内存ram超额分配的相关文章

RHCA442学习笔记-Unit10内存地址及分配

Unit 10 Memory Addressing and Allocation 内存地址及分配 学习目标: A. 虚拟地址与物理地 B. 调整内存地址分配 C. 解析内存溢出 10.1 Overview of memory addressing 内存地址概述 A. 虚拟地址空间 a. 每个进程都有自己线性连续的地址空间 b. 地址空间范围从0到最大地址空间值: X86: 2^32=4G X86_64: 2^64=1TiB (redhat 最大支持256GiB) B. 物理地址空间 a. 虚拟地

CUDA实例练习(九):页锁定主机内存

malloc()分配的内存与cudaHostAlloc()分配的内存之间存在着一个重要差异.C库函数malloc()将分配标准的,可分页的(Pagable)主机内存,而cudaHostAlloc()将分配页锁定的主机内存.页锁定内存也称为固定内存(Pinned Memory)或者不可分页内存,它有一个重要的属性:操作系统将不会对这块内存分页并交换到磁盘上,从而确保了该内存始终驻留在物理内存中.因此,操作系统能够安全地使某个应用程序访问该内存的物理地址,因为这块内存将不会被破坏或者重新定位. 1

[转]JVM系列一:JVM内存组成及分配

原文地址:http://www.cnblogs.com/redcreen/archive/2011/05/04/2036387.html JVM系列一:JVM内存组成及分配 java内存组成介绍:堆(Heap)和非堆(Non-heap)内存 按照官方的说法:"Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配.堆是在 Java 虚拟机启动时创建的.""在JVM中堆之外的内存称为非堆内存(Non-heap memory)".可以看出JV

Innodb额外内存池的分配策略以及性能

Innodb额外内存池的分配策略以及性能 作者:明天会更好 QQ:715169549 备注:未经同意,严禁转载,谢谢合作. //内存池结构体 /** Data structure for a memory pool. The space is allocated using the buddy algorithm, where free list i contains areas of size 2 to power i. */ struct mem_pool_t{ byte* buf; /*!

对象类型在内存中的分配

今天,我们来讲讲对象类型在内存中的分配! 对象类型和整型.字符串等类型一样,也是PHP中的一种数据类型,在程序中存储不同类型的数据,在程序运行时它的每一部分内容都要加载到内存中再被使用.那么对象类型的数据在内存中是如何分配的呢?咱们先来了解下内存结构,逻辑上内存大体被分为四段,分别为:栈.堆.数据段和代码段,程序中不同类型数据的声明将会被存放在不同的内存段里面,每段内存的特点是这样的: 1.栈 栈的特点就是空间小但被CPU访问的速度快,适合存放程序中临时创建的变量.由于栈的先进后出的特点,所以栈

PHP对象类型在内存中的分配

对象类型和整型.字符串等类型一样,也是PHP中的一种数据类型.都是在程序中用于存储不同类型数据使用的,在程序运行时它的每部分内容都要先加载到内存中再被使用.那么对象类型的数据在内存中是如何分配的呢?先来了解一下内存结构.逻辑上内存大体被分为四段,分别为栈空间段.堆空间段.初始化数据段和代码段,程序中不同类型数据的声明将会被存在不同的内存段里面.每段内存的特点如下.①.栈空间段栈的特点是空间小但被CPU访问的速度快,是用户存放程序中临时创建的变量.由于栈的后进先出特点,所以栈特别方便用来保存和恢复

程序在内存中的分配方式

1 桟区(stack):由编译器自动分配和释放,存放函数的参数值,局部变量的值,其操作方式类似于数据结构中的栈. 若申请的内存小于系统所剩内存则成功,否则就会发生栈溢出错误. 栈的增长方向是向下的,通常栈的初始化指针指向内存的最高地址,它是连续的.系统自动分配,因此速度很快. 在函数调用时,第一个进栈的是主函数的下一条指令的地址,然后是各个函数的参数,参数从右向左进栈,然后是函数中的局部变量.静态变量是不入栈的. 2 堆区(heap):一般有程序员分配和释放,若不释放,最后由操作系统回收. 它与

实验三:内存动态分区分配

内存动态分区分配和回收的模拟实现 实验目的 加深对内存管理的理解,进而对连续分配和离散分配有更深刻的认识. 通过内存管理,进一步理解进程等操作系统概念. 实验内容 模拟实现内存动态分区分配和回收 建立一个长度为1024的一维数组,用以模拟内存. 建立空闲分区表或空闲分区链,用来记录内存的使用情况. 为请求进入内存的作业分配内存,回收运行完成的作业所占内存. 键盘输入:表示一个请求进入内存的作业的三元组: (作业号(0–9),作业大小(1-1024),作业运行时间) 程序接受键盘输入,进行内存分配

浅析Java的jvm上的内存位置的分配

浅析Java的jvm上的内存位置的分配 1.Java的内存区域简介 1>程序计数器: 一小块的内存空间,每个线程都有一个独立的计数器,线程私有;作用:作为当前线程代码行行号指示器,这个值可以选取下一条需要执行的字节码指令,例如分支,循环等,每创建一根线程会相应的产生一个程序计数器 2>栈 线程私有,用于存放局部变量,保存基本数据类型的值,操作数栈(保存着计算过程的中间结果),动态链接,方法入口和出口等信息:局部变量表中保存着函数的参数和局部变量,当调用结束以后,栈帧销毁,局部变量表也随之销毁