空闲内存税的算法(VMware内存机制探讨之补充)


我曾经在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的论文中提到一个很重要的参数:份额内存比 ρ
image
其中

ρ
是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)就是空闲内存数,于是上面的公式可以表述为:
image

当主机内存不足的时候,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内存。

当然。实际应用当中的内存分配并不是如同计算这样死板的,而是一个连续的不断调整的过程。
 
参考文档:
(1) Carl, A. Waldspurger, 2002, Memory Resource Management in VMware ESX Server
http://waldspurger.org/carl/papers/esx-mem-osdi02.pdf
(2) VMware Inc. Understanding Memory Resource Management in VMware? ESX? Server
http://www.vmware.com/files/pdf/perf-vsphere-memory_management.pdf

你可能感兴趣的:(vmware,算法,内存,机制,探讨)