* 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:
Daniel Veillard 2005-12-06 16:12:49 +00:00
parent 6564f33fbb
commit 02a0500d22
4 changed files with 56 additions and 5 deletions

View File

@ -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

View File

@ -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

View File

@ -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);
} }

View File

@ -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;