This post is the result of an internal discussion. We were discussing when memory performance degrades what to monitor to understand it is under pressure.
Lot of time we assume that some popular metric would be better to monitor memory performance. However, many a times, it leads to something else. That means those are not an indicative to a memory performance issue. If it gets combined with something else then it “may” indicate performance degradation, but not always.
In this aspect we should not use these two metrics, just to understand whether memory is under pressure or not.
Let me show you what they essentially indicate.
Mem.consumed is the amount of memory consumed by one or all virtual machines calculated as memory granted less memory saved by sharing. Now the question is why we should not use this. The reason is memory allocation will vary dynamically based on the VM’s entitlement. The most important is that a VM’s entitlement should be greater than its demand.
Similarly Mem.vmmemctl is the amount of ballooned memory. This does not indicate a performance problem as well. The guest operating system determines whether it needs to page out guest physical memory to satisfy the balloon driver’s allocation requests. It is not a problem when it deflates the balloon and release the unused or untouched memory pages. However when it gets combined with Host Swapping then it is a strong indicator that VMs/Hosts are under pressure. Before than that vmmemctl will start paging out the active guest memory pages as well, which in turn is an indicator to the performance degradation.
While Mem.consumed does not have a relation to the consolidation ratio, Mem.vmmemctl has a footprint on it. We rely on Ballooning for memory over commitment and it is not that bad.