OpenVZ calculate statistics and allow to get them . Added function for getting cpu usage of container.
Index: src/openvz_driver.c =================================================================== RCS file: /data/cvs/libvirt/src/openvz_driver.c,v retrieving revision 1.31 diff -u -p -r1.31 openvz_driver.c --- src/openvz_driver.c 16 Jul 2008 20:42:38 -0000 1.31 +++ src/openvz_driver.c 17 Jul 2008 10:50:15 -0000 @@ -94,6 +94,8 @@ static int openvzDomainUndefine(virDomai static int convCmdbufExec(char cmdbuf[], char *cmdExec[]); static void cmdExecFree(char *cmdExec[]); +static int openvzGetProcessInfo(unsigned long long *cpuTime, int vpsid); + struct openvz_driver ovz_driver; static int convCmdbufExec(char cmdbuf[], char *cmdExec[]) @@ -279,6 +281,15 @@ static int openvzDomainGetInfo(virDomain info->state = vm->status; + if (!openvzIsActiveVM(vm)) { + info->cpuTime = 0; + } else { + if (openvzGetProcessInfo(&(info->cpuTime), dom->id) < 0) { + openvzError(dom->conn, VIR_ERR_OPERATION_FAILED, ("cannot read cputime for domain")); + return -1; + } + } + /* TODO These need to be calculated differently for OpenVZ */ //info->cpuTime = //info->maxMem = vm->def->maxmem; @@ -689,6 +700,48 @@ static int openvzListDefinedDomains(virC return got; } +static int openvzGetProcessInfo(unsigned long long *cpuTime, int vpsid) { + int fd; + char line[PATH_MAX] ; + unsigned long long usertime, systime, nicetime; + int readvps = 0, ret; + +/* read statistic from /proc/vz/vestat. +sample: +Version: 2.2 + VEID user nice system uptime idle other.... + 33 78 0 1330 59454597 142650441835148 other.... +*/ + + fd = open("/proc/vz/vestat", O_RDONLY); + if (fd == -1) + return -1; + + while(1) { + ret = openvz_readline(fd, line, sizeof(line)); + if(ret <= 0) + break; + + if (sscanf(line, "%d %llu %llu %llu", &readvps, &usertime, &nicetime, &systime) != 4) + continue; + + if (readvps == vpsid) + break; + } + + close(fd); + if (ret < 0) + return -1; + + if (readvps != vpsid) /*not found*/ + return -1; + + /* convert jiffies to nanoseconds */ + *cpuTime = 1000ull * 1000ull * 1000ull * (usertime + nicetime + systime) / (unsigned long long)sysconf(_SC_CLK_TCK); + + return 0; +} + static int openvzNumDefinedDomains(virConnectPtr conn ATTRIBUTE_UNUSED) { return ovz_driver.num_inactive; }
-- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list