kvm中内存过载使用
与CPU过载使用类似,在KVM中内存也是允许过载使用(over commit)的,KVM能够让分配给客户机的内存总数大于实际可用的物理内存总数。
由于客户机操作系统及其上的应用程序并非一直100%地利用其分配到的内存,
并且宿主机上的多个客户机一般也不会同时达到100%的内存使用率,所以内存过载分配是可行的。
一般来说,有如下三种方式来实现内存的过载使用:
1) 内存交换(swapping): 用交换空间(swap space )来弥补内存的不足。
2) 气球(ballooning ): 通过virio_balloon驱动来实现宿主机Hypervisor和客户机之间的协作
3) 页共享(page sharing ): 通过KSM(Kernel Samepage Merging)合并多个客户机的进程使用的相同内存页。
其中,第一种内存交换的方式是最成熟的(Linux中很早就开始应用),也是目前广泛使用的,不过,相比KSM和ballooning的方式效率较低一些。
KVM中客户机是一个QEMU进程,宿主机系统没有特殊对待它而分配特定的内存给QEMU,只是把它当做一个普通Linux进程。Linux内核在进程请求更多内存时才会给它们分配更多的内存,所以也是但客户机操作系统请求更多内存时,KVM才向其分配更多的内存。
用swapping方式来让内存过载使用,要求有足够的交换空间(swap space)来满足所有的客户机进程和宿主机中其他进程所需内存。可用的物理内存空间和交换空间的大小之和应该等于或大于配置给所有客户机的内存总和,否则,在各个客户机内存使用同时达到较高比率时可能会有客户机(因内存不足)被强制关闭。
下面通过一个实际的例子来说明如何计算应该分配的交换空间大小以满足内存的过载使用。某个服务器有32GB的物理内存,想在其上运行64个内存配置为1GB的客户机。在宿主机中,大约需要4GB大小的内存来满足系统进程、驱动、磁盘缓存及其他应用程序所需内存(不包括客户机进程所需内存)。
计算过程如下:
客户机所需交换分区(swap)为:64*1GB + 4GB - 32GB = 36GB。
根据Redhat 的建议, 对于32GB物理内存的RHEL系统,推荐使用8GB的交换分区。
所以,在宿主机中总共需要建立44GB(36GB+8GB)的交换分区来满足安全实现客户机内存的过载使用。
下面是在一台Ivy Bridge桌面级的硬件平台上进行的简单实验,可以看出客户机并非一开始就在宿主机中占用其启动时配置的内存。
在宿主机中,在启动客户机之前和之后查看到的系统内存情况如下:
在客户机中,查看内存使用情况如下:
从理论上来说,供客户机过载使用的内存可以达到实际物理内存的几倍甚至几十倍,不过除非特殊情况,一般不建议过多地过载使用内存:
一方面,交换空间通常是由磁盘分区来实现的,其读写速度比物理内存读写速度慢得多,性能并不好;
另一方面,过多的内存过载使用也可能导致系统稳定性降低。所以,KVM允许内存过载使用,但在生产环境中配置内存的过载使用之前,仍然应该根据实际应用进行充分的测试
kvm中内存过载使用的更多相关文章
- CentOS7中KVM虚拟机内存、CPU调整
CentOS7中KVM虚拟机内存.CPU调整 1. 调小虚拟机内存 调小虚拟机内存可以动态实现,不用关机 1.1 查看当前内存大小 [root@kvm01 ~]# virsh dominfo vm1- ...
- CentOS7.6中 KVM虚拟机内存、CPU调整
CentOS7.6中 KVM虚拟机内存.CPU调整 一.调小虚拟机内存 调小虚拟机内存可以动态实现,不用关机 1.查看当前内存大小 [root@heyong kvm]# virsh dominfo t ...
- 烂泥:KVM中安装Windows Server 2008 R2系统
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 在前一篇文章中,我介绍了有关在KVM中的安装Centos系统.接下来,就来介绍如何在KVM中安装Windows系统. 注意:在此我安装的是windows ...
- Qemu创建KVM虚拟机内存初始化流程
转载请注明:[转载自博客xelatex KVM],并附本文链接.谢谢. [注]文章中采用的版本: Linux-3.11,https://www.kernel.org/pub/linux/kernel/ ...
- KVm中EPT逆向映射机制分析
2017-05-30 前几天简要分析了linux remap机制,虽然还有些许瑕疵,但总算大致分析的比较清楚.今天分析下EPT下的逆向映射机制.EPT具体的工作流程可参考前面博文,本文对于EPT以及其 ...
- 查找Linux中内存和CPU使用率最高的进程
下面的命令会查看到按照RAM和CPU降序方式的前最高几名进程的列表: [root@iZ25pvjcsyhZ ~]# ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem ...
- java中内存分配策略及堆和栈的比较
Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间 ...
- DLL函数中内存分配及释放的问题
DLL函数中内存分配及释放的问题 最近一直在写DLL,遇到了一些比较难缠的问题,不过目前基本都解决了.主要是一些内存分配引起问题,既有大家经常遇到的现象也有特殊的 情况,这里总结一下,做为资料. 错误 ...
- 深入理解Linux中内存管理
前一段时间看了<深入理解Linux内核>对其中的内存管理部分花了不少时间,但是还是有很多问题不是很清楚,最近又花了一些时间复习了一下,在这里记录下自己的理解和对Linux中内存管理的一些看 ...
随机推荐
- sublime text3 注册码
—– BEGIN LICENSE —– TwitterInc 200 User License EA7E-890007 1D77F72E 390CDD93 4DCBA022 FAF60790 61AA ...
- 第二类Stirling数初探 By cellur925
上午noi.ac崩崩崩了,栽在组合数学上,虽说最后在辰哥&Chemist的指导下A掉了此题,也发现自己组合数学太弱了qwq. 在luogu上找题,结果找到了一个第二类斯特林数的题(还是双倍经验 ...
- linux添加开机启动脚本
[root@mysql ~]# ll /etc/rc.local lrwxrwxrwx. 1 root root 13 Mar 12 22:20 /etc/rc.local -> rc.d/rc ...
- __slots__ 和 @property
动态非常灵活, 创建一个class后, 给实例绑定一个属性: >>> class Bird: ... pass ... >>> s = Bird() >> ...
- magento package
Magento Local module file is relative to app/code/local/ Magento Community module file is relative t ...
- 500 Keyboard Row 键盘行
给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词. 详见:https://leetcode.com/problems/keyboard-row/description/ C++: cl ...
- 129 Sum Root to Leaf Numbers 求根叶数字总和
给定一个只包含 0-9 数字的二叉树,每个根到叶的路径可以代表一个数字.例如,从根到叶路径 1->2->3则代表数字 123.查找所有根到叶数字的总和.例如, 1 / \ 2 ...
- Squid启动报:Could not determine this machines public hostname. Please configure one or set 'visible_hostname'.
在squid.conf中添加 visible_hostname squid.packet-pushers.net 或者编辑/etc/hosts文件, 在该文件中制定主机IP地址与主机名的对应.
- HBase表结构设计--练习篇
一.表结构操作 1.建立一个表scores,有两个列族grad和course [hadoop@weekend01 ~]$ hbase shell hbase(main):006:0> creat ...
- hadoop-0.20.2伪分布式安装简记
1.准备环境 虚拟机(redhat enterprise linux 6.5) jdk-8u92-linux-x64.tar.gz hadoop-0.20.2.tar.gz 2.关闭虚拟机的防火墙,s ...