[libvirt-users] problem when get the vm cpu stat

Wangkai (Kevin,C) wangkai86 at huawei.com
Sat Apr 20 08:13:08 UTC 2013



> -----Original Message-----
> From: Michal Privoznik [mailto:mprivozn at redhat.com]
> Sent: Friday, April 19, 2013 10:53 PM
> To: Wangkai (Kevin,C)
> Cc: libvirt-users at redhat.com
> Subject: Re: [libvirt-users] problem when get the vm cpu stat
> 
> On 19.04.2013 09:40, Wangkai (Kevin,C) wrote:
> > Hi all,
> >
> >
> >
> > I try to get vm cpu stat by function "virDomainGetCPUStats",  when
> the vm
> >
> >
> >
> > Cpu usage is 100%, I can see from the vm shell by "top",  when the
> info
> >
> >
> >
> > Get by the "virDomainGetCPUStats" show only the "cpu_time" increased,
> >
> >
> >
> > "user_time" and "system_time" was not changed at all.
> >
> >
> >
> > Is that correct ? How can I get the vm cpu usage?
> >
> >
> >
> > nparams = virDomainGetCPUStats(domain, NULL, 0, -1, 1, 0);
> >
> > virDomainGetCPUStats(domain, params, nparams, -1, 1, 0);
> 
> You can gather statistics in similar way that 'top' does. Query current
> usage in loops and divide increment by time. Something like:
> 
> 
> nparams = virDomainGetCPUStats(domain, NULL, 0, -1, 1, 0);
> 
> while (1) {
>   struct timeval now, then;
>   int i, j;
> 
>   gettimeofday(&now, NULL);
>   virDomainGetCPUStats(domain, params_now, nparams, -1, 1, 0);
> 
>   /* some sleep, e.g. 500ms */
>   usleep(5000);
> 
>   virDomainGetCPUStats(domain, params_then, nparams, -1, 1, 0);
>   gettimeofday(&then, NULL);
> 
>   /* find appropriate i and j */
> 
>   /* virDomainGetCPUStats is returning time in microseconds IIRC */
>   float usage_in_percent = (params_then[i] - params_now[j]) /
> (then.tv_usec - now.tv_usec) / 1000;
> 
>   printf("%f\n", usage_in_percent);
> }



[Wangkai (Kevin,C)] 
Thank you, I will do this way.








More information about the libvirt-users mailing list