我曾经在vmsky的论坛发表过一篇探讨VMware内存机制的帖子(见此http://bbs.vmsky.com/thread-23285-1-2.html),最后探讨的例子是一个考虑了空闲内存税(Idle Memory Tax,以下简称IMT)情况下的内存分配计算,但遗憾的是当时猜想的算法是错误的。今天在阅读了Carl的关于内存机制的论文后,深感有必要重新说明一下。
空闲内存税(Idle Memory Tax)是VMware为了更有效地利用主机内存而设置的,它在计算如何分配主机内存的时候,将VM中空闲内存(Idle Memory)和活动内存(Active Memory)区别对待,对空闲内存做惩罚性的计算,使得具有较多空闲内存的VM将获得较少的内存份额。
在<vSphere Resource Management Guide> p98页上如此解释:
Mem.IdleTax, Specifies the idle memory tax rate, as a percentage. This tax effectively charges virtual machines more for idle memory than for memory they are actively using. A tax rate of 0 percent defines an allocation policy that ignores working sets and allocates memory strictly based on shares. A high tax rate results in an allocation policy that allows idle memory to be reallocated away from virtual machines that are unproductively hoarding it.
default: 75
这段解释说明了IMT是一个百分比的数字,介于0-100之间,IMT为0的时候,忽略working set,完全按照shares来分配内存。
那么,这个默认的75%的惩罚税到底有什么影响呢?
Carl的论文中提到一个很重要的参数:份额内存比ρ
其中
ρ是shares-per-page ratio,就是单位内存的份额比重
f是活动内存占总内存的比重
k是惩罚因子,k=1/(1-IMT),比如IMT是75%,则k=4
P是内存总Page数,S是份额
这个公式不太好理解,让我们换一种写法,就容易理解了。
P是VM配置的总内存,f是活动内存的比重,因此P·f就是活动内存数,P·(1-f)就是空闲内存数,于是上面的公式可以表述为:
当主机内存不足的时候,ESX主机会找ρ最小的那台VM来要回内存(reclaim)。
举个例子来说明。
Host有4GB内存,VM1和VM2各自配置了4GB内存,配置份额都是40960。VM2运行1个耗内存的程序,没有空闲内存,VM2的ρ=10。VM1有50%的空闲内存,也就是2GB空闲,2GB活动,IMT是默认的75%,K=4,ρ=40960/(2048+4*2048)=4
因为VM1和VM2的配置内存相同,所以VM1和VM2能争到的内存比是4:10,也就是VM1可以获得1.14GB主机物理内存,而VM2可以获得2.86GB内存。
当然。实际应用当中的内存分配并不是如同计算这样死板的,而是一个连续的不断调整的过程。
本文出自 “delxu的Live记事本” 博客,请务必保留此出处http://delxu.blog.51cto.com/975660/288012