[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.