mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-10 05:17:59 +03:00
OpenVZ domain cpu time
* src/openvz_driver.c: patch from Evgeniy Sokolov to get OpenVZ domain cpu time consumption. Daniel
This commit is contained in:
parent
92b56c0412
commit
7b4f67acea
@ -1,3 +1,8 @@
|
||||
Mon Jul 21 10:07:08 CEST 2008 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* src/openvz_driver.c: patch from Evgeniy Sokolov to get OpenVZ
|
||||
domain cpu time consumption.
|
||||
|
||||
Mon Jul 21 10:01:36 CEST 2008 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* configure.in: patch from David Lively to try to detect the xen
|
||||
|
@ -94,6 +94,8 @@ static int openvzDomainUndefine(virDomainPtr dom);
|
||||
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,16 @@ static int openvzDomainGetInfo(virDomainPtr dom,
|
||||
|
||||
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 %d"), dom->id);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/* TODO These need to be calculated differently for OpenVZ */
|
||||
//info->cpuTime =
|
||||
//info->maxMem = vm->def->maxmem;
|
||||
@ -689,6 +701,51 @@ static int openvzListDefinedDomains(virConnectPtr conn,
|
||||
return got;
|
||||
}
|
||||
|
||||
static int openvzGetProcessInfo(unsigned long long *cpuTime, int vpsid) {
|
||||
int fd;
|
||||
char line[1024] ;
|
||||
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..
|
||||
55 178 0 5340 59424597 542650441835148 other..
|
||||
*/
|
||||
|
||||
if ((fd = open("/proc/vz/vestat", O_RDONLY)) == -1)
|
||||
return -1;
|
||||
|
||||
/*search line with VEID=vpsid*/
|
||||
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; /*found vpsid*/
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user