mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-03 03:25:20 +00:00
* include/libvir.h src/libvir.c src/virsh.c: adding the extraction
of the number of virtual CPUs for both interfaces. Daniel
This commit is contained in:
parent
6564f33fbb
commit
02a0500d22
@ -1,3 +1,8 @@
|
|||||||
|
Tue Dec 6 17:12:52 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||||
|
|
||||||
|
* include/libvir.h src/libvir.c src/virsh.c: adding the extraction
|
||||||
|
of the number of virtual CPUs for both interfaces.
|
||||||
|
|
||||||
Tue Dec 6 14:46:50 CET 2005 Daniel Veillard <veillard@redhat.com>
|
Tue Dec 6 14:46:50 CET 2005 Daniel Veillard <veillard@redhat.com>
|
||||||
|
|
||||||
* include/libvir.h src/libvir.c src/virsh.c: tweaking of the
|
* include/libvir.h src/libvir.c src/virsh.c: tweaking of the
|
||||||
|
@ -70,9 +70,10 @@ typedef enum {
|
|||||||
typedef struct _virDomainInfo virDomainInfo;
|
typedef struct _virDomainInfo virDomainInfo;
|
||||||
|
|
||||||
struct _virDomainInfo {
|
struct _virDomainInfo {
|
||||||
unsigned char state; /* the running state, a virDomainFlags */
|
unsigned char state; /* the running state, one of virDomainFlags */
|
||||||
unsigned long maxMem; /* the maximum number of bytes allowed */
|
unsigned long maxMem; /* the maximum memory in bytes allowed */
|
||||||
unsigned long memory; /* the number of bytes used by the domain */
|
unsigned long memory; /* the memory in bytes used by the domain */
|
||||||
|
unsigned short nrVirtCpu; /* the number of virtual CPUs for the domain */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Informations below are only available to clients with a connection
|
* Informations below are only available to clients with a connection
|
||||||
|
46
src/libvir.c
46
src/libvir.c
@ -298,6 +298,8 @@ virDomainLookupByName(virConnectPtr conn, const char *name) {
|
|||||||
return(NULL);
|
return(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
/* Not used ATM */
|
||||||
/**
|
/**
|
||||||
* virConnectDoStoreQuery:
|
* virConnectDoStoreQuery:
|
||||||
* @conn: pointer to the hypervisor connection
|
* @conn: pointer to the hypervisor connection
|
||||||
@ -319,6 +321,34 @@ virConnectDoStoreQuery(virConnectPtr conn, const char *path) {
|
|||||||
|
|
||||||
ret = xs_read(conn->xshandle, t, path, &len);
|
ret = xs_read(conn->xshandle, t, path, &len);
|
||||||
|
|
||||||
|
done:
|
||||||
|
if (t != NULL)
|
||||||
|
xs_transaction_end(conn->xshandle, t, 0);
|
||||||
|
return(ret);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* virConnectDoStoreList:
|
||||||
|
* @conn: pointer to the hypervisor connection
|
||||||
|
* @path: the absolute path of the directory in the store to list
|
||||||
|
* @nb: OUT pointer to the number of items found
|
||||||
|
*
|
||||||
|
* Internal API querying the Xenstore for a list
|
||||||
|
*
|
||||||
|
* Returns a string which must be freed by the caller or NULL in case of error
|
||||||
|
*/
|
||||||
|
static char **
|
||||||
|
virConnectDoStoreList(virConnectPtr conn, const char *path, unsigned int *nb) {
|
||||||
|
struct xs_transaction_handle* t;
|
||||||
|
char **ret = NULL;
|
||||||
|
|
||||||
|
t = xs_transaction_start(conn->xshandle);
|
||||||
|
if (t == NULL)
|
||||||
|
goto done;
|
||||||
|
|
||||||
|
ret = xs_directory(conn->xshandle, t, path, nb);
|
||||||
|
|
||||||
done:
|
done:
|
||||||
if (t != NULL)
|
if (t != NULL)
|
||||||
xs_transaction_end(conn->xshandle, t, 0);
|
xs_transaction_end(conn->xshandle, t, 0);
|
||||||
@ -542,7 +572,9 @@ virDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info) {
|
|||||||
return(-1);
|
return(-1);
|
||||||
memset(info, 0, sizeof(virDomainInfo));
|
memset(info, 0, sizeof(virDomainInfo));
|
||||||
if (domain->conn->flags & VIR_CONNECT_RO) {
|
if (domain->conn->flags & VIR_CONNECT_RO) {
|
||||||
char *tmp;
|
char *tmp, **tmp2;
|
||||||
|
unsigned int nb_vcpus;
|
||||||
|
char request[200];
|
||||||
|
|
||||||
tmp = virDomainDoStoreQuery(domain, "running");
|
tmp = virDomainDoStoreQuery(domain, "running");
|
||||||
if (tmp != NULL) {
|
if (tmp != NULL) {
|
||||||
@ -561,6 +593,8 @@ virDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info) {
|
|||||||
info->memory = 0;
|
info->memory = 0;
|
||||||
info->maxMem = 0;
|
info->maxMem = 0;
|
||||||
}
|
}
|
||||||
|
#if 0
|
||||||
|
/* doesn't seems to work */
|
||||||
tmp = virDomainDoStoreQuery(domain, "cpu_time");
|
tmp = virDomainDoStoreQuery(domain, "cpu_time");
|
||||||
if (tmp != NULL) {
|
if (tmp != NULL) {
|
||||||
info->cpuTime = atol(tmp);
|
info->cpuTime = atol(tmp);
|
||||||
@ -568,6 +602,15 @@ virDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info) {
|
|||||||
} else {
|
} else {
|
||||||
info->cpuTime = 0;
|
info->cpuTime = 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
snprintf(request, 199, "/local/domain/%d/cpu", domain->handle);
|
||||||
|
request[199] = 0;
|
||||||
|
tmp2 = virConnectDoStoreList(domain->conn, request, &nb_vcpus);
|
||||||
|
if (tmp2 != NULL) {
|
||||||
|
info->nrVirtCpu = nb_vcpus;
|
||||||
|
free(tmp2);
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
xc_domaininfo_t dominfo;
|
xc_domaininfo_t dominfo;
|
||||||
|
|
||||||
@ -604,6 +647,7 @@ virDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info) {
|
|||||||
info->cpuTime = dominfo.cpu_time;
|
info->cpuTime = dominfo.cpu_time;
|
||||||
info->memory = dominfo.tot_pages * 4096;
|
info->memory = dominfo.tot_pages * 4096;
|
||||||
info->maxMem = dominfo.max_pages * 4096;
|
info->maxMem = dominfo.max_pages * 4096;
|
||||||
|
info->nrVirtCpu = dominfo.nr_online_vcpus;
|
||||||
}
|
}
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
@ -48,11 +48,12 @@ static void printDomain(virDomainPtr dom) {
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
printf("%d vCPU, ", info.nrVirtCpu);
|
||||||
if (info.cpuTime != 0) {
|
if (info.cpuTime != 0) {
|
||||||
float cpuUsed = info.cpuTime;
|
float cpuUsed = info.cpuTime;
|
||||||
|
|
||||||
cpuUsed /= 1000000000;
|
cpuUsed /= 1000000000;
|
||||||
printf("%.1f s CPU time, ", cpuUsed);
|
printf("%.1fs time, ", cpuUsed);
|
||||||
}
|
}
|
||||||
mem = info.memory;
|
mem = info.memory;
|
||||||
mem /= 1024 * 1024;
|
mem /= 1024 * 1024;
|
||||||
|
Loading…
Reference in New Issue
Block a user