On Tue, Jan 24, 2012 at 02:25:04PM +0100, Martin Kletzander wrote: > One more parameter added into the function parsing /proc/<pid>/stat > and the call of the function is fixed as well. > --- > v2: > - correction of the format in fscanf in qemudGetProcessInfo > > src/qemu/qemu_driver.c | 25 ++++++++++++++++++------- > 1 files changed, 18 insertions(+), 7 deletions(-) > > diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c > index 608e82a..6600afd 100644 > --- a/src/qemu/qemu_driver.c > +++ b/src/qemu/qemu_driver.c > @@ -1049,12 +1049,13 @@ cleanup: > > > static int > -qemudGetProcessInfo(unsigned long long *cpuTime, int *lastCpu, int pid, > - int tid) > +qemudGetProcessInfo(unsigned long long *cpuTime, int *lastCpu, long *vm_rss, > + int pid, int tid) > { > char *proc; > FILE *pidinfo; > unsigned long long usertime, systime; > + long rss; > int cpu; > int ret; > > @@ -1071,6 +1072,8 @@ qemudGetProcessInfo(unsigned long long *cpuTime, int *lastCpu, int pid, > *cpuTime = 0; > if (lastCpu) > *lastCpu = 0; > + if (vm_rss) > + *vm_rss = 0; > VIR_FREE(proc); > return 0; > } > @@ -1082,10 +1085,10 @@ qemudGetProcessInfo(unsigned long long *cpuTime, int *lastCpu, int pid, > /* pid -> stime */ > "%*d %*s %*c %*d %*d %*d %*d %*d %*u %*u %*u %*u %*u %llu %llu" > /* cutime -> endcode */ > - "%*d %*d %*d %*d %*d %*u %*u %*d %*u %*u %*u %*u" > + "%*d %*d %*d %*d %*d %*d %*u %*u %ld %*u %*u %*u" > /* startstack -> processor */ > "%*u %*u %*u %*u %*u %*u %*u %*u %*u %*u %*d %d", > - &usertime, &systime, &cpu) != 3) { > + &usertime, &systime, &rss, &cpu) != 4) { > VIR_FORCE_FCLOSE(pidinfo); > VIR_WARN("cannot parse process status data"); > errno = -EINVAL; > @@ -1102,9 +1105,16 @@ qemudGetProcessInfo(unsigned long long *cpuTime, int *lastCpu, int pid, > if (lastCpu) > *lastCpu = cpu; > > + /* We got pages > + * We want kiloBytes > + * _SC_PAGESIZE is page size in Bytes > + * So calculate, but first lower the pagesize so we don't get overflow */ > + if (vm_rss) > + *vm_rss = rss * (sysconf(_SC_PAGESIZE) >> 10); > > - VIR_DEBUG("Got status for %d/%d user=%llu sys=%llu cpu=%d", > - pid, tid, usertime, systime, cpu); > + > + VIR_DEBUG("Got status for %d/%d user=%llu sys=%llu cpu=%d rss=%ld", > + pid, tid, usertime, systime, cpu, rss); > > VIR_FORCE_FCLOSE(pidinfo); > > @@ -2066,7 +2076,7 @@ static int qemudDomainGetInfo(virDomainPtr dom, > if (!virDomainObjIsActive(vm)) { > info->cpuTime = 0; > } else { > - if (qemudGetProcessInfo(&(info->cpuTime), NULL, vm->pid, 0) < 0) { > + if (qemudGetProcessInfo(&(info->cpuTime), NULL, NULL, vm->pid, 0) < 0) { > qemuReportError(VIR_ERR_OPERATION_FAILED, "%s", > _("cannot read cputime for domain")); > goto cleanup; > @@ -3648,6 +3658,7 @@ qemudDomainGetVcpus(virDomainPtr dom, > if (priv->vcpupids != NULL && > qemudGetProcessInfo(&(info[i].cpuTime), > &(info[i].cpu), > + NULL, > vm->pid, > priv->vcpupids[i]) < 0) { > virReportSystemError(errno, "%s", Actually I prefer that version :-) ACK to that one instead ! Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@xxxxxxxxxxxx | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list