Message ID | 20190624211639.22511-2-dwysocha@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/2] nfsiostat: Add error counts to output when RPC iostats version >= 1.1 | expand |
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@redhat.com> 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 >
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
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@redhat.com> --- tools/mountstats/mountstats.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-)