Re: [PATCH] mountstats: Sort RPC statistics by operation count

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

 



Hey Chuck,

First of all, my apologies for taking so long to get to this... 
 
On 11/04/2014 05:14 PM, Chuck Lever wrote:
> Sort the RPC statistics in descending order by operation count, so
> that the most frequently executed operation appears at the top of
> the listing (a la `top`).
> 
> Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx>
> ---
> Hey folks-
> 
> Any opinions about this? I considered adding a "--sort" command line
> option to enable sorting, but instead made it always-on.
> 
> Could also use --sort to specify which individual statistic is used
> for sorting (op count, RTT, retransmit rate, and so forth).
This is an interesting idea... But let me get in Scott's patches
and then we can build from there... 
 
> 
> Try: watch -d "mountstats --rpc /mnt/your-mount-here"
I had better luck with watch -n 0 "mountstats --rpc /mnt/your-mount-here"
But the output looks much better... Nice work!

Committed... 

steved.

>  1 file changed, 14 insertions(+), 11 deletions(-)
> 
> diff --git a/tools/mountstats/mountstats.py b/tools/mountstats/mountstats.py
> index 9a6ec43..f75103c 100644
> --- a/tools/mountstats/mountstats.py
> +++ b/tools/mountstats/mountstats.py
> @@ -24,6 +24,7 @@ MA 02110-1301 USA
>  """
>  
>  import sys, os, time
> +from operator import itemgetter
>  
>  Mountstats_version = '0.2'
>  
> @@ -262,27 +263,29 @@ class DeviceData:
>          """
>          sends = self.__rpc_data['rpcsends']
>  
> -        # XXX: these should be sorted by 'count'
> -        print()
> +        allstats = []
>          for op in self.__rpc_data['ops']:
> -            stats = self.__rpc_data[op]
> -            count = stats[0]
> -            retrans = stats[1] - count
> +            allstats.append([op] + self.__rpc_data[op])
> +
> +        print()
> +        for stats in sorted(allstats, key=itemgetter(1), reverse=True):
> +            count = stats[1]
>              if count != 0:
> -                print('%s:' % op)
> +                print('%s:' % stats[0])
>                  print('\t%d ops (%d%%)' % \
>                      (count, ((count * 100) / sends)), end=' ')
> +                retrans = stats[2] - count
>                  if retrans != 0:
>                      print('\t%d retrans (%d%%)' % (retrans, ((retrans * 100) / count)), end=' ')
> -                    print('\t%d major timeouts' % stats[2])
> +                    print('\t%d major timeouts' % stats[3])
>                  else:
>                      print('')
>                  print('\tavg bytes sent per op: %d\tavg bytes received per op: %d' % \
> -                    (stats[3] / count, stats[4] / count))
> -                print('\tbacklog wait: %f' % (float(stats[5]) / count), end=' ')
> -                print('\tRTT: %f' % (float(stats[6]) / count), end=' ')
> +                    (stats[4] / count, stats[5] / count))
> +                print('\tbacklog wait: %f' % (float(stats[6]) / count), end=' ')
> +                print('\tRTT: %f' % (float(stats[7]) / count), end=' ')
>                  print('\ttotal execute time: %f (milliseconds)' % \
> -                    (float(stats[7]) / count))
> +                    (float(stats[8]) / count))
>  
>      def compare_iostats(self, old_stats):
>          """Return the difference between two sets of stats
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux