[Engine-devel] Question about hasMemoryToRunVM() in RunVmCommandBase

Itamar Heim iheim at redhat.com
Thu Oct 18 12:50:43 UTC 2012


On 10/18/2012 02:43 PM, ly pan wrote:
> Hi:
>
> This is my test environment:
> hardware: Dell PowerEdge 2710 ,Memory 48G
> Software: OVirt engine 3.0 ,VDSM 4.9.4 ,kernel 2.6.32-279.2.1.el6.x86_64
>
>
> I create 100 vms from pool(each vm has 512M memory and has
> 1M memory garanteed, with guest_overhead = 65 and reserved_mem = 256),
> but only 83 vms
> turn out to run. When I run the 84th vm, engine says there is not
> enough memory. However at this time KSM is enabled and 15G free memory
> is still left on the host.
>
> I checked the code and found out that before running a vm, the
> function hasMemoryToRunVM() in RunVmCommandBase would decide whether
> there is enough memory in the selected host to run it.
> The Algorithm in the function is like this:
> mem_avaliable >= mem_required = curVds.getmem_commited() +
> curVds.getpending_vmem_size()
>       + curVds.getguest_overhead() + curVds.getreserved_mem() +
> vm.getMinAllocatedMem();
>
> And here is my question: curVds.getmem_commited() is caculated from
> the memory of vm

iirc, getmem_committed is the amount of memory actually used on the 
host, as vdsm reports.

> assigned by user. But when the host is running with KSM enabled, the
> actual memory of each
> running vm would be smaller than the memory the user assigned to. In
> this case, the following
> may occur: engine says there be no more memroy to run any vm while the
> host has much free
> space to run more vms(in my case, 15G).
>
>
> Therefore I think the actual memory size reported by vdsm(The KSM
> shared memory) should be taken into account when calculating
> curVds.getmem_commited(). Any ideas are welcome.
>





More information about the Engine-devel mailing list