Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp7032412ybi; Thu, 13 Jun 2019 08:26:42 -0700 (PDT) X-Google-Smtp-Source: APXvYqzGnmSKcDV9gs2UU1ofYofpJnhls1b+pLDa2+PP/6uG9pc6FGcz6zn1CgQ7c/MUtC3X+Tr7 X-Received: by 2002:a17:90a:3ae8:: with SMTP id b95mr6116344pjc.68.1560439602860; Thu, 13 Jun 2019 08:26:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1560439602; cv=none; d=google.com; s=arc-20160816; b=yRqdQiU9Wa7nPASzk/ARdNLykIv+ciqE8aAgf3nx6Tro8w31foxyaUSof5YzoHUhF5 CQkiYsR1cQxsj+gadGmp2/9IUTv1IMAhmlAnI8GKSbwW12rThK9GCxHvE1NSjgziAktK xIYQ0LpAsWbLq5M5Kq4V4tA3DU2S0IeVb8qd4hebKtBcUFrhzq6zxWp6a2wPPTubYGlP if9dqL0uiRwvyp0/aZRsBn9jrzS/4ak9oYXu9MxibLnivjyKpVonj9rvROAbg0GrwzXL v8J23dqbFkWL2eiPj1opNwkcdTgCZcentbEENCHZjx17Us808K9nlTqM0KegHst6EnKG fqtw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=ruRubz+hXxVwOi3wszDF70+AmwgT9JLjwrQcuqm05wY=; b=FpgFAVXo1GoLdXlvR4sj7MYb+AP4Tyi3HYbudF4XObAf+/Ikwm+4rnG5XLr+xWqANo mtNde3XRf2dBqmEb2lmMBUuPil2lK1CRB0B2k+RYTFcsx1nj5g1AQHZ3ajJwaeFhKf2U 0VyYy7aATBb/pwN64mc2O9RreMMd9BoOfggmmRWI/UDjCXQvwqU3kaS9HwbxhcwKUh9U HFliB9LUmDOs920aT38HNAVfSJ7Bxmc4YvCUo3JXTY/7cjcy4CwgY05mGrXZvejjUNx8 GhaqPyG/n6+ic54mhHc4YcbyHm9hniuwkqaZxBnZnqSom22m30wOWXVNTFHQvU9BrNT/ l6yQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-nfs-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l36si3399263plb.58.2019.06.13.08.26.28; Thu, 13 Jun 2019 08:26:42 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-nfs-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-nfs-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731584AbfFMPZV (ORCPT + 99 others); Thu, 13 Jun 2019 11:25:21 -0400 Received: from mx1.redhat.com ([209.132.183.28]:38612 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731556AbfFMMDQ (ORCPT ); Thu, 13 Jun 2019 08:03:16 -0400 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 31B06780EB; Thu, 13 Jun 2019 12:03:16 +0000 (UTC) Received: from f29-node1.dwysocha.net (dhcp145-42.rdu.redhat.com [10.13.145.42]) by smtp.corp.redhat.com (Postfix) with ESMTP id D31A71001B21; Thu, 13 Jun 2019 12:03:15 +0000 (UTC) From: Dave Wysochanski To: chuck.lever@oracle.com, SteveD@RedHat.com Cc: linux-nfs@vger.kernel.org Subject: [PATCHv2 1/3] nfsiostat: Add error counts to output when RPC iostats version >= 1.1 Date: Thu, 13 Jun 2019 08:03:12 -0400 Message-Id: <20190613120314.1864-1-dwysocha@redhat.com> In-Reply-To: <20190612190229.31811-1-dwysocha@redhat.com> References: <20190612190229.31811-1-dwysocha@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Thu, 13 Jun 2019 12:03:16 +0000 (UTC) Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org 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 --- tools/nfs-iostat/nfs-iostat.py | 15 +++++++++++++-- tools/nfs-iostat/nfsiostat.man | 8 ++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) mode change 100644 => 100755 tools/nfs-iostat/nfs-iostat.py diff --git a/tools/nfs-iostat/nfs-iostat.py b/tools/nfs-iostat/nfs-iostat.py old mode 100644 new mode 100755 index dec0e861..ef840efe --- a/tools/nfs-iostat/nfs-iostat.py +++ b/tools/nfs-iostat/nfs-iostat.py @@ -329,6 +329,8 @@ class DeviceData: queued_for = float(rpc_stats[5]) rtt = float(rpc_stats[6]) exe = float(rpc_stats[7]) + if self.__rpc_data['statsvers'] >= 1.1: + errs = float(rpc_stats[8]) # prevent floating point exceptions if ops != 0: @@ -337,6 +339,8 @@ class DeviceData: rtt_per_op = rtt / ops exe_per_op = exe / ops queued_for_per_op = queued_for / ops + if self.__rpc_data['statsvers'] >= 1.1: + errs_percent = (errs * 100) / ops else: kb_per_op = 0.0 retrans_percent = 0.0 @@ -352,7 +356,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 self.__rpc_data['statsvers'] >= 1.1: + print(format('errors', '>16s'), end='') + print() print(format((ops / sample_time), '>24.3f'), end='') print(format((kilobytes / sample_time), '>16.3f'), end='') @@ -361,7 +368,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 self.__rpc_data['statsvers'] >= 1.1: + errors = '{0:>10.0f} ({1:>3.1f}%)'.format(errs, errs_percent).strip() + print(format(errors, '>16'), end='') + print() def ops(self, sample_time): sends = float(self.__rpc_data['rpcsends']) diff --git a/tools/nfs-iostat/nfsiostat.man b/tools/nfs-iostat/nfsiostat.man index 9ae94c5f..940c0431 100644 --- a/tools/nfs-iostat/nfsiostat.man +++ b/tools/nfs-iostat/nfsiostat.man @@ -97,6 +97,14 @@ This is the duration from the time the NFS client created the RPC request task t .RE .RE .RE +.RS 8 +- \fBerrors\fR +.RS +This is the number of operations that completed with an error status (status < 0). This count is only available on kernels with RPC iostats version 1.1 or above. +.RS +.RE +.RE +.RE .TP Note that if an interval is used as argument to \fBnfsiostat\fR, then the diffrence from previous interval will be displayed, otherwise the results will be from the time that the share was mounted. -- 2.20.1