[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] xentop: Dynamically expand some columns
On Thu, Oct 02, 2014 at 10:25:41AM -0600, Charles Arnold wrote: > >>> On 10/2/2014 at 10:10 AM, Andrew Cooper <andrew.cooper3@xxxxxxxxxx> > >>> wrote: > > On 02/10/14 16:58, Charles Arnold wrote: > >> Allow certain xentop columns to automatically expand as the amount > >> of data reported gets larger. The columns allowed to expand are: > >> > >> NETTX(k), NETRX(k), VBD_RD, VBD_WR, VBD_RSECT, VBD_WSECT > >> > >> Author: Markus Hauschild <Markus.Hauschild@xxxxxxxxxxxxxxxxxxxx> > >> Signed-off-by: Charles Arnold <carnold@xxxxxxxx> > > > > In principle, very nice. (I have wanted to see about doing this for a > > while now, but very far down the todo list) > > > > How about the NAME field? 9 characters isn't enough for some people. > > Sure, and any others that might need it. But what to do about the '-f' flag > which says show me the full VM name but the flag doesn't adjust the entire > column. By automatically showing the full name and adjusting the column > appropriately it makes this flag pointless (which I'm ok with). Perhaps this functionality should be under that option? I am a bit hesistant about this as there are some users of xentop that use it for their monitoring. What I can't remember is if they use the batched mode or not - and if they scan for specific strings (and length). This would (I think?) throw a wrench in that? > > - Charles > > >> > >> diff --git a/tools/xenstat/xentop/xentop.c b/tools/xenstat/xentop/xentop.c > >> index dd11927..d087665 100644 > >> --- a/tools/xenstat/xentop/xentop.c > >> +++ b/tools/xenstat/xentop/xentop.c > >> @@ -27,6 +27,7 @@ > >> > >> #include <ctype.h> > >> #include <errno.h> > >> +#include <math.h> > >> #include <stdio.h> > >> #include <stdlib.h> > >> #include <stdarg.h> > >> @@ -127,7 +128,8 @@ static int compare_vbd_rsect(xenstat_domain *domain1, > > xenstat_domain *domain2); > >> static void print_vbd_rsect(xenstat_domain *domain); > >> static int compare_vbd_wsect(xenstat_domain *domain1, xenstat_domain > > *domain2); > >> static void print_vbd_wsect(xenstat_domain *domain); > >> - > >> +static void reset_field_widths(void); > >> +static void adjust_field_widths(xenstat_domain *domain); > >> > >> /* Section printing functions */ > >> static void do_summary(void); > >> @@ -623,7 +625,7 @@ static int compare_net_tx(xenstat_domain *domain1, > > xenstat_domain *domain2) > >> /* Prints number of total network tx bytes statistic */ > >> static void print_net_tx(xenstat_domain *domain) > >> { > >> - print("%8llu", tot_net_bytes(domain, FALSE)/1024); > >> + print("%*llu", fields[FIELD_NET_TX-1].default_width, > >> tot_net_bytes(domain, > > FALSE)/1024); > >> } > >> > >> /* Compares number of total network rx bytes of two domains, returning > > -1,0,1 > >> @@ -637,7 +639,7 @@ static int compare_net_rx(xenstat_domain *domain1, > > xenstat_domain *domain2) > >> /* Prints number of total network rx bytes statistic */ > >> static void print_net_rx(xenstat_domain *domain) > >> { > >> - print("%8llu", tot_net_bytes(domain, TRUE)/1024); > >> + print("%*llu", fields[FIELD_NET_RX-1].default_width, > >> tot_net_bytes(domain, > > TRUE)/1024); > >> } > >> > >> /* Gets number of total network bytes statistic, if rx true, then rx bytes > >> @@ -705,7 +707,7 @@ static int compare_vbd_rd(xenstat_domain *domain1, > > xenstat_domain *domain2) > >> /* Prints number of total VBD READ requests statistic */ > >> static void print_vbd_rd(xenstat_domain *domain) > >> { > >> - print("%8llu", tot_vbd_reqs(domain, FIELD_VBD_RD)); > >> + print("%*llu", fields[FIELD_VBD_RD-1].default_width, > >> tot_vbd_reqs(domain, > > FIELD_VBD_RD)); > >> } > >> > >> /* Compares number of total VBD WRITE requests of two domains, > >> @@ -719,7 +721,7 @@ static int compare_vbd_wr(xenstat_domain *domain1, > > xenstat_domain *domain2) > >> /* Prints number of total VBD WRITE requests statistic */ > >> static void print_vbd_wr(xenstat_domain *domain) > >> { > >> - print("%8llu", tot_vbd_reqs(domain, FIELD_VBD_WR)); > >> + print("%*llu", fields[FIELD_VBD_WR-1].default_width, > >> tot_vbd_reqs(domain, > > FIELD_VBD_WR)); > >> } > >> > >> /* Compares number of total VBD READ sectors of two domains, > >> @@ -733,7 +735,7 @@ static int compare_vbd_rsect(xenstat_domain *domain1, > > xenstat_domain *domain2) > >> /* Prints number of total VBD READ sectors statistic */ > >> static void print_vbd_rsect(xenstat_domain *domain) > >> { > >> - print("%10llu", tot_vbd_reqs(domain, FIELD_VBD_RSECT)); > >> + print("%*llu", fields[FIELD_VBD_RSECT-1].default_width, > >> tot_vbd_reqs(domain, > > FIELD_VBD_RSECT)); > >> } > >> > >> /* Compares number of total VBD WRITE sectors of two domains, > >> @@ -747,7 +749,7 @@ static int compare_vbd_wsect(xenstat_domain *domain1, > > xenstat_domain *domain2) > >> /* Prints number of total VBD WRITE sectors statistic */ > >> static void print_vbd_wsect(xenstat_domain *domain) > >> { > >> - print("%10llu", tot_vbd_reqs(domain, FIELD_VBD_WSECT)); > >> + print("%*llu", fields[FIELD_VBD_WSECT-1].default_width, > >> tot_vbd_reqs(domain, > > FIELD_VBD_WSECT)); > >> } > >> > >> > >> @@ -806,6 +808,48 @@ static void print_ssid(xenstat_domain *domain) > >> print("%4u", xenstat_domain_ssid(domain)); > >> } > >> > >> +/* Resets default_width for fields with potentially large numbers */ > >> +void reset_field_widths(void) > >> +{ > >> + fields[FIELD_NET_TX-1].default_width = 8; > >> + fields[FIELD_NET_RX-1].default_width = 8; > >> + fields[FIELD_VBD_RD-1].default_width = 8; > >> + fields[FIELD_VBD_WR-1].default_width = 8; > >> + fields[FIELD_VBD_RSECT-1].default_width = 10; > >> + fields[FIELD_VBD_WSECT-1].default_width = 10; > >> +} > >> + > >> +/* Adjusts default_width for fields with potentially large numbers */ > >> +void adjust_field_widths(xenstat_domain *domain) > >> +{ > >> + unsigned int length; > >> + > >> + length = (unsigned int)(log10(tot_net_bytes(domain, FALSE)/1024) + 1); > >> + if (length > fields[FIELD_NET_TX-1].default_width) > >> + fields[FIELD_NET_TX-1].default_width = length; > >> + > >> + length = (unsigned int)(log10(tot_net_bytes(domain, TRUE)/1024) + 1); > >> + if (length > fields[FIELD_NET_RX-1].default_width) > >> + fields[FIELD_NET_RX-1].default_width = length; > >> + > >> + length = (unsigned int)(log10(tot_vbd_reqs(domain, FIELD_VBD_RD)) + 1); > >> + if (length > fields[FIELD_VBD_RD-1].default_width) > >> + fields[FIELD_VBD_RD-1].default_width = length; > >> + > >> + length = (unsigned int)(log10(tot_vbd_reqs(domain, FIELD_VBD_WR)) + 1); > >> + if (length > fields[FIELD_VBD_WR-1].default_width) > >> + fields[FIELD_VBD_WR-1].default_width = length; > >> + > >> + length = (unsigned int)(log10(tot_vbd_reqs(domain, FIELD_VBD_RSECT)) + > >> 1); > >> + if (length > fields[FIELD_VBD_RSECT-1].default_width) > >> + fields[FIELD_VBD_RSECT-1].default_width = length; > >> + > >> + length = (unsigned int)(log10(tot_vbd_reqs(domain, FIELD_VBD_WSECT)) + > >> 1); > >> + if (length > fields[FIELD_VBD_WSECT-1].default_width) > >> + fields[FIELD_VBD_WSECT-1].default_width = length; > >> +} > >> + > >> + > >> /* Section printing functions */ > >> /* Prints the top summary, above the domain table */ > >> void do_summary(void) > >> @@ -1088,6 +1132,12 @@ static void top(void) > >> if(first_domain_index >= num_domains) > >> first_domain_index = num_domains-1; > >> > >> + /* Adjust default_width for fields with potentially large numbers */ > >> + reset_field_widths(); > >> + for (i = first_domain_index; i < num_domains; i++) { > >> + adjust_field_widths(domains[i]); > >> + } > >> + > >> for (i = first_domain_index; i < num_domains; i++) { > >> if(!batch && current_row() == lines()-1) > >> break; > >> > >> > >> _______________________________________________ > >> Xen-devel mailing list > >> Xen-devel@xxxxxxxxxxxxx > >> http://lists.xen.org/xen-devel > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxx > http://lists.xen.org/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |