On 6/24/19 5:16 PM, Dave Wysochanski wrote: > With RPC iostats 1.1 there is a new metric which counts the RPCs > completing with errors (tk_status < 0). Add these to the output at > the end of the line. This increases the length of an output line > to 136 columns from 120, but keeps consistent format and spacing: > > read: ops/s kB/s kB/op retrans avg RTT (ms) avg exe (ms) avg queue (ms) errors > 0.000 0.106 512.316 0 (0.0%) 17.500 17.500 0.000 0 (0.0%) > write: ops/s kB/s kB/op retrans avg RTT (ms) avg exe (ms) avg queue (ms) errors > 0.001 0.476 512.398 0 (0.0%) 1.667 5.778 3.889 1 (11.1%) > > Signed-off-by: Dave Wysochanski <dwysocha@xxxxxxxxxx> Committed... steved. > --- > tools/mountstats/mountstats.py | 16 ++++++++++++++-- > 1 file changed, 14 insertions(+), 2 deletions(-) > > diff --git a/tools/mountstats/mountstats.py b/tools/mountstats/mountstats.py > index 2f525f4b..c5e8f506 100755 > --- a/tools/mountstats/mountstats.py > +++ b/tools/mountstats/mountstats.py > @@ -607,6 +607,8 @@ class DeviceData: > queued_for = float(rpc_stats[5]) > rtt = float(rpc_stats[6]) > exe = float(rpc_stats[7]) > + if len(rpc_stats) >= 9: > + errs = int(rpc_stats[8]) > > # prevent floating point exceptions > if ops != 0: > @@ -615,12 +617,15 @@ class DeviceData: > rtt_per_op = rtt / ops > exe_per_op = exe / ops > queued_for_per_op = queued_for / ops > + if len(rpc_stats) >= 9: > + errs_percent = (errs * 100) / ops > else: > kb_per_op = 0.0 > retrans_percent = 0.0 > rtt_per_op = 0.0 > exe_per_op = 0.0 > queued_for_per_op = 0.0 > + errs_percent = 0.0 > > op += ':' > print(format(op.lower(), '<16s'), end='') > @@ -630,7 +635,10 @@ class DeviceData: > print(format('retrans', '>16s'), end='') > print(format('avg RTT (ms)', '>16s'), end='') > print(format('avg exe (ms)', '>16s'), end='') > - print(format('avg queue (ms)', '>16s')) > + print(format('avg queue (ms)', '>16s'), end='') > + if len(rpc_stats) >= 9: > + print(format('errors', '>16s'), end='') > + print() > > print(format((ops / sample_time), '>24.3f'), end='') > print(format((kilobytes / sample_time), '>16.3f'), end='') > @@ -639,7 +647,11 @@ class DeviceData: > print(format(retransmits, '>16'), end='') > print(format(rtt_per_op, '>16.3f'), end='') > print(format(exe_per_op, '>16.3f'), end='') > - print(format(queued_for_per_op, '>16.3f')) > + print(format(queued_for_per_op, '>16.3f'), end='') > + if len(rpc_stats) >= 9: > + errors = '{0:>10.0f} ({1:>3.1f}%)'.format(errs, errs_percent).strip() > + print(format(errors, '>16'), end='') > + print() > > def display_iostats(self, sample_time): > """Display NFS and RPC stats in an iostat-like way >