2024年5月28日发(作者:)
为方便识别虚拟的资源和物理(或叫真实的)资源,本人文章中以小写字母v前缀标识虚拟
资源,小写字母p前缀标识物理资源。例如:
vCPU = 虚拟CPU
pCPU = 物理CPU
vRAM = 虚拟机的内存,也称之为Guest OS配置内存(Configured Size),或者说GOS的物理内
存
pRAM = 物理内存,也称机器内存(Machine Memory),或主机物理内存(Host Physical Memory)
=============================================
VM的内存资源分配,有3个可以配置的项:Limit,Reservation和Shares
【Memory Limit】
Memory Limit,顾名思义,内存上限,就是Host可以分配给此VM的pRAM数的上限。
默认情况下是选中unlimited复选框的,也就是不设上限。不设上限不意味着没有上限,隐含的
上限值是分配给VM的内存值。
Q: 什么情况下要设置Memory Limit呢?(或者说Memory Limt有什么好处?)
A: 一般情况下不用设置Memory Limt。
Limit通常用来管理用户预期。开始的时候,Host上的VM数量比较少,没有资源争用,因此VM
的性能完全可以保证;随后,当一台又一台VM创建出来,对于资源的争用渐渐变的频繁起来。
于是VM的性能下降了,用户便会产生抱怨。因此,设置limit可以从一开始就限定VM的性能,
也就是让用户一开始就觉得他的VM就应该是这样的性能,当VM数量增加的时候,也不会感觉到
性能的下降。当然,Memory Limit设置在什么数值比较合理应该具体情况具体分析。
那为啥不把VM的内存(Configured Size)设小呢?这也是考虑用户心理。有用户会觉得自己的应
用就是需要4GB内存,虽然我们经过分析得出的结论是只需要1GB内存就够了,但是为了考虑用
户的感受,就给他设置VM的内存为4GB,于是用户看见自己的OS显示有4GB内存,就很满意,
但是他不知道的是我们给他的VM设置了1GB 的Memory Limt,这样,既保证了Host的资源可以
更合理的利用,又让用户感到满意。
1
当用户的应用越来越频繁,其对内存的需求增加的时候,这时再来调整Memory limt,以满足其
对性能的要求。调整Memory Limt无需停机,而如果开始时虚拟机的内存设的小了,此时调整内
存数量就要停机了。设置Memory limt的好处就在于减少了不必要的downtime。
调整memory limit的动作,其实就是通知Hypervisor将某一VM可用的pRAM放大,而无需通知
GOS,所以无需GOS重启。(简单的说,就是改Hypervisor,而和GOS无关)
专用名词解释 Configured Size
Configured Size可以翻译成配置内存,就是用户在创建一个VM的时候设定的内存值,也是Guest OS认为自己拥
有的内存值。Configured Size在VM看来就是自己可用内存的总量,有的时候我们也称之为Guest Physical Memory。
如果
【Memory Reservation】
Memory Reservation就是给一台VM保留的内存。这些pRAM将被占用,只能用于此VM,而不会
被重新分配。VM默认的Memory Reservation是0,也就是不保留内存。如果给1台VM配置了
1GB内存,但是Memory Reservation是默认的0MB,也就是说没有给这台VM分配任何专属的pRAM,
那么这台VM的内存从哪里获得呢?答案是Swap(可以翻译为交换文件),也叫VMKernel swap,
这是一个存放在硬盘资源上的交换文件(扩展名为vswp),这个swap文件大小在默认情况下等同
于VM设定内存的大小。
所以,即使1台VM没有获得任何pRAM,它还是可以运行的,因为从VM Guest OS看来,自己还
是有RAM的,这个RAM就是硬盘上的swap文件。
但是,我们知道,硬盘的访问是一种机械运动(注:非SSD硬盘情况下),速度要远远比物理内存
慢。慢到什么程度呢?RAM速度大概是纳秒级的,而硬盘的速度是毫秒级的,2者相差近100万
倍。所以使用swap越多,速度就越慢。对Windows Paging技术熟悉的同学们一定知道,缺少内
存的电脑速度非常之慢,主要就是因为经常访问存放在硬盘上的pagefile,这种问题的解决方
案就一定是添加物理内存。对于VM也是如此,如果大量使用swap,VM一定会显得非常之慢。
那么当ESX/ESXi还有可用内存的情况下,VM是不是还一定要用swap当内存呢?
答案是不用。Memory Reservation为0的VM没有专属的pRAM,但并不意味着这台VM没有
物理内存可以用,只是没有独占某些物理内存而已,在共享物理内存池中的内存还是可以使用的。
VMware ESX/ESXi在物理内存资源充足的情况下,总是会给VM分配足额的pRAM,因此VM无需使
用Swap,这保证了VM的运行速度。比如1台可用物理内存是3GB(忽略COS和Hypervisor所占
用的内存开销)的ESX/ESXi主机上,运行了2台VM,每台VM各配置了1GB的内存,此时,共享
内存池中有3GB的内存,而实际需求只有2GB,因此2台VM都能获得1GB的pRAM。
当你给这2台VM各自的Memory Reservation都设置成512MB的时候,这2台VM将各自获得512MB
的专属内存,也就是说,无论这2台VM是否实际用到了这512MB内存,这些内存都将保留给它
们。此时,共享内存池中可用的内存就只有2GB了。当获得了512MB专属内存之后,VM就不需
要1GB那么大的swap了,而只需要512MB的swap就足够保证Guest OS不会没有内存可用。所
以此时的swap大小就只有512MB。如果继续增大Memory Reservation到1GB,此时swap就为0。
2
发布评论