[libvirt] [PATCH v2 2/2] Added RSS reporting

Daniel Veillard veillard at redhat.com
Fri Feb 3 13:35:11 UTC 2012


On Tue, Jan 24, 2012 at 02:25:05PM +0100, Martin Kletzander wrote:
> Added RSS information gathering into qemuMemoryStats into qemu driver
> and the reporting into virsh dommemstat.
> ---
> v2:
>  - fixed sign for the ret variable (can be negative)
> 
>  include/libvirt/libvirt.h.in |    7 ++++++-
>  src/qemu/qemu_driver.c       |   23 ++++++++++++++++++-----
>  tools/virsh.c                |    2 ++
>  3 files changed, 26 insertions(+), 6 deletions(-)
> 
> diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
> index 958e5a6..d5ef061 100644
> --- a/include/libvirt/libvirt.h.in
> +++ b/include/libvirt/libvirt.h.in
> @@ -884,11 +884,16 @@ typedef enum {
> 
>      /* Current balloon value (in KB). */
>      VIR_DOMAIN_MEMORY_STAT_ACTUAL_BALLOON  = 6,
> +
> +    /* Resident Set Size of the process running the domain. This value
> +     * is in kB */
> +    VIR_DOMAIN_MEMORY_STAT_RSS             = 7,
> +
>      /*
>       * The number of statistics supported by this version of the interface.
>       * To add new statistics, add them to the enum and increase this value.
>       */
> -    VIR_DOMAIN_MEMORY_STAT_NR              = 7,
> +    VIR_DOMAIN_MEMORY_STAT_NR              = 8,
> 
>  #ifdef VIR_ENUM_SENTINELS
>      VIR_DOMAIN_MEMORY_STAT_LAST = VIR_DOMAIN_MEMORY_STAT_NR

 Change to the API is just fine

> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 6600afd..20d3d84 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -7978,7 +7978,7 @@ qemudDomainMemoryStats (virDomainPtr dom,
>  {
>      struct qemud_driver *driver = dom->conn->privateData;
>      virDomainObjPtr vm;
> -    unsigned int ret = -1;
> +    int ret = -1;

  I was a bit surprized by the original statement actually, that looks
better to me, and needed now. Hopefully I got that right

>      virCheckFlags(0, -1);
> 
> @@ -7997,14 +7997,27 @@ qemudDomainMemoryStats (virDomainPtr dom,
>      if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_QUERY) < 0)
>          goto cleanup;
> 
> -    if (virDomainObjIsActive(vm)) {
> +    if (!virDomainObjIsActive(vm)) {
> +        qemuReportError(VIR_ERR_OPERATION_INVALID,
> +                        "%s", _("domain is not running"));
> +    } else {
>          qemuDomainObjPrivatePtr priv = vm->privateData;
>          qemuDomainObjEnterMonitor(driver, vm);
>          ret = qemuMonitorGetMemoryStats(priv->mon, stats, nr_stats);
>          qemuDomainObjExitMonitor(driver, vm);
> -    } else {
> -        qemuReportError(VIR_ERR_OPERATION_INVALID,
> -                        "%s", _("domain is not running"));
> +
> +        if (ret >= 0 && ret < nr_stats) {
> +            long rss;
> +            if (qemudGetProcessInfo(NULL, NULL, &rss, vm->pid, 0) < 0) {
> +                qemuReportError(VIR_ERR_OPERATION_FAILED, "%s",
> +                            _("cannot get RSS for domain"));
> +            } else {
> +                stats[ret].tag = VIR_DOMAIN_MEMORY_STAT_RSS;
> +                stats[ret].val = rss;
> +                ret++;
> +            }
> +
> +        }
>      }
> 
>      if (qemuDomainObjEndJob(driver, vm) == 0)
> diff --git a/tools/virsh.c b/tools/virsh.c
> index d635b56..d5bbabf 100644
> --- a/tools/virsh.c
> +++ b/tools/virsh.c
> @@ -1871,6 +1871,8 @@ cmdDomMemStat(vshControl *ctl, const vshCmd *cmd)
>              vshPrint (ctl, "available %llu\n", stats[i].val);
>          if (stats[i].tag == VIR_DOMAIN_MEMORY_STAT_ACTUAL_BALLOON)
>              vshPrint (ctl, "actual %llu\n", stats[i].val);
> +        if (stats[i].tag == VIR_DOMAIN_MEMORY_STAT_RSS)
> +            vshPrint (ctl, "rss %llu\n", stats[i].val);
>      }
> 
>      virDomainFree(dom);

  Looks fine, and works for me, ACK too

I'm pushing the 2 patches but please provide one missing item:
the python bindings, basically in python/libvirt-override.c
you need to add the new information in libvirt_virDomainMemoryStats()
it's an easy patch and we can add it while in feature freeze next week

  thanks !

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list