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> --- 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 -- 2.20.1