openstack-KVM-Memory
一、Memory
1、查看memory信息
free -g
cat /proc/meminfo
dmesg | grep Memory
2、xml文件中的内存信息:
vim /etc/libvirt/qemu/虚拟机名.xml
<memory unit='KiB'></memory> <currentMemory unit='KiB'></currentMemory>
二、 EPT和VPID
1、EPT(扩展页表)
EPT (Extended Page Tables)属于Intel的二代硬件虚拟化技术,针对内存管理单元(MMU)的虚拟化扩展。EPT降低了内存虚拟化的难度(影子页表)也提升了内存虚拟化的性能。从基于Intel的Nehalem架构的平台开始,EPT作为CPU的一个特性加入到CPU硬件中去了。
NPT (Nested PageTables)AMD称为NPT。
2、EPT(扩展页表)工作原理:
GVA (Guest Virtual Address) 客户机虚拟地址 guest
GPA (Guest Physical Address) 客户机物理地址
HPA (Host Physical Address) 宿主机物理地址 Hypervisor
1个EPT页表=N个影子页表
注:影子页表即每个虚拟机各自都有的一个页表。

地址转换过程:
为了实现内存虚拟化,让客户机使用一个隔离的、从零开始且具有连续的内存空间,KVM 引入一层新的地址空间,即客户机物理地址空间 (Guest Physical Address,GPA),这个地址空间并不是真正的物理地址空间,它只是宿主机虚拟地址空间在客户机地址空间的一个映射。
对客户机来说,客户机物理地址空间都是从零开始的连续地址空间,但对于宿主机来说,客户机的物理地址空间并不一定是连续的,客户机物理地址空间有可能映射在若干个不连续的宿主机地址区间。虚拟机本质上是Host机上的一个进程,按理说应该可以使用Host机的虚拟地址空间,但由于在虚拟化模式下,虚拟机处于非Root模式,无法直接访问Root模式下的Host机上的内存。
这个时候就需要VMM 的介入,VMM 需要 intercept(截获)虚拟机的内存访问指令,然后 virtualize(模拟)Host上的内存,相当于VMM在虚拟机的虚拟地址空间和Host机的虚拟地址空间中间增加了一层,即虚拟机的物理地址空间,也可以看作是 Qemu的虚拟地址空间。

