[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] tmem, xentop: Report a few key per-domain tmem statistics in xentop.
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1260355571 0 # Node ID 9e9746e635f9ec1ef1a3e0cbb425e89112f8e63b # Parent 18342df0f9dcf3a0a5a7ce05ea0218cf94335157 tmem, xentop: Report a few key per-domain tmem statistics in xentop. Signed-off-by: Dan Magenheimer <dan.magenheimer@xxxxxxxxxx> --- tools/xenstat/libxenstat/src/xenstat.c | 62 ++++++++++++++++++++++++++++ tools/xenstat/libxenstat/src/xenstat.h | 12 +++++ tools/xenstat/libxenstat/src/xenstat_priv.h | 8 +++ tools/xenstat/xentop/xentop.c | 31 ++++++++++++++ 4 files changed, 113 insertions(+) diff -r 18342df0f9dc -r 9e9746e635f9 tools/xenstat/libxenstat/src/xenstat.c --- a/tools/xenstat/libxenstat/src/xenstat.c Wed Dec 09 10:44:56 2009 +0000 +++ b/tools/xenstat/libxenstat/src/xenstat.c Wed Dec 09 10:46:11 2009 +0000 @@ -129,6 +129,32 @@ void xenstat_uninit(xenstat_handle * han free(handle->priv); free(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) @@ -232,11 +258,13 @@ xenstat_node *xenstat_get_node(xenstat_h 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; @@ -674,6 +702,40 @@ unsigned long long xenstat_vbd_wr_sects( 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 -r 18342df0f9dc -r 9e9746e635f9 tools/xenstat/libxenstat/src/xenstat.h --- a/tools/xenstat/libxenstat/src/xenstat.h Wed Dec 09 10:44:56 2009 +0000 +++ b/tools/xenstat/libxenstat/src/xenstat.h Wed Dec 09 10:46:11 2009 +0000 @@ -27,6 +27,7 @@ typedef struct xenstat_vcpu xenstat_vcpu 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 @@ xenstat_vbd *xenstat_domain_vbd(xenstat_ 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_rd_sects( 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 -r 18342df0f9dc -r 9e9746e635f9 tools/xenstat/libxenstat/src/xenstat_priv.h --- a/tools/xenstat/libxenstat/src/xenstat_priv.h Wed Dec 09 10:44:56 2009 +0000 +++ b/tools/xenstat/libxenstat/src/xenstat_priv.h Wed Dec 09 10:46:11 2009 +0000 @@ -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 { diff -r 18342df0f9dc -r 9e9746e635f9 tools/xenstat/xentop/xentop.c --- a/tools/xenstat/xentop/xentop.c Wed Dec 09 10:44:56 2009 +0000 +++ b/tools/xenstat/xentop/xentop.c Wed Dec 09 10:46:11 2009 +0000 @@ -202,6 +202,7 @@ int show_vcpus = 0; int show_vcpus = 0; int show_networks = 0; int show_vbds = 0; +int show_tmem = 0; int repeat_header = 0; int show_full_name = 0; #define PROMPT_VAL_LEN 80 @@ -354,6 +355,9 @@ static int handle_key(int ch) case 'b': case 'B': show_vbds ^= 1; break; + case 't': case 'T': + show_tmem ^= 1; + break; case 'r': case 'R': repeat_header ^= 1; break; @@ -889,6 +893,11 @@ void do_bottom_line(void) attr_addstr(show_vbds ? COLOR_PAIR(1) : 0, "ds"); addstr(" "); + /* tmem */ + addch(A_REVERSE | 'T'); + attr_addstr(show_tmem ? COLOR_PAIR(1) : 0, "mem"); + addstr(" "); + /* vcpus */ addch(A_REVERSE | 'V'); @@ -1018,6 +1027,23 @@ void do_vbd(xenstat_domain *domain) } } +/* Output all tmem information */ +void do_tmem(xenstat_domain *domain) +{ + xenstat_tmem *tmem = xenstat_domain_tmem(domain); + unsigned long long curr_eph_pages = xenstat_tmem_curr_eph_pages(tmem); + unsigned long long succ_eph_gets = xenstat_tmem_succ_eph_gets(tmem); + unsigned long long succ_pers_puts = xenstat_tmem_succ_pers_puts(tmem); + unsigned long long succ_pers_gets = xenstat_tmem_succ_pers_gets(tmem); + + if (curr_eph_pages | succ_eph_gets | succ_pers_puts | succ_pers_gets) + print("Tmem: Curr eph pages: %8llu Succ eph gets: %8llu " + "Succ pers puts: %8llu Succ pers gets: %8llu\n", + curr_eph_pages, succ_eph_gets, + succ_pers_puts, succ_pers_gets); + +} + static void top(void) { xenstat_domain **domains; @@ -1064,6 +1090,8 @@ static void top(void) do_network(domains[i]); if (show_vbds) do_vbd(domains[i]); + if (show_tmem) + do_tmem(domains[i]); } if (!batch) @@ -1138,6 +1166,9 @@ int main(int argc, char **argv) break; case 'f': show_full_name = 1; + break; + case 't': + show_tmem = 1; break; } } _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |