虚拟化 频道

从内存上限说起 VMware内存分配初探

  【Memory Shares】

  Memory shares简单的说就是份额。当内存资源不足时,VM之间就会产生内存资源的争用。Share就是用来设定VM在争用时能够获得多少份额的内存。

  还是拿前面的例子举例。3GB pRAM的ESX/ESXi主机上配置了2台VM,没有配置Reservation,当它们都只有1GB内存的时候,这1GB都可以使用pRAM,现在让我们把这2台VM的内存增加到2GB。现在内存需求的总量是4GB了,VMware将如何分配内存?

  首先要明确的是,内存资源只有在争用的情况下才会用到share。上面2台VM虽然都分配了2GB vRAM,但是如果其应用还是都只用到1GB的话,此时没有争用发生,share也就没有发生作用。

  当这2台VM都请求2GB内存的时候,就发生了争用。假设他们的share都是1000,那么也就是说,我们把可用内存3GB分成2000份,每台VM可以分到1000份。因此此时每台VM可以获得3GB*1000/2000=1.5GB的内存。

  假设VM1用于开发,VM2用于生产,所以我们想把VM2的优先级别设高,便调整VM2的share为2000。此时VM1将获得3GB*1000/(1000+2000)=1GB内存。而VM2将获得3GB*2000/(1000+2000)=2GB的物理内存。

  当我们调整VM1的share为500,VM2的share为2000. 此时,根据计算,VM2争用获得的内存是3GB*2000/(500+2000)=2.4GB,而VM1将获得3GB*500/(500+2000)=0.6GB。对吗?且慢,还记得内存limit隐含的上限是VM的配置内存吗?VM2只配置了2GB内存,因此最多只用到2GB内存。所以VM2还是只用2GB内存,剩下的1GB内存VM1可以占用。

  关于VMware Memory分配机制的进一步探讨,敬请期待续篇。

 

0
相关文章