所以,内存虚拟化的目标就是要将虚拟机的虚拟地址(Guest Virtual Address,GVA)转化为Host的物理地址(Host Physical Address,HPA),中间要经过虚拟机的物理地址(Guest Physical Address,GPA)和Host虚拟地址(Host Virtual Address)的转化,即:GVA→ GPA →HVA→HPA
其中前两步由虚拟机的系统页表完成,中间两步由 VMM 定义的映射表(由数据结构 kvm_memory_slot 记录)完成,它可以将连续的虚拟机物理地址映射成非连续的 Host 机虚拟地址,后面两步则由 Host 机的系统页表完成。
3、VPID (虚拟处理器标识)
VPID (VirtualProcessor Identifiers)虚拟处理器标识,提升实时迁移的效率,同时节省实时迁移的开销,提高速度,降低延迟。
TLB (translation lookaside buffer)旁路转换缓冲,或称为页表缓冲;里面存放的是一些页表文件(虚拟地址到物理地址的转换表)。
#查看ept和vpid信息:
grep ept /proc/cpuinfo
grep vpid /proc/cpuinfo
#查看ept和vpid信息:
cat /sys/module/kvm_intel/parameters/ept
cat /sys/module/kvm_intel/parameters/vpid
#关闭ept和vpid:
modprobe kvm_intel ept=,vpid=
三、 大页(Huge Page)
x86-64CPU
支持2MB大页
内核2.6以上支持大页
内存页数量减少,从而需要更少的页表,节约页表所占用的内存数量,减少地址转换,提高内存访问性能。
地址转换信息一般保存在CPU缓存中,地址转换信息减少,从而减少CPU缓存压力。
注:一般内存页大小4KB。
#查看Huge Page信息
getconf PAGESIZE
cat /proc/meminfo | grep Huge
#Huge Page挂载
mount | grep huge
mount -t hugetlbfs hugetlbfs /dev/hugepages
sysctl vm.nr_hugepages=
#开启Huge Page
hugpages=yes
注:开启大页后:
不能swap out
不能ballooning方式增长
四、 Memory超配
(1)内存交换(swapping)
用交换空间(swap space)来弥补内存的不足。
(2)气球(ballooning)
通过virio_balloon驱动来实现宿主机Hypervisor和客户机之间的协作。
(3)页共享(page sharing)
通过KSM(Kernel Samepage Merging)合并多个客户机进程使用的相同内存页。
openstack-KVM-Memory的更多相关文章
- 完整部署CentOS7.2+OpenStack+kvm 云平台环境(2)--云硬盘等后续配置
继上一篇博客介绍了完整部署CentOS7.2+OpenStack+kvm 云平台环境(1)--基础环境搭建,本篇继续讲述后续部分的内容 1 虚拟机相关1.1 虚拟机位置介绍 openstack上创建的 ...
- OpenStack+kvm虚拟机xml格式解析
配置说明 首先介绍一下配置结构: xml配置遵循<keyword> xxxxxx </keyword>的格式,即一个配置段以<keyword>开头,以</ke ...
- 完整部署CentOS7.2+OpenStack+kvm 云平台环境(3)--为虚拟机指定固定ip
之前在测试环境(centos7.2)上部署了openstack云平台(完整部署CentOS7.2+OpenStack+kvm 云平台环境(1)--基础环境搭建),openstack在neutron组网 ...
- Migration workstation vms to openstack kvm
Migration workstation vms to openstack kvm 分别分成(磁盘是否拆分,vms 是否 有多个磁盘驱动器) 1, linux迁移 vmware workstatio ...
- OpenStack, kvm, qemu-kvm以及libvirt之关系
OpenStack, kvm, qemu-kvm以及libvirt之关系: KVM是最底层的hypervisor,它是用来模拟CPU的运行,它缺少了对network和周边I/O的支持,所以我们是没法直 ...
- openstack kvm cannot set up guest memory 'pc.ram': Cannot allocate memory
Kvm:启动报错:error: internal error: process exited while connecting to monitor: 2018-11-12T01:47:14.9933 ...
- openStack kvm 虚拟机CPU颗粒化控制
前一篇理解cpu topology对CPU Topology进行了学习总结,这里想总结下OpenStack下vCPU与pCPU常用的的绑定方式. 在尝试这些绑定之前,尤其是处理NUMA架构时还是建议看 ...
- 完整部署CentOS7.2+OpenStack+kvm 云平台环境(1)--基础环境搭建
公司在IDC机房有两台很高配置的服务器,计划在上面部署openstack云平台虚拟化环境,用于承载后期开发测试和其他的一些对内业务.以下对openstack的部署过程及其使用做一详细介绍,仅仅依据本人 ...
- 完整部署CentOS7.2+OpenStack+kvm 云平台环境(4)--用OZ工具制作openstack镜像
在部署openstack云平台环境的时候,需要上传镜像到glance. 首先下载iso镜像,这里下载了centos6.5镜像,放到/usr/local/src目录下然后用OZ工具制作openstack ...
- 《4》CentOS7.0+OpenStack+kvm云平台部署—配置Nova
感谢朋友支持本博客,欢迎共同探讨交流,因为能力和时间有限,错误之处在所难免,欢迎指正! 假设转载.请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ...
随机推荐
- c/c++ 标准库 map multimap元素访问
标准库 map multimap元素访问 一,map,unordered_map下标操作 下标操作种类 功能描述 c[k] 返回关键字为k的元素:如果k不在c中,添加一个关键字为k的元素,并对其初始化 ...
- c/c++ 哈希表 hashtable
c/c++ 哈希表 hashtable 概念:用key去查找value 实现hash函数有很多方法,本文用除留余数法. 除留余数法的概念: 取一个固定的基数的余数,注意不能用偶数,用偶数的话,分布会不 ...
- 函数指针的返回值是指针数组,数组里放的是int;函数指针的返回值是指针数组,数组里放的是int指针
函数指针的返回值是指针数组,数组里放的是int 函数指针的返回值是指针数组,数组里放的是int指针 #include <stdio.h> #include <stdlib.h> ...
- redmine screenshot paste(粘贴截图)
前言 本文所使用的 redmine 3.1.x 查看redmine版本:以管理员帐号登录 – 点 管理 – 点 信息,示例如下: 在线插件库 插件仓库,可以下载丰富的插件: http://www.re ...
- 解决Eclipse点击运行后控制台不能自动弹出的问题
解决方案: 选择Window-->Preferences-->Run.Debug-->Console 勾选"Show when program writest to sta ...
- LeetCode算法题-Best Time to Buy and Sell Stock
这是悦乐书的第172次更新,第174篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第31题(顺位题号是121).假设有一个数组,其中第i个元素是第i天给定股票的价格.如果 ...
- 使用selenium时,使用从系统启动浏览器与通过自动化驱动方式启动浏览器控件ID不一样解决方法
最近遇到一个怪事,通过正常打开浏览器,按照正常的web登录然后点击进入系统流程,将各控件的ID识别成功,然后使用 python3+selenium写好脚本,高高兴兴的用脚本跑时老是提示找不到控件,然后 ...
- 【转】vue父子组件之间的通信
vue父子组件之间的通信 在vue组件通信中其中最常见通信方式就是父子组件之中的通性,而父子组件的设定方式在不同情况下又各有不同.最常见的就是父组件为控制组件子组件为视图组件.父组件传递数据给子组件使 ...
- ES5-ES6-ES7_对象的扩展
简化的对象写法 省略同名的属性值,省略方法的function let x = 1; let y = 2; let point = { x, y, setX (x) { this.x = x } }; ...
- 远程连接排错-屌丝去洗浴中心之路(windows)
1.查看道路是否通畅 ip地址是什么:就是我们要找的服务器在哪里 公网IP地址:全世界的任何地方都能访问到 私网IP地址:也指内网,私有环境,只在当前环境中.比如:192.168.0.??? 或者 1 ...