X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=tools%2Fmountstats%2Fmountstats.py;h=b95b71d27ef3f43ff9d47bac3753e6b82ad08e90;hp=5f20db63f0f966f3f55f137e1e26a713c09905f9;hb=dbf4e0cb138e07700975f77d74c077ee11f2766a;hpb=c761709ad3abb9c36a68c269f78118bf49d79639 diff --git a/tools/mountstats/mountstats.py b/tools/mountstats/mountstats.py index 5f20db6..b95b71d 100644 --- a/tools/mountstats/mountstats.py +++ b/tools/mountstats/mountstats.py @@ -17,7 +17,8 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +MA 02110-1301 USA """ import sys, os, time @@ -45,6 +46,12 @@ class DeviceData: self.__nfs_data['fstype'] = words[7] if words[7].find('nfs') != -1: self.__nfs_data['statvers'] = words[8] + elif 'nfs' in words or 'nfs4' in words: + self.__nfs_data['export'] = words[0] + self.__nfs_data['mountpoint'] = words[3] + self.__nfs_data['fstype'] = words[6] + if words[6].find('nfs') != -1: + self.__nfs_data['statvers'] = words[7] elif words[0] == 'age:': self.__nfs_data['age'] = long(words[1]) elif words[0] == 'opts:': @@ -116,6 +123,26 @@ class DeviceData: self.__rpc_data['badxids'] = int(words[9]) self.__rpc_data['inflightsends'] = long(words[10]) self.__rpc_data['backlogutil'] = int(words[11]) + elif words[1] == 'rdma': + self.__rpc_data['port'] = words[2] + self.__rpc_data['bind_count'] = int(words[3]) + self.__rpc_data['connect_count'] = int(words[4]) + self.__rpc_data['connect_time'] = int(words[5]) + self.__rpc_data['idle_time'] = int(words[6]) + self.__rpc_data['rpcsends'] = int(words[7]) + self.__rpc_data['rpcreceives'] = int(words[8]) + self.__rpc_data['badxids'] = int(words[9]) + self.__rpc_data['backlogutil'] = int(words[10]) + self.__rpc_data['read_chunks'] = int(words[11]) + self.__rpc_data['write_chunks'] = int(words[12]) + self.__rpc_data['reply_chunks'] = int(words[13]) + self.__rpc_data['total_rdma_req'] = int(words[14]) + self.__rpc_data['total_rdma_rep'] = int(words[15]) + self.__rpc_data['pullup'] = int(words[16]) + self.__rpc_data['fixup'] = int(words[17]) + self.__rpc_data['hardway'] = int(words[18]) + self.__rpc_data['failed_marshal'] = int(words[19]) + self.__rpc_data['bad_reply'] = int(words[20]) elif words[0] == 'per-op': self.__rpc_data['per-op'] = words else: @@ -297,7 +324,7 @@ class DeviceData: else: print '\t0.00' - # reads: ops/s, Kb/s, avg rtt, and avg exe + # reads: ops/s, kB/s, avg rtt, and avg exe # XXX: include avg xfer size and retransmits? read_rpc_stats = self.__rpc_data['READ'] ops = float(read_rpc_stats[0]) @@ -305,7 +332,7 @@ class DeviceData: rtt = float(read_rpc_stats[6]) exe = float(read_rpc_stats[7]) - print '\treads:\tops/s\t\tKb/s\t\tavg RTT (ms)\tavg exe (ms)' + print '\treads:\tops/s\t\tkB/s\t\tavg RTT (ms)\tavg exe (ms)' print '\t\t%.2f' % (ops / sample_time), print '\t\t%.2f' % (kilobytes / sample_time), if ops != 0: @@ -315,7 +342,7 @@ class DeviceData: print '\t\t0.00', print '\t\t0.00' - # writes: ops/s, Kb/s, avg rtt, and avg exe + # writes: ops/s, kB/s, avg rtt, and avg exe # XXX: include avg xfer size and retransmits? write_rpc_stats = self.__rpc_data['WRITE'] ops = float(write_rpc_stats[0]) @@ -323,7 +350,7 @@ class DeviceData: rtt = float(write_rpc_stats[6]) exe = float(write_rpc_stats[7]) - print '\twrites:\tops/s\t\tKb/s\t\tavg RTT (ms)\tavg exe (ms)' + print '\twrites:\tops/s\t\tkB/s\t\tavg RTT (ms)\tavg exe (ms)' print '\t\t%.2f' % (ops / sample_time), print '\t\t%.2f' % (kilobytes / sample_time), if ops != 0: @@ -350,6 +377,9 @@ def parse_stats_file(filename): if words[0] == 'device': key = words[4] new = [ line.strip() ] + elif 'nfs' in words or 'nfs4' in words: + key = words[3] + new = [ line.strip() ] else: new += [ line.strip() ] ms_dict[key] = new