[virt-tools-list] How does the memory usage calculated?
Richard W.M. Jones
rjones at redhat.com
Wed Nov 18 14:44:26 UTC 2015
On Wed, Nov 18, 2015 at 01:04:32PM +0000, 张强 wrote:
> Hi all,
> I’m studying the source code, and I saw this in domain.py around line 164:
> …
> curmem = stats['rss']
> totalmem = stats['actual']
> except libvirt.libvirtError, err:
> logging.error("Error reading mem stats: %s", err)
>
> pcentCurrMem = curmem * 100.0 / totalmem
> pcentCurrMem = max(0.0, min(pcentCurrMem, 100.0))
> …
>
> But using this algorithm, I’m always getting results that are greater than 100:
> >>> dom.memoryStats()
> {'actual': 16777216L, 'rss': 17062900L}
>
> 17062900 * 100 / 16777216 = 101.7028…
>
> Is this normal?
The VIR_DOMAIN_MEMORY_STAT_RSS statistic returned for qemu/KVM guests
is the resident set size (RSS) of the qemu process. Of course that
includes all the overhead of qemu, such as host-side structures used
when emulating devices. Plus the guest RAM, which is just a regular
malloc-style allocation inside qemu and so also contributes to the RSS.
The 'actual' field seems to come from the libvirt
VIR_DOMAIN_MEMORY_STAT_ACTUAL_BALLOON statistic which is found by
sending the query-balloon monitor command to the guest. The returned
value is the guest's get_current_ram_size() (or less if the balloon is
"inflated", but for the majority of guests the balloon is never used).
Given all that, it seems reasonable that rss > actual, and so you'd
get a number > 100%. Sometimes. It also seems to me that if the
guest RAM had been allocated but not accessed, you might see rss < actual.
rss / actual seems like a fairly meaningless number from a
virt-manager point of view.
Rich.
References:
libvirt.git/src/qemu/qemu_driver.c qemuGetProcessInfo &
qemuDomainMemoryStats.
libvirt.git/src/qemu/qemu_monitor_json.c qemuMonitorJSONGetBalloonInfo.
qemu.git/hw/virtio/virtio-balloon.c virtio_balloon_stat
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-p2v converts physical machines to virtual machines. Boot with a
live CD or over the network (PXE) and turn machines into KVM guests.
http://libguestfs.org/virt-v2v
More information about the virt-tools-list
mailing list