[PATCH 2/2] qemu: Implement qemuDomainGetStatsCpu fallback for qemu:///session

Daniel P. Berrangé berrange at redhat.com
Tue Sep 6 07:51:02 UTC 2022


On Mon, Sep 05, 2022 at 09:40:57AM +0200, Michal Privoznik wrote:
> For domains started under session URI, we don't set up CGroups
> (well, how could we since we're not running as root anyways).
> Nevertheless, fetching CPU statistics exits early because of
> lacking cpuacct controller. But with recent extension to
> virProcessGetStatInfo() we can get the values we need from the
> proc filesystem. Implement the fallback for the session URI as
> some of virt tools rely on cpu.* stats to be reported (virt-top,
> virt-manager).
> 
> Resolves: https://gitlab.com/libvirt/libvirt/-/issues/353
> Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1693707
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
>  src/qemu/qemu_driver.c | 35 +++++++++++++++++++++++++++++++++--
>  1 file changed, 33 insertions(+), 2 deletions(-)
> 
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index d7283a6e47..c7cca64001 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -17765,6 +17765,30 @@ qemuDomainGetStatsCpuCgroup(virDomainObj *dom,
>      return 0;
>  }
>  
> +
> +static int
> +qemuDomainGetStatsCpuProc(virDomainObj *vm,
> +                          virTypedParamList *params)
> +{
> +    unsigned long long cpuTime = 0;
> +    unsigned long long sysTime = 0;
> +    unsigned long long userTime = 0;
> +
> +    if (virProcessGetStatInfo(&cpuTime, &sysTime, &userTime,
> +                              NULL, NULL, vm->pid, 0) < 0) {
> +        /* ignore error */
> +        return 0;
> +    }

This has upset the static analysis in coverity:

*** CID 398935:  API usage errors  (SWAPPED_ARGUMENTS)
/src/qemu/qemu_driver.c: 17777 in qemuDomainGetStatsCpuProc()
17771                               virTypedParamList *params)
17772     {
17773         unsigned long long cpuTime = 0;
17774         unsigned long long sysTime = 0;
17775         unsigned long long userTime = 0;
17776     
>>>     CID 398935:  API usage errors  (SWAPPED_ARGUMENTS)
>>>     The positions of arguments in the call to "virProcessGetStatInfo" do not match the ordering of the parameters:
* "&sysTime" is passed to "userTime".
* "&userTime" is passed to "sysTime".
17777         if (virProcessGetStatInfo(&cpuTime, &sysTime, &userTime,
17778                                   NULL, NULL, vm->pid, 0) < 0) {
17779             /* ignore error */
17780             return 0;
17781         }
17782     



With regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|


More information about the libvir-list mailing list