diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2009-12-09 10:46:11 +0000 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2009-12-09 10:46:11 +0000 |
commit | 5f05fba8c1826f6f8132c46d9215b25598f5eb39 (patch) | |
tree | 2affc1d1dbb5b29c841fe2af6471309083f736d6 /tools/xenstat/libxenstat | |
parent | 51010e4de3d40cd83549768c2cf10ecdcf6ee4a8 (diff) | |
download | xen-5f05fba8c1826f6f8132c46d9215b25598f5eb39.tar.gz xen-5f05fba8c1826f6f8132c46d9215b25598f5eb39.tar.bz2 xen-5f05fba8c1826f6f8132c46d9215b25598f5eb39.zip |
tmem, xentop: Report a few key per-domain tmem statistics in xentop.
Signed-off-by: Dan Magenheimer <dan.magenheimer@oracle.com>
Diffstat (limited to 'tools/xenstat/libxenstat')
-rw-r--r-- | tools/xenstat/libxenstat/src/xenstat.c | 62 | ||||
-rw-r--r-- | tools/xenstat/libxenstat/src/xenstat.h | 12 | ||||
-rw-r--r-- | tools/xenstat/libxenstat/src/xenstat_priv.h | 8 |
3 files changed, 82 insertions, 0 deletions
diff --git a/tools/xenstat/libxenstat/src/xenstat.c b/tools/xenstat/libxenstat/src/xenstat.c index 67d861fd55..6396f5959d 100644 --- a/tools/xenstat/libxenstat/src/xenstat.c +++ b/tools/xenstat/libxenstat/src/xenstat.c @@ -131,6 +131,32 @@ void xenstat_uninit(xenstat_handle * handle) } } +static inline unsigned long long parse(char *s, char *match) +{ + char *s1 = strstr(s,match); + unsigned long long ret; + + if ( s1 == NULL ) + return 0LL; + s1 += 2; + if ( *s1++ != ':' ) + return 0LL; + sscanf(s1,"%llu",&ret); + return ret; +} + +void domain_get_tmem_stats(xenstat_handle * handle, xenstat_domain * domain) +{ + char buffer[4096]; + + xc_tmem_control(handle->xc_handle,-1,TMEMC_LIST,domain->id, + sizeof(buffer),-1,-1,buffer); + domain->tmem_stats.curr_eph_pages = parse(buffer,"Ec"); + domain->tmem_stats.succ_eph_gets = parse(buffer,"Ge"); + domain->tmem_stats.succ_pers_puts = parse(buffer,"Pp"); + domain->tmem_stats.succ_pers_gets = parse(buffer,"Gp"); +} + xenstat_node *xenstat_get_node(xenstat_handle * handle, unsigned int flags) { #define DOMAIN_CHUNK_SIZE 256 @@ -232,12 +258,14 @@ xenstat_node *xenstat_get_node(xenstat_handle * handle, unsigned int flags) domain->networks = NULL; domain->num_vbds = 0; domain->vbds = NULL; + domain_get_tmem_stats(handle,domain); domain++; node->num_domains++; } } while (new_domains == DOMAIN_CHUNK_SIZE); + /* Run all the extra data collectors requested */ node->flags = 0; for (i = 0; i < NUM_COLLECTORS; i++) { @@ -674,6 +702,40 @@ unsigned long long xenstat_vbd_wr_sects(xenstat_vbd * vbd) return vbd->wr_sects; } +/* + * Tmem functions + */ + +xenstat_tmem *xenstat_domain_tmem(xenstat_domain * domain) +{ + return &domain->tmem_stats; +} + +/* Get the current number of ephemeral pages */ +unsigned long long xenstat_tmem_curr_eph_pages(xenstat_tmem *tmem) +{ + return tmem->curr_eph_pages; +} + +/* Get the number of successful ephemeral gets */ +unsigned long long xenstat_tmem_succ_eph_gets(xenstat_tmem *tmem) +{ + return tmem->succ_eph_gets; +} + +/* Get the number of successful persistent puts */ +unsigned long long xenstat_tmem_succ_pers_puts(xenstat_tmem *tmem) +{ + return tmem->succ_pers_puts; +} + +/* Get the number of successful persistent gets */ +unsigned long long xenstat_tmem_succ_pers_gets(xenstat_tmem *tmem) +{ + return tmem->succ_pers_gets; +} + + static char *xenstat_get_domain_name(xenstat_handle *handle, unsigned int domain_id) { char path[80], *vmpath; diff --git a/tools/xenstat/libxenstat/src/xenstat.h b/tools/xenstat/libxenstat/src/xenstat.h index 1da354b22a..47ec60e14d 100644 --- a/tools/xenstat/libxenstat/src/xenstat.h +++ b/tools/xenstat/libxenstat/src/xenstat.h @@ -27,6 +27,7 @@ typedef struct xenstat_node xenstat_node; typedef struct xenstat_vcpu xenstat_vcpu; typedef struct xenstat_network xenstat_network; typedef struct xenstat_vbd xenstat_vbd; +typedef struct xenstat_tmem xenstat_tmem; /* Initialize the xenstat library. Returns a handle to be used with * subsequent calls to the xenstat library, or NULL if an error occurs. */ @@ -132,6 +133,9 @@ unsigned int xenstat_domain_num_vbds(xenstat_domain *); xenstat_vbd *xenstat_domain_vbd(xenstat_domain * domain, unsigned int vbd); +/* Get the tmem information for a given domain */ +xenstat_tmem *xenstat_domain_tmem(xenstat_domain * domain); + /* * VCPU functions - extract information from a xenstat_vcpu */ @@ -189,4 +193,12 @@ unsigned long long xenstat_vbd_wr_reqs(xenstat_vbd * vbd); unsigned long long xenstat_vbd_rd_sects(xenstat_vbd * vbd); unsigned long long xenstat_vbd_wr_sects(xenstat_vbd * vbd); +/* + * Tmem functions - extract tmem information + */ +unsigned long long xenstat_tmem_curr_eph_pages(xenstat_tmem *tmem); +unsigned long long xenstat_tmem_succ_eph_gets(xenstat_tmem *tmem); +unsigned long long xenstat_tmem_succ_pers_puts(xenstat_tmem *tmem); +unsigned long long xenstat_tmem_succ_pers_gets(xenstat_tmem *tmem); + #endif /* XENSTAT_H */ diff --git a/tools/xenstat/libxenstat/src/xenstat_priv.h b/tools/xenstat/libxenstat/src/xenstat_priv.h index af955014ae..81beec1d8e 100644 --- a/tools/xenstat/libxenstat/src/xenstat_priv.h +++ b/tools/xenstat/libxenstat/src/xenstat_priv.h @@ -52,6 +52,13 @@ struct xenstat_node { long freeable_mb; }; +struct xenstat_tmem { + unsigned long long curr_eph_pages; + unsigned long long succ_eph_gets; + unsigned long long succ_pers_puts; + unsigned long long succ_pers_gets; +}; + struct xenstat_domain { unsigned int id; char *name; @@ -66,6 +73,7 @@ struct xenstat_domain { xenstat_network *networks; /* Array of length num_networks */ unsigned int num_vbds; xenstat_vbd *vbds; + xenstat_tmem tmem_stats; }; struct xenstat_vcpu { |