[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] xentop: Dynamically expand some columns



>>> 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). 

- 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


 


Rackspace

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