Message ID | 1379409678-15730-1-git-send-email-bkabrda@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Bohuslav Kabrda wrote: This will make mountstat and nfs-iostat run on Python 2.6, 2.7 and >= 3.0 Thanks! I looked at this once but was put off by all those prints. I know there's a conversion program but I've never used it. -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 17/09/13 05:21, Bohuslav Kabrda wrote: > This will make mountstat and nfs-iostat run on Python 2.6, 2.7 > and >= 3.0 > > Signed-off-by: Bohuslav Kabrda <bkabrda@redhat.com> Committed! steved. > --- > tools/mountstats/mountstats.py | 310 ++++++++++++++++++++--------------------- > tools/nfs-iostat/nfs-iostat.py | 22 +-- > 2 files changed, 166 insertions(+), 166 deletions(-) > > diff --git a/tools/mountstats/mountstats.py b/tools/mountstats/mountstats.py > index b95b71d..3f5fea5 100644 > --- a/tools/mountstats/mountstats.py > +++ b/tools/mountstats/mountstats.py > @@ -53,7 +53,7 @@ class DeviceData: > if words[6].find('nfs') != -1: > self.__nfs_data['statvers'] = words[7] > elif words[0] == 'age:': > - self.__nfs_data['age'] = long(words[1]) > + self.__nfs_data['age'] = int(words[1]) > elif words[0] == 'opts:': > self.__nfs_data['mountoptions'] = ''.join(words[1:]).split(',') > elif words[0] == 'caps:': > @@ -91,12 +91,12 @@ class DeviceData: > self.__nfs_data['shortwrites'] = int(words[22]) > self.__nfs_data['delay'] = int(words[23]) > elif words[0] == 'bytes:': > - self.__nfs_data['normalreadbytes'] = long(words[1]) > - self.__nfs_data['normalwritebytes'] = long(words[2]) > - self.__nfs_data['directreadbytes'] = long(words[3]) > - self.__nfs_data['directwritebytes'] = long(words[4]) > - self.__nfs_data['serverreadbytes'] = long(words[5]) > - self.__nfs_data['serverwritebytes'] = long(words[6]) > + self.__nfs_data['normalreadbytes'] = int(words[1]) > + self.__nfs_data['normalwritebytes'] = int(words[2]) > + self.__nfs_data['directreadbytes'] = int(words[3]) > + self.__nfs_data['directwritebytes'] = int(words[4]) > + self.__nfs_data['serverreadbytes'] = int(words[5]) > + self.__nfs_data['serverwritebytes'] = int(words[6]) > > def __parse_rpc_line(self, words): > if words[0] == 'RPC': > @@ -110,8 +110,8 @@ class DeviceData: > self.__rpc_data['rpcsends'] = int(words[4]) > self.__rpc_data['rpcreceives'] = int(words[5]) > self.__rpc_data['badxids'] = int(words[6]) > - self.__rpc_data['inflightsends'] = long(words[7]) > - self.__rpc_data['backlogutil'] = long(words[8]) > + self.__rpc_data['inflightsends'] = int(words[7]) > + self.__rpc_data['backlogutil'] = int(words[8]) > elif words[1] == 'tcp': > self.__rpc_data['port'] = words[2] > self.__rpc_data['bind_count'] = int(words[3]) > @@ -121,7 +121,7 @@ class DeviceData: > self.__rpc_data['rpcsends'] = int(words[7]) > self.__rpc_data['rpcreceives'] = int(words[8]) > self.__rpc_data['badxids'] = int(words[9]) > - self.__rpc_data['inflightsends'] = long(words[10]) > + self.__rpc_data['inflightsends'] = int(words[10]) > self.__rpc_data['backlogutil'] = int(words[11]) > elif words[1] == 'rdma': > self.__rpc_data['port'] = words[2] > @@ -148,7 +148,7 @@ class DeviceData: > else: > op = words[0][:-1] > self.__rpc_data['ops'] += [op] > - self.__rpc_data[op] = [long(word) for word in words[1:]] > + self.__rpc_data[op] = [int(word) for word in words[1:]] > > def parse_stats(self, lines): > """Turn a list of lines from a mount stat file into a > @@ -179,81 +179,81 @@ class DeviceData: > def display_nfs_options(self): > """Pretty-print the NFS options > """ > - print 'Stats for %s mounted on %s:' % \ > - (self.__nfs_data['export'], self.__nfs_data['mountpoint']) > - > - print ' NFS mount options: %s' % ','.join(self.__nfs_data['mountoptions']) > - print ' NFS server capabilities: %s' % ','.join(self.__nfs_data['servercapabilities']) > - if self.__nfs_data.has_key('nfsv4flags'): > - print ' NFSv4 capability flags: %s' % ','.join(self.__nfs_data['nfsv4flags']) > - if self.__nfs_data.has_key('pseudoflavor'): > - print ' NFS security flavor: %d pseudoflavor: %d' % \ > - (self.__nfs_data['flavor'], self.__nfs_data['pseudoflavor']) > + print('Stats for %s mounted on %s:' % \ > + (self.__nfs_data['export'], self.__nfs_data['mountpoint'])) > + > + print(' NFS mount options: %s' % ','.join(self.__nfs_data['mountoptions'])) > + print(' NFS server capabilities: %s' % ','.join(self.__nfs_data['servercapabilities'])) > + if 'nfsv4flags' in self.__nfs_data: > + print(' NFSv4 capability flags: %s' % ','.join(self.__nfs_data['nfsv4flags'])) > + if 'pseudoflavor' in self.__nfs_data: > + print(' NFS security flavor: %d pseudoflavor: %d' % \ > + (self.__nfs_data['flavor'], self.__nfs_data['pseudoflavor'])) > else: > - print ' NFS security flavor: %d' % self.__nfs_data['flavor'] > + print(' NFS security flavor: %d' % self.__nfs_data['flavor']) > > def display_nfs_events(self): > """Pretty-print the NFS event counters > """ > - print > - print 'Cache events:' > - print ' data cache invalidated %d times' % self.__nfs_data['datainvalidates'] > - print ' attribute cache invalidated %d times' % self.__nfs_data['attrinvalidates'] > - print ' inodes synced %d times' % self.__nfs_data['syncinodes'] > - print > - print 'VFS calls:' > - print ' VFS requested %d inode revalidations' % self.__nfs_data['inoderevalidates'] > - print ' VFS requested %d dentry revalidations' % self.__nfs_data['dentryrevalidates'] > - print > - print ' VFS called nfs_readdir() %d times' % self.__nfs_data['vfsreaddir'] > - print ' VFS called nfs_lookup() %d times' % self.__nfs_data['vfslookup'] > - print ' VFS called nfs_permission() %d times' % self.__nfs_data['vfspermission'] > - print ' VFS called nfs_file_open() %d times' % self.__nfs_data['vfsopen'] > - print ' VFS called nfs_file_flush() %d times' % self.__nfs_data['vfsflush'] > - print ' VFS called nfs_lock() %d times' % self.__nfs_data['vfslock'] > - print ' VFS called nfs_fsync() %d times' % self.__nfs_data['vfsfsync'] > - print ' VFS called nfs_file_release() %d times' % self.__nfs_data['vfsrelease'] > - print > - print 'VM calls:' > - print ' VFS called nfs_readpage() %d times' % self.__nfs_data['vfsreadpage'] > - print ' VFS called nfs_readpages() %d times' % self.__nfs_data['vfsreadpages'] > - print ' VFS called nfs_writepage() %d times' % self.__nfs_data['vfswritepage'] > - print ' VFS called nfs_writepages() %d times' % self.__nfs_data['vfswritepages'] > - print > - print 'Generic NFS counters:' > - print ' File size changing operations:' > - print ' truncating SETATTRs: %d extending WRITEs: %d' % \ > - (self.__nfs_data['setattrtrunc'], self.__nfs_data['extendwrite']) > - print ' %d silly renames' % self.__nfs_data['sillyrenames'] > - print ' short reads: %d short writes: %d' % \ > - (self.__nfs_data['shortreads'], self.__nfs_data['shortwrites']) > - print ' NFSERR_DELAYs from server: %d' % self.__nfs_data['delay'] > + print() > + print('Cache events:') > + print(' data cache invalidated %d times' % self.__nfs_data['datainvalidates']) > + print(' attribute cache invalidated %d times' % self.__nfs_data['attrinvalidates']) > + print(' inodes synced %d times' % self.__nfs_data['syncinodes']) > + print() > + print('VFS calls:') > + print(' VFS requested %d inode revalidations' % self.__nfs_data['inoderevalidates']) > + print(' VFS requested %d dentry revalidations' % self.__nfs_data['dentryrevalidates']) > + print() > + print(' VFS called nfs_readdir() %d times' % self.__nfs_data['vfsreaddir']) > + print(' VFS called nfs_lookup() %d times' % self.__nfs_data['vfslookup']) > + print(' VFS called nfs_permission() %d times' % self.__nfs_data['vfspermission']) > + print(' VFS called nfs_file_open() %d times' % self.__nfs_data['vfsopen']) > + print(' VFS called nfs_file_flush() %d times' % self.__nfs_data['vfsflush']) > + print(' VFS called nfs_lock() %d times' % self.__nfs_data['vfslock']) > + print(' VFS called nfs_fsync() %d times' % self.__nfs_data['vfsfsync']) > + print(' VFS called nfs_file_release() %d times' % self.__nfs_data['vfsrelease']) > + print() > + print('VM calls:') > + print(' VFS called nfs_readpage() %d times' % self.__nfs_data['vfsreadpage']) > + print(' VFS called nfs_readpages() %d times' % self.__nfs_data['vfsreadpages']) > + print(' VFS called nfs_writepage() %d times' % self.__nfs_data['vfswritepage']) > + print(' VFS called nfs_writepages() %d times' % self.__nfs_data['vfswritepages']) > + print() > + print('Generic NFS counters:') > + print(' File size changing operations:') > + print(' truncating SETATTRs: %d extending WRITEs: %d' % \ > + (self.__nfs_data['setattrtrunc'], self.__nfs_data['extendwrite'])) > + print(' %d silly renames' % self.__nfs_data['sillyrenames']) > + print(' short reads: %d short writes: %d' % \ > + (self.__nfs_data['shortreads'], self.__nfs_data['shortwrites'])) > + print(' NFSERR_DELAYs from server: %d' % self.__nfs_data['delay']) > > def display_nfs_bytes(self): > """Pretty-print the NFS event counters > """ > - print > - print 'NFS byte counts:' > - print ' applications read %d bytes via read(2)' % self.__nfs_data['normalreadbytes'] > - print ' applications wrote %d bytes via write(2)' % self.__nfs_data['normalwritebytes'] > - print ' applications read %d bytes via O_DIRECT read(2)' % self.__nfs_data['directreadbytes'] > - print ' applications wrote %d bytes via O_DIRECT write(2)' % self.__nfs_data['directwritebytes'] > - print ' client read %d bytes via NFS READ' % self.__nfs_data['serverreadbytes'] > - print ' client wrote %d bytes via NFS WRITE' % self.__nfs_data['serverwritebytes'] > + print() > + print('NFS byte counts:') > + print(' applications read %d bytes via read(2)' % self.__nfs_data['normalreadbytes']) > + print(' applications wrote %d bytes via write(2)' % self.__nfs_data['normalwritebytes']) > + print(' applications read %d bytes via O_DIRECT read(2)' % self.__nfs_data['directreadbytes']) > + print(' applications wrote %d bytes via O_DIRECT write(2)' % self.__nfs_data['directwritebytes']) > + print(' client read %d bytes via NFS READ' % self.__nfs_data['serverreadbytes']) > + print(' client wrote %d bytes via NFS WRITE' % self.__nfs_data['serverwritebytes']) > > def display_rpc_generic_stats(self): > """Pretty-print the generic RPC stats > """ > sends = self.__rpc_data['rpcsends'] > > - print > - print 'RPC statistics:' > + print() > + print('RPC statistics:') > > - print ' %d RPC requests sent, %d RPC replies received (%d XIDs not found)' % \ > - (sends, self.__rpc_data['rpcreceives'], self.__rpc_data['badxids']) > + print(' %d RPC requests sent, %d RPC replies received (%d XIDs not found)' % \ > + (sends, self.__rpc_data['rpcreceives'], self.__rpc_data['badxids'])) > if sends != 0: > - print ' average backlog queue length: %d' % \ > - (float(self.__rpc_data['backlogutil']) / sends) > + print(' average backlog queue length: %d' % \ > + (float(self.__rpc_data['backlogutil']) / sends)) > > def display_rpc_op_stats(self): > """Pretty-print the per-op stats > @@ -261,23 +261,23 @@ class DeviceData: > sends = self.__rpc_data['rpcsends'] > > # XXX: these should be sorted by 'count' > - print > + print() > for op in self.__rpc_data['ops']: > stats = self.__rpc_data[op] > count = stats[0] > retrans = stats[1] - count > if count != 0: > - print '%s:' % op > - print '\t%d ops (%d%%)' % \ > - (count, ((count * 100) / sends)), > - print '\t%d retrans (%d%%)' % (retrans, ((retrans * 100) / count)), > - print '\t%d major timeouts' % stats[2] > - print '\tavg bytes sent per op: %d\tavg bytes received per op: %d' % \ > - (stats[3] / count, stats[4] / count) > - print '\tbacklog wait: %f' % (float(stats[5]) / count), > - print '\tRTT: %f' % (float(stats[6]) / count), > - print '\ttotal execute time: %f (milliseconds)' % \ > - (float(stats[7]) / count) > + print('%s:' % op) > + print('\t%d ops (%d%%)' % \ > + (count, ((count * 100) / sends)), end=' ') > + print('\t%d retrans (%d%%)' % (retrans, ((retrans * 100) / count)), end=' ') > + print('\t%d major timeouts' % stats[2]) > + print('\tavg bytes sent per op: %d\tavg bytes received per op: %d' % \ > + (stats[3] / count, stats[4] / count)) > + print('\tbacklog wait: %f' % (float(stats[5]) / count), end=' ') > + print('\tRTT: %f' % (float(stats[6]) / count), end=' ') > + print('\ttotal execute time: %f (milliseconds)' % \ > + (float(stats[7]) / count)) > > def compare_iostats(self, old_stats): > """Return the difference between two sets of stats > @@ -285,9 +285,9 @@ class DeviceData: > result = DeviceData() > > # copy self into result > - for key, value in self.__nfs_data.iteritems(): > + for key, value in self.__nfs_data.items(): > result.__nfs_data[key] = value > - for key, value in self.__rpc_data.iteritems(): > + for key, value in self.__rpc_data.items(): > result.__rpc_data[key] = value > > # compute the difference of each item in the list > @@ -295,7 +295,7 @@ class DeviceData: > # the reference to them. so we build new lists here > # for the result object. > for op in result.__rpc_data['ops']: > - result.__rpc_data[op] = map(difference, self.__rpc_data[op], old_stats.__rpc_data[op]) > + result.__rpc_data[op] = list(map(difference, self.__rpc_data[op], old_stats.__rpc_data[op])) > > # update the remaining keys we care about > result.__rpc_data['rpcsends'] -= old_stats.__rpc_data['rpcsends'] > @@ -312,17 +312,17 @@ class DeviceData: > if sample_time == 0: > sample_time = float(self.__nfs_data['age']) > > - print > - print '%s mounted on %s:' % \ > - (self.__nfs_data['export'], self.__nfs_data['mountpoint']) > + print() > + print('%s mounted on %s:' % \ > + (self.__nfs_data['export'], self.__nfs_data['mountpoint'])) > > - print '\top/s\trpc bklog' > - print '\t%.2f' % (sends / sample_time), > + print('\top/s\trpc bklog') > + print('\t%.2f' % (sends / sample_time), end=' ') > if sends != 0: > - print '\t%.2f' % \ > - ((float(self.__rpc_data['backlogutil']) / sends) / sample_time) > + print('\t%.2f' % \ > + ((float(self.__rpc_data['backlogutil']) / sends) / sample_time)) > else: > - print '\t0.00' > + print('\t0.00') > > # reads: ops/s, kB/s, avg rtt, and avg exe > # XXX: include avg xfer size and retransmits? > @@ -332,15 +332,15 @@ 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 '\t\t%.2f' % (ops / sample_time), > - print '\t\t%.2f' % (kilobytes / sample_time), > + print('\treads:\tops/s\t\tkB/s\t\tavg RTT (ms)\tavg exe (ms)') > + print('\t\t%.2f' % (ops / sample_time), end=' ') > + print('\t\t%.2f' % (kilobytes / sample_time), end=' ') > if ops != 0: > - print '\t\t%.2f' % (rtt / ops), > - print '\t\t%.2f' % (exe / ops) > + print('\t\t%.2f' % (rtt / ops), end=' ') > + print('\t\t%.2f' % (exe / ops)) > else: > - print '\t\t0.00', > - print '\t\t0.00' > + print('\t\t0.00', end=' ') > + print('\t\t0.00') > > # writes: ops/s, kB/s, avg rtt, and avg exe > # XXX: include avg xfer size and retransmits? > @@ -350,15 +350,15 @@ 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 '\t\t%.2f' % (ops / sample_time), > - print '\t\t%.2f' % (kilobytes / sample_time), > + print('\twrites:\tops/s\t\tkB/s\t\tavg RTT (ms)\tavg exe (ms)') > + print('\t\t%.2f' % (ops / sample_time), end=' ') > + print('\t\t%.2f' % (kilobytes / sample_time), end=' ') > if ops != 0: > - print '\t\t%.2f' % (rtt / ops), > - print '\t\t%.2f' % (exe / ops) > + print('\t\t%.2f' % (rtt / ops), end=' ') > + print('\t\t%.2f' % (exe / ops)) > else: > - print '\t\t0.00', > - print '\t\t0.00' > + print('\t\t0.00', end=' ') > + print('\t\t0.00') > > def parse_stats_file(filename): > """pop the contents of a mountstats file into a dictionary, > @@ -388,18 +388,18 @@ def parse_stats_file(filename): > return ms_dict > > def print_mountstats_help(name): > - print 'usage: %s [ options ] <mount point>' % name > - print > - print ' Version %s' % Mountstats_version > - print > - print ' Display NFS client per-mount statistics.' > - print > - print ' --version display the version of this command' > - print ' --nfs display only the NFS statistics' > - print ' --rpc display only the RPC statistics' > - print ' --start sample and save statistics' > - print ' --end resample statistics and compare them with saved' > - print > + print('usage: %s [ options ] <mount point>' % name) > + print() > + print(' Version %s' % Mountstats_version) > + print() > + print(' Display NFS client per-mount statistics.') > + print() > + print(' --version display the version of this command') > + print(' --nfs display only the NFS statistics') > + print(' --rpc display only the RPC statistics') > + print(' --start sample and save statistics') > + print(' --end resample statistics and compare them with saved') > + print() > > def mountstats_command(): > """Mountstats command > @@ -414,7 +414,7 @@ def mountstats_command(): > return > > if arg in ['-v', '--version', 'version']: > - print '%s version %s' % (sys.argv[0], Mountstats_version) > + print('%s version %s' % (sys.argv[0], Mountstats_version)) > sys.exit(0) > > if arg in ['-n', '--nfs']: > @@ -426,10 +426,10 @@ def mountstats_command(): > continue > > if arg in ['-s', '--start']: > - raise Exception, 'Sampling is not yet implemented' > + raise Exception('Sampling is not yet implemented') > > if arg in ['-e', '--end']: > - raise Exception, 'Sampling is not yet implemented' > + raise Exception('Sampling is not yet implemented') > > if arg == sys.argv[0]: > continue > @@ -448,14 +448,14 @@ def mountstats_command(): > > for mp in mountpoints: > if mp not in mountstats: > - print 'Statistics for mount point %s not found' % mp > + print('Statistics for mount point %s not found' % mp) > continue > > stats = DeviceData() > stats.parse_stats(mountstats[mp]) > > if not stats.is_nfs_mountpoint(): > - print 'Mount point %s exists but is not an NFS mount' % mp > + print('Mount point %s exists but is not an NFS mount' % mp) > continue > > if nfs_only: > @@ -472,37 +472,37 @@ def mountstats_command(): > stats.display_rpc_op_stats() > > def print_nfsstat_help(name): > - print 'usage: %s [ options ]' % name > - print > - print ' Version %s' % Mountstats_version > - print > - print ' nfsstat-like program that uses NFS client per-mount statistics.' > - print > + print('usage: %s [ options ]' % name) > + print() > + print(' Version %s' % Mountstats_version) > + print() > + print(' nfsstat-like program that uses NFS client per-mount statistics.') > + print() > > def nfsstat_command(): > print_nfsstat_help(prog) > > def print_iostat_help(name): > - print 'usage: %s [ <interval> [ <count> ] ] [ <mount point> ] ' % name > - print > - print ' Version %s' % Mountstats_version > - print > - print ' iostat-like program to display NFS client per-mount statistics.' > - print > - print ' The <interval> parameter specifies the amount of time in seconds between' > - print ' each report. The first report contains statistics for the time since each' > - print ' file system was mounted. Each subsequent report contains statistics' > - print ' collected during the interval since the previous report.' > - print > - print ' If the <count> parameter is specified, the value of <count> determines the' > - print ' number of reports generated at <interval> seconds apart. If the interval' > - print ' parameter is specified without the <count> parameter, the command generates' > - print ' reports continuously.' > - print > - print ' If one or more <mount point> names are specified, statistics for only these' > - print ' mount points will be displayed. Otherwise, all NFS mount points on the' > - print ' client are listed.' > - print > + print('usage: %s [ <interval> [ <count> ] ] [ <mount point> ] ' % name) > + print() > + print(' Version %s' % Mountstats_version) > + print() > + print(' iostat-like program to display NFS client per-mount statistics.') > + print() > + print(' The <interval> parameter specifies the amount of time in seconds between') > + print(' each report. The first report contains statistics for the time since each') > + print(' file system was mounted. Each subsequent report contains statistics') > + print(' collected during the interval since the previous report.') > + print() > + print(' If the <count> parameter is specified, the value of <count> determines the') > + print(' number of reports generated at <interval> seconds apart. If the interval') > + print(' parameter is specified without the <count> parameter, the command generates') > + print(' reports continuously.') > + print() > + print(' If one or more <mount point> names are specified, statistics for only these') > + print(' mount points will be displayed. Otherwise, all NFS mount points on the') > + print(' client are listed.') > + print() > > def print_iostat_summary(old, new, devices, time): > for device in devices: > @@ -530,7 +530,7 @@ def iostat_command(): > return > > if arg in ['-v', '--version', 'version']: > - print '%s version %s' % (sys.argv[0], Mountstats_version) > + print('%s version %s' % (sys.argv[0], Mountstats_version)) > return > > if arg == sys.argv[0]: > @@ -543,14 +543,14 @@ def iostat_command(): > if interval > 0: > interval_seen = True > else: > - print 'Illegal <interval> value' > + print('Illegal <interval> value') > return > elif not count_seen: > count = int(arg) > if count > 0: > count_seen = True > else: > - print 'Illegal <count> value' > + print('Illegal <count> value') > return > > # make certain devices contains only NFS mount points > @@ -563,13 +563,13 @@ def iostat_command(): > check += [device] > devices = check > else: > - for device, descr in mountstats.iteritems(): > + for device, descr in mountstats.items(): > stats = DeviceData() > stats.parse_stats(descr) > if stats.is_nfs_mountpoint(): > devices += [device] > if len(devices) == 0: > - print 'No NFS mount points were found' > + print('No NFS mount points were found') > return > > old_mountstats = None > @@ -608,7 +608,7 @@ try: > elif prog == 'ms-iostat': > iostat_command() > except KeyboardInterrupt: > - print 'Caught ^C... exiting' > + print('Caught ^C... exiting') > sys.exit(1) > > sys.exit(0) > diff --git a/tools/nfs-iostat/nfs-iostat.py b/tools/nfs-iostat/nfs-iostat.py > index c035537..1c523f9 100644 > --- a/tools/nfs-iostat/nfs-iostat.py > +++ b/tools/nfs-iostat/nfs-iostat.py > @@ -95,7 +95,7 @@ class DeviceData: > if words[6] == 'nfs': > self.__nfs_data['statvers'] = words[7] > elif words[0] == 'age:': > - self.__nfs_data['age'] = long(words[1]) > + self.__nfs_data['age'] = int(words[1]) > elif words[0] == 'opts:': > self.__nfs_data['mountoptions'] = ''.join(words[1:]).split(',') > elif words[0] == 'caps:': > @@ -116,7 +116,7 @@ class DeviceData: > elif words[0] == 'bytes:': > i = 1 > for key in NfsByteCounters: > - self.__nfs_data[key] = long(words[i]) > + self.__nfs_data[key] = int(words[i]) > i += 1 > > def __parse_rpc_line(self, words): > @@ -131,8 +131,8 @@ class DeviceData: > self.__rpc_data['rpcsends'] = int(words[4]) > self.__rpc_data['rpcreceives'] = int(words[5]) > self.__rpc_data['badxids'] = int(words[6]) > - self.__rpc_data['inflightsends'] = long(words[7]) > - self.__rpc_data['backlogutil'] = long(words[8]) > + self.__rpc_data['inflightsends'] = int(words[7]) > + self.__rpc_data['backlogutil'] = int(words[8]) > elif words[1] == 'tcp': > self.__rpc_data['port'] = words[2] > self.__rpc_data['bind_count'] = int(words[3]) > @@ -142,8 +142,8 @@ class DeviceData: > self.__rpc_data['rpcsends'] = int(words[7]) > self.__rpc_data['rpcreceives'] = int(words[8]) > self.__rpc_data['badxids'] = int(words[9]) > - self.__rpc_data['inflightsends'] = long(words[10]) > - self.__rpc_data['backlogutil'] = long(words[11]) > + self.__rpc_data['inflightsends'] = int(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]) > @@ -169,7 +169,7 @@ class DeviceData: > else: > op = words[0][:-1] > self.__rpc_data['ops'] += [op] > - self.__rpc_data[op] = [long(word) for word in words[1:]] > + self.__rpc_data[op] = [int(word) for word in words[1:]] > > def parse_stats(self, lines): > """Turn a list of lines from a mount stat file into a > @@ -271,7 +271,7 @@ class DeviceData: > nfs_stats = self.__nfs_data > lookup_ops = self.__rpc_data['LOOKUP'][0] > readdir_ops = self.__rpc_data['READDIR'][0] > - if self.__rpc_data.has_key('READDIRPLUS'): > + if 'READDIRPLUS' in self.__rpc_data: > readdir_ops += self.__rpc_data['READDIRPLUS'][0] > > dentry_revals = nfs_stats['dentryrevalidates'] > @@ -330,7 +330,7 @@ class DeviceData: > def __print_rpc_op_stats(self, op, sample_time): > """Print generic stats for one RPC op > """ > - if not self.__rpc_data.has_key(op): > + if op not in self.__rpc_data: > return > > rpc_stats = self.__rpc_data[op] > @@ -405,7 +405,7 @@ class DeviceData: > elif which == 2: > self.__print_rpc_op_stats('LOOKUP', sample_time) > self.__print_rpc_op_stats('READDIR', sample_time) > - if self.__rpc_data.has_key('READDIRPLUS'): > + if 'READDIRPLUS' in self.__rpc_data: > self.__print_rpc_op_stats('READDIRPLUS', sample_time) > self.__print_dir_cache_stats(sample_time) > elif which == 3: > @@ -450,7 +450,7 @@ def print_iostat_summary(old, new, devices, time, options): > if old: > # Trim device list to only include intersection of old and new data, > # this addresses umounts due to autofs mountpoints > - devicelist = filter(lambda x:x in devices,old) > + devicelist = [x for x in old if x in devices] > else: > devicelist = devices > > -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
This just made it into f19 and it doesn't work for me: $ mountstats /mnt File "/usr/sbin/mountstats", line 272 (count, ((count * 100) / sends)), end=' ') ^ SyntaxError: invalid syntax $ python Python 2.7.5 (default, Oct 8 2013, 12:19:40) [GCC 4.8.1 20130603 (Red Hat 4.8.1-1)] on linux2 I think mountstats needs this line at the top of the file: from __future__ import print_function At least until python3 is the default on fedora. -dros On Sep 18, 2013, at 3:16 PM, Steve Dickson <SteveD@redhat.com> wrote: > > > On 17/09/13 05:21, Bohuslav Kabrda wrote: >> This will make mountstat and nfs-iostat run on Python 2.6, 2.7 >> and >= 3.0 >> >> Signed-off-by: Bohuslav Kabrda <bkabrda@redhat.com> > Committed! > > steved. > >> --- >> tools/mountstats/mountstats.py | 310 ++++++++++++++++++++--------------------- >> tools/nfs-iostat/nfs-iostat.py | 22 +-- >> 2 files changed, 166 insertions(+), 166 deletions(-) >> >> diff --git a/tools/mountstats/mountstats.py b/tools/mountstats/mountstats.py >> index b95b71d..3f5fea5 100644 >> --- a/tools/mountstats/mountstats.py >> +++ b/tools/mountstats/mountstats.py >> @@ -53,7 +53,7 @@ class DeviceData: >> if words[6].find('nfs') != -1: >> self.__nfs_data['statvers'] = words[7] >> elif words[0] == 'age:': >> - self.__nfs_data['age'] = long(words[1]) >> + self.__nfs_data['age'] = int(words[1]) >> elif words[0] == 'opts:': >> self.__nfs_data['mountoptions'] = ''.join(words[1:]).split(',') >> elif words[0] == 'caps:': >> @@ -91,12 +91,12 @@ class DeviceData: >> self.__nfs_data['shortwrites'] = int(words[22]) >> self.__nfs_data['delay'] = int(words[23]) >> elif words[0] == 'bytes:': >> - self.__nfs_data['normalreadbytes'] = long(words[1]) >> - self.__nfs_data['normalwritebytes'] = long(words[2]) >> - self.__nfs_data['directreadbytes'] = long(words[3]) >> - self.__nfs_data['directwritebytes'] = long(words[4]) >> - self.__nfs_data['serverreadbytes'] = long(words[5]) >> - self.__nfs_data['serverwritebytes'] = long(words[6]) >> + self.__nfs_data['normalreadbytes'] = int(words[1]) >> + self.__nfs_data['normalwritebytes'] = int(words[2]) >> + self.__nfs_data['directreadbytes'] = int(words[3]) >> + self.__nfs_data['directwritebytes'] = int(words[4]) >> + self.__nfs_data['serverreadbytes'] = int(words[5]) >> + self.__nfs_data['serverwritebytes'] = int(words[6]) >> >> def __parse_rpc_line(self, words): >> if words[0] == 'RPC': >> @@ -110,8 +110,8 @@ class DeviceData: >> self.__rpc_data['rpcsends'] = int(words[4]) >> self.__rpc_data['rpcreceives'] = int(words[5]) >> self.__rpc_data['badxids'] = int(words[6]) >> - self.__rpc_data['inflightsends'] = long(words[7]) >> - self.__rpc_data['backlogutil'] = long(words[8]) >> + self.__rpc_data['inflightsends'] = int(words[7]) >> + self.__rpc_data['backlogutil'] = int(words[8]) >> elif words[1] == 'tcp': >> self.__rpc_data['port'] = words[2] >> self.__rpc_data['bind_count'] = int(words[3]) >> @@ -121,7 +121,7 @@ class DeviceData: >> self.__rpc_data['rpcsends'] = int(words[7]) >> self.__rpc_data['rpcreceives'] = int(words[8]) >> self.__rpc_data['badxids'] = int(words[9]) >> - self.__rpc_data['inflightsends'] = long(words[10]) >> + self.__rpc_data['inflightsends'] = int(words[10]) >> self.__rpc_data['backlogutil'] = int(words[11]) >> elif words[1] == 'rdma': >> self.__rpc_data['port'] = words[2] >> @@ -148,7 +148,7 @@ class DeviceData: >> else: >> op = words[0][:-1] >> self.__rpc_data['ops'] += [op] >> - self.__rpc_data[op] = [long(word) for word in words[1:]] >> + self.__rpc_data[op] = [int(word) for word in words[1:]] >> >> def parse_stats(self, lines): >> """Turn a list of lines from a mount stat file into a >> @@ -179,81 +179,81 @@ class DeviceData: >> def display_nfs_options(self): >> """Pretty-print the NFS options >> """ >> - print 'Stats for %s mounted on %s:' % \ >> - (self.__nfs_data['export'], self.__nfs_data['mountpoint']) >> - >> - print ' NFS mount options: %s' % ','.join(self.__nfs_data['mountoptions']) >> - print ' NFS server capabilities: %s' % ','.join(self.__nfs_data['servercapabilities']) >> - if self.__nfs_data.has_key('nfsv4flags'): >> - print ' NFSv4 capability flags: %s' % ','.join(self.__nfs_data['nfsv4flags']) >> - if self.__nfs_data.has_key('pseudoflavor'): >> - print ' NFS security flavor: %d pseudoflavor: %d' % \ >> - (self.__nfs_data['flavor'], self.__nfs_data['pseudoflavor']) >> + print('Stats for %s mounted on %s:' % \ >> + (self.__nfs_data['export'], self.__nfs_data['mountpoint'])) >> + >> + print(' NFS mount options: %s' % ','.join(self.__nfs_data['mountoptions'])) >> + print(' NFS server capabilities: %s' % ','.join(self.__nfs_data['servercapabilities'])) >> + if 'nfsv4flags' in self.__nfs_data: >> + print(' NFSv4 capability flags: %s' % ','.join(self.__nfs_data['nfsv4flags'])) >> + if 'pseudoflavor' in self.__nfs_data: >> + print(' NFS security flavor: %d pseudoflavor: %d' % \ >> + (self.__nfs_data['flavor'], self.__nfs_data['pseudoflavor'])) >> else: >> - print ' NFS security flavor: %d' % self.__nfs_data['flavor'] >> + print(' NFS security flavor: %d' % self.__nfs_data['flavor']) >> >> def display_nfs_events(self): >> """Pretty-print the NFS event counters >> """ >> - print >> - print 'Cache events:' >> - print ' data cache invalidated %d times' % self.__nfs_data['datainvalidates'] >> - print ' attribute cache invalidated %d times' % self.__nfs_data['attrinvalidates'] >> - print ' inodes synced %d times' % self.__nfs_data['syncinodes'] >> - print >> - print 'VFS calls:' >> - print ' VFS requested %d inode revalidations' % self.__nfs_data['inoderevalidates'] >> - print ' VFS requested %d dentry revalidations' % self.__nfs_data['dentryrevalidates'] >> - print >> - print ' VFS called nfs_readdir() %d times' % self.__nfs_data['vfsreaddir'] >> - print ' VFS called nfs_lookup() %d times' % self.__nfs_data['vfslookup'] >> - print ' VFS called nfs_permission() %d times' % self.__nfs_data['vfspermission'] >> - print ' VFS called nfs_file_open() %d times' % self.__nfs_data['vfsopen'] >> - print ' VFS called nfs_file_flush() %d times' % self.__nfs_data['vfsflush'] >> - print ' VFS called nfs_lock() %d times' % self.__nfs_data['vfslock'] >> - print ' VFS called nfs_fsync() %d times' % self.__nfs_data['vfsfsync'] >> - print ' VFS called nfs_file_release() %d times' % self.__nfs_data['vfsrelease'] >> - print >> - print 'VM calls:' >> - print ' VFS called nfs_readpage() %d times' % self.__nfs_data['vfsreadpage'] >> - print ' VFS called nfs_readpages() %d times' % self.__nfs_data['vfsreadpages'] >> - print ' VFS called nfs_writepage() %d times' % self.__nfs_data['vfswritepage'] >> - print ' VFS called nfs_writepages() %d times' % self.__nfs_data['vfswritepages'] >> - print >> - print 'Generic NFS counters:' >> - print ' File size changing operations:' >> - print ' truncating SETATTRs: %d extending WRITEs: %d' % \ >> - (self.__nfs_data['setattrtrunc'], self.__nfs_data['extendwrite']) >> - print ' %d silly renames' % self.__nfs_data['sillyrenames'] >> - print ' short reads: %d short writes: %d' % \ >> - (self.__nfs_data['shortreads'], self.__nfs_data['shortwrites']) >> - print ' NFSERR_DELAYs from server: %d' % self.__nfs_data['delay'] >> + print() >> + print('Cache events:') >> + print(' data cache invalidated %d times' % self.__nfs_data['datainvalidates']) >> + print(' attribute cache invalidated %d times' % self.__nfs_data['attrinvalidates']) >> + print(' inodes synced %d times' % self.__nfs_data['syncinodes']) >> + print() >> + print('VFS calls:') >> + print(' VFS requested %d inode revalidations' % self.__nfs_data['inoderevalidates']) >> + print(' VFS requested %d dentry revalidations' % self.__nfs_data['dentryrevalidates']) >> + print() >> + print(' VFS called nfs_readdir() %d times' % self.__nfs_data['vfsreaddir']) >> + print(' VFS called nfs_lookup() %d times' % self.__nfs_data['vfslookup']) >> + print(' VFS called nfs_permission() %d times' % self.__nfs_data['vfspermission']) >> + print(' VFS called nfs_file_open() %d times' % self.__nfs_data['vfsopen']) >> + print(' VFS called nfs_file_flush() %d times' % self.__nfs_data['vfsflush']) >> + print(' VFS called nfs_lock() %d times' % self.__nfs_data['vfslock']) >> + print(' VFS called nfs_fsync() %d times' % self.__nfs_data['vfsfsync']) >> + print(' VFS called nfs_file_release() %d times' % self.__nfs_data['vfsrelease']) >> + print() >> + print('VM calls:') >> + print(' VFS called nfs_readpage() %d times' % self.__nfs_data['vfsreadpage']) >> + print(' VFS called nfs_readpages() %d times' % self.__nfs_data['vfsreadpages']) >> + print(' VFS called nfs_writepage() %d times' % self.__nfs_data['vfswritepage']) >> + print(' VFS called nfs_writepages() %d times' % self.__nfs_data['vfswritepages']) >> + print() >> + print('Generic NFS counters:') >> + print(' File size changing operations:') >> + print(' truncating SETATTRs: %d extending WRITEs: %d' % \ >> + (self.__nfs_data['setattrtrunc'], self.__nfs_data['extendwrite'])) >> + print(' %d silly renames' % self.__nfs_data['sillyrenames']) >> + print(' short reads: %d short writes: %d' % \ >> + (self.__nfs_data['shortreads'], self.__nfs_data['shortwrites'])) >> + print(' NFSERR_DELAYs from server: %d' % self.__nfs_data['delay']) >> >> def display_nfs_bytes(self): >> """Pretty-print the NFS event counters >> """ >> - print >> - print 'NFS byte counts:' >> - print ' applications read %d bytes via read(2)' % self.__nfs_data['normalreadbytes'] >> - print ' applications wrote %d bytes via write(2)' % self.__nfs_data['normalwritebytes'] >> - print ' applications read %d bytes via O_DIRECT read(2)' % self.__nfs_data['directreadbytes'] >> - print ' applications wrote %d bytes via O_DIRECT write(2)' % self.__nfs_data['directwritebytes'] >> - print ' client read %d bytes via NFS READ' % self.__nfs_data['serverreadbytes'] >> - print ' client wrote %d bytes via NFS WRITE' % self.__nfs_data['serverwritebytes'] >> + print() >> + print('NFS byte counts:') >> + print(' applications read %d bytes via read(2)' % self.__nfs_data['normalreadbytes']) >> + print(' applications wrote %d bytes via write(2)' % self.__nfs_data['normalwritebytes']) >> + print(' applications read %d bytes via O_DIRECT read(2)' % self.__nfs_data['directreadbytes']) >> + print(' applications wrote %d bytes via O_DIRECT write(2)' % self.__nfs_data['directwritebytes']) >> + print(' client read %d bytes via NFS READ' % self.__nfs_data['serverreadbytes']) >> + print(' client wrote %d bytes via NFS WRITE' % self.__nfs_data['serverwritebytes']) >> >> def display_rpc_generic_stats(self): >> """Pretty-print the generic RPC stats >> """ >> sends = self.__rpc_data['rpcsends'] >> >> - print >> - print 'RPC statistics:' >> + print() >> + print('RPC statistics:') >> >> - print ' %d RPC requests sent, %d RPC replies received (%d XIDs not found)' % \ >> - (sends, self.__rpc_data['rpcreceives'], self.__rpc_data['badxids']) >> + print(' %d RPC requests sent, %d RPC replies received (%d XIDs not found)' % \ >> + (sends, self.__rpc_data['rpcreceives'], self.__rpc_data['badxids'])) >> if sends != 0: >> - print ' average backlog queue length: %d' % \ >> - (float(self.__rpc_data['backlogutil']) / sends) >> + print(' average backlog queue length: %d' % \ >> + (float(self.__rpc_data['backlogutil']) / sends)) >> >> def display_rpc_op_stats(self): >> """Pretty-print the per-op stats >> @@ -261,23 +261,23 @@ class DeviceData: >> sends = self.__rpc_data['rpcsends'] >> >> # XXX: these should be sorted by 'count' >> - print >> + print() >> for op in self.__rpc_data['ops']: >> stats = self.__rpc_data[op] >> count = stats[0] >> retrans = stats[1] - count >> if count != 0: >> - print '%s:' % op >> - print '\t%d ops (%d%%)' % \ >> - (count, ((count * 100) / sends)), >> - print '\t%d retrans (%d%%)' % (retrans, ((retrans * 100) / count)), >> - print '\t%d major timeouts' % stats[2] >> - print '\tavg bytes sent per op: %d\tavg bytes received per op: %d' % \ >> - (stats[3] / count, stats[4] / count) >> - print '\tbacklog wait: %f' % (float(stats[5]) / count), >> - print '\tRTT: %f' % (float(stats[6]) / count), >> - print '\ttotal execute time: %f (milliseconds)' % \ >> - (float(stats[7]) / count) >> + print('%s:' % op) >> + print('\t%d ops (%d%%)' % \ >> + (count, ((count * 100) / sends)), end=' ') >> + print('\t%d retrans (%d%%)' % (retrans, ((retrans * 100) / count)), end=' ') >> + print('\t%d major timeouts' % stats[2]) >> + print('\tavg bytes sent per op: %d\tavg bytes received per op: %d' % \ >> + (stats[3] / count, stats[4] / count)) >> + print('\tbacklog wait: %f' % (float(stats[5]) / count), end=' ') >> + print('\tRTT: %f' % (float(stats[6]) / count), end=' ') >> + print('\ttotal execute time: %f (milliseconds)' % \ >> + (float(stats[7]) / count)) >> >> def compare_iostats(self, old_stats): >> """Return the difference between two sets of stats >> @@ -285,9 +285,9 @@ class DeviceData: >> result = DeviceData() >> >> # copy self into result >> - for key, value in self.__nfs_data.iteritems(): >> + for key, value in self.__nfs_data.items(): >> result.__nfs_data[key] = value >> - for key, value in self.__rpc_data.iteritems(): >> + for key, value in self.__rpc_data.items(): >> result.__rpc_data[key] = value >> >> # compute the difference of each item in the list >> @@ -295,7 +295,7 @@ class DeviceData: >> # the reference to them. so we build new lists here >> # for the result object. >> for op in result.__rpc_data['ops']: >> - result.__rpc_data[op] = map(difference, self.__rpc_data[op], old_stats.__rpc_data[op]) >> + result.__rpc_data[op] = list(map(difference, self.__rpc_data[op], old_stats.__rpc_data[op])) >> >> # update the remaining keys we care about >> result.__rpc_data['rpcsends'] -= old_stats.__rpc_data['rpcsends'] >> @@ -312,17 +312,17 @@ class DeviceData: >> if sample_time == 0: >> sample_time = float(self.__nfs_data['age']) >> >> - print >> - print '%s mounted on %s:' % \ >> - (self.__nfs_data['export'], self.__nfs_data['mountpoint']) >> + print() >> + print('%s mounted on %s:' % \ >> + (self.__nfs_data['export'], self.__nfs_data['mountpoint'])) >> >> - print '\top/s\trpc bklog' >> - print '\t%.2f' % (sends / sample_time), >> + print('\top/s\trpc bklog') >> + print('\t%.2f' % (sends / sample_time), end=' ') >> if sends != 0: >> - print '\t%.2f' % \ >> - ((float(self.__rpc_data['backlogutil']) / sends) / sample_time) >> + print('\t%.2f' % \ >> + ((float(self.__rpc_data['backlogutil']) / sends) / sample_time)) >> else: >> - print '\t0.00' >> + print('\t0.00') >> >> # reads: ops/s, kB/s, avg rtt, and avg exe >> # XXX: include avg xfer size and retransmits? >> @@ -332,15 +332,15 @@ 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 '\t\t%.2f' % (ops / sample_time), >> - print '\t\t%.2f' % (kilobytes / sample_time), >> + print('\treads:\tops/s\t\tkB/s\t\tavg RTT (ms)\tavg exe (ms)') >> + print('\t\t%.2f' % (ops / sample_time), end=' ') >> + print('\t\t%.2f' % (kilobytes / sample_time), end=' ') >> if ops != 0: >> - print '\t\t%.2f' % (rtt / ops), >> - print '\t\t%.2f' % (exe / ops) >> + print('\t\t%.2f' % (rtt / ops), end=' ') >> + print('\t\t%.2f' % (exe / ops)) >> else: >> - print '\t\t0.00', >> - print '\t\t0.00' >> + print('\t\t0.00', end=' ') >> + print('\t\t0.00') >> >> # writes: ops/s, kB/s, avg rtt, and avg exe >> # XXX: include avg xfer size and retransmits? >> @@ -350,15 +350,15 @@ 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 '\t\t%.2f' % (ops / sample_time), >> - print '\t\t%.2f' % (kilobytes / sample_time), >> + print('\twrites:\tops/s\t\tkB/s\t\tavg RTT (ms)\tavg exe (ms)') >> + print('\t\t%.2f' % (ops / sample_time), end=' ') >> + print('\t\t%.2f' % (kilobytes / sample_time), end=' ') >> if ops != 0: >> - print '\t\t%.2f' % (rtt / ops), >> - print '\t\t%.2f' % (exe / ops) >> + print('\t\t%.2f' % (rtt / ops), end=' ') >> + print('\t\t%.2f' % (exe / ops)) >> else: >> - print '\t\t0.00', >> - print '\t\t0.00' >> + print('\t\t0.00', end=' ') >> + print('\t\t0.00') >> >> def parse_stats_file(filename): >> """pop the contents of a mountstats file into a dictionary, >> @@ -388,18 +388,18 @@ def parse_stats_file(filename): >> return ms_dict >> >> def print_mountstats_help(name): >> - print 'usage: %s [ options ] <mount point>' % name >> - print >> - print ' Version %s' % Mountstats_version >> - print >> - print ' Display NFS client per-mount statistics.' >> - print >> - print ' --version display the version of this command' >> - print ' --nfs display only the NFS statistics' >> - print ' --rpc display only the RPC statistics' >> - print ' --start sample and save statistics' >> - print ' --end resample statistics and compare them with saved' >> - print >> + print('usage: %s [ options ] <mount point>' % name) >> + print() >> + print(' Version %s' % Mountstats_version) >> + print() >> + print(' Display NFS client per-mount statistics.') >> + print() >> + print(' --version display the version of this command') >> + print(' --nfs display only the NFS statistics') >> + print(' --rpc display only the RPC statistics') >> + print(' --start sample and save statistics') >> + print(' --end resample statistics and compare them with saved') >> + print() >> >> def mountstats_command(): >> """Mountstats command >> @@ -414,7 +414,7 @@ def mountstats_command(): >> return >> >> if arg in ['-v', '--version', 'version']: >> - print '%s version %s' % (sys.argv[0], Mountstats_version) >> + print('%s version %s' % (sys.argv[0], Mountstats_version)) >> sys.exit(0) >> >> if arg in ['-n', '--nfs']: >> @@ -426,10 +426,10 @@ def mountstats_command(): >> continue >> >> if arg in ['-s', '--start']: >> - raise Exception, 'Sampling is not yet implemented' >> + raise Exception('Sampling is not yet implemented') >> >> if arg in ['-e', '--end']: >> - raise Exception, 'Sampling is not yet implemented' >> + raise Exception('Sampling is not yet implemented') >> >> if arg == sys.argv[0]: >> continue >> @@ -448,14 +448,14 @@ def mountstats_command(): >> >> for mp in mountpoints: >> if mp not in mountstats: >> - print 'Statistics for mount point %s not found' % mp >> + print('Statistics for mount point %s not found' % mp) >> continue >> >> stats = DeviceData() >> stats.parse_stats(mountstats[mp]) >> >> if not stats.is_nfs_mountpoint(): >> - print 'Mount point %s exists but is not an NFS mount' % mp >> + print('Mount point %s exists but is not an NFS mount' % mp) >> continue >> >> if nfs_only: >> @@ -472,37 +472,37 @@ def mountstats_command(): >> stats.display_rpc_op_stats() >> >> def print_nfsstat_help(name): >> - print 'usage: %s [ options ]' % name >> - print >> - print ' Version %s' % Mountstats_version >> - print >> - print ' nfsstat-like program that uses NFS client per-mount statistics.' >> - print >> + print('usage: %s [ options ]' % name) >> + print() >> + print(' Version %s' % Mountstats_version) >> + print() >> + print(' nfsstat-like program that uses NFS client per-mount statistics.') >> + print() >> >> def nfsstat_command(): >> print_nfsstat_help(prog) >> >> def print_iostat_help(name): >> - print 'usage: %s [ <interval> [ <count> ] ] [ <mount point> ] ' % name >> - print >> - print ' Version %s' % Mountstats_version >> - print >> - print ' iostat-like program to display NFS client per-mount statistics.' >> - print >> - print ' The <interval> parameter specifies the amount of time in seconds between' >> - print ' each report. The first report contains statistics for the time since each' >> - print ' file system was mounted. Each subsequent report contains statistics' >> - print ' collected during the interval since the previous report.' >> - print >> - print ' If the <count> parameter is specified, the value of <count> determines the' >> - print ' number of reports generated at <interval> seconds apart. If the interval' >> - print ' parameter is specified without the <count> parameter, the command generates' >> - print ' reports continuously.' >> - print >> - print ' If one or more <mount point> names are specified, statistics for only these' >> - print ' mount points will be displayed. Otherwise, all NFS mount points on the' >> - print ' client are listed.' >> - print >> + print('usage: %s [ <interval> [ <count> ] ] [ <mount point> ] ' % name) >> + print() >> + print(' Version %s' % Mountstats_version) >> + print() >> + print(' iostat-like program to display NFS client per-mount statistics.') >> + print() >> + print(' The <interval> parameter specifies the amount of time in seconds between') >> + print(' each report. The first report contains statistics for the time since each') >> + print(' file system was mounted. Each subsequent report contains statistics') >> + print(' collected during the interval since the previous report.') >> + print() >> + print(' If the <count> parameter is specified, the value of <count> determines the') >> + print(' number of reports generated at <interval> seconds apart. If the interval') >> + print(' parameter is specified without the <count> parameter, the command generates') >> + print(' reports continuously.') >> + print() >> + print(' If one or more <mount point> names are specified, statistics for only these') >> + print(' mount points will be displayed. Otherwise, all NFS mount points on the') >> + print(' client are listed.') >> + print() >> >> def print_iostat_summary(old, new, devices, time): >> for device in devices: >> @@ -530,7 +530,7 @@ def iostat_command(): >> return >> >> if arg in ['-v', '--version', 'version']: >> - print '%s version %s' % (sys.argv[0], Mountstats_version) >> + print('%s version %s' % (sys.argv[0], Mountstats_version)) >> return >> >> if arg == sys.argv[0]: >> @@ -543,14 +543,14 @@ def iostat_command(): >> if interval > 0: >> interval_seen = True >> else: >> - print 'Illegal <interval> value' >> + print('Illegal <interval> value') >> return >> elif not count_seen: >> count = int(arg) >> if count > 0: >> count_seen = True >> else: >> - print 'Illegal <count> value' >> + print('Illegal <count> value') >> return >> >> # make certain devices contains only NFS mount points >> @@ -563,13 +563,13 @@ def iostat_command(): >> check += [device] >> devices = check >> else: >> - for device, descr in mountstats.iteritems(): >> + for device, descr in mountstats.items(): >> stats = DeviceData() >> stats.parse_stats(descr) >> if stats.is_nfs_mountpoint(): >> devices += [device] >> if len(devices) == 0: >> - print 'No NFS mount points were found' >> + print('No NFS mount points were found') >> return >> >> old_mountstats = None >> @@ -608,7 +608,7 @@ try: >> elif prog == 'ms-iostat': >> iostat_command() >> except KeyboardInterrupt: >> - print 'Caught ^C... exiting' >> + print('Caught ^C... exiting') >> sys.exit(1) >> >> sys.exit(0) >> diff --git a/tools/nfs-iostat/nfs-iostat.py b/tools/nfs-iostat/nfs-iostat.py >> index c035537..1c523f9 100644 >> --- a/tools/nfs-iostat/nfs-iostat.py >> +++ b/tools/nfs-iostat/nfs-iostat.py >> @@ -95,7 +95,7 @@ class DeviceData: >> if words[6] == 'nfs': >> self.__nfs_data['statvers'] = words[7] >> elif words[0] == 'age:': >> - self.__nfs_data['age'] = long(words[1]) >> + self.__nfs_data['age'] = int(words[1]) >> elif words[0] == 'opts:': >> self.__nfs_data['mountoptions'] = ''.join(words[1:]).split(',') >> elif words[0] == 'caps:': >> @@ -116,7 +116,7 @@ class DeviceData: >> elif words[0] == 'bytes:': >> i = 1 >> for key in NfsByteCounters: >> - self.__nfs_data[key] = long(words[i]) >> + self.__nfs_data[key] = int(words[i]) >> i += 1 >> >> def __parse_rpc_line(self, words): >> @@ -131,8 +131,8 @@ class DeviceData: >> self.__rpc_data['rpcsends'] = int(words[4]) >> self.__rpc_data['rpcreceives'] = int(words[5]) >> self.__rpc_data['badxids'] = int(words[6]) >> - self.__rpc_data['inflightsends'] = long(words[7]) >> - self.__rpc_data['backlogutil'] = long(words[8]) >> + self.__rpc_data['inflightsends'] = int(words[7]) >> + self.__rpc_data['backlogutil'] = int(words[8]) >> elif words[1] == 'tcp': >> self.__rpc_data['port'] = words[2] >> self.__rpc_data['bind_count'] = int(words[3]) >> @@ -142,8 +142,8 @@ class DeviceData: >> self.__rpc_data['rpcsends'] = int(words[7]) >> self.__rpc_data['rpcreceives'] = int(words[8]) >> self.__rpc_data['badxids'] = int(words[9]) >> - self.__rpc_data['inflightsends'] = long(words[10]) >> - self.__rpc_data['backlogutil'] = long(words[11]) >> + self.__rpc_data['inflightsends'] = int(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]) >> @@ -169,7 +169,7 @@ class DeviceData: >> else: >> op = words[0][:-1] >> self.__rpc_data['ops'] += [op] >> - self.__rpc_data[op] = [long(word) for word in words[1:]] >> + self.__rpc_data[op] = [int(word) for word in words[1:]] >> >> def parse_stats(self, lines): >> """Turn a list of lines from a mount stat file into a >> @@ -271,7 +271,7 @@ class DeviceData: >> nfs_stats = self.__nfs_data >> lookup_ops = self.__rpc_data['LOOKUP'][0] >> readdir_ops = self.__rpc_data['READDIR'][0] >> - if self.__rpc_data.has_key('READDIRPLUS'): >> + if 'READDIRPLUS' in self.__rpc_data: >> readdir_ops += self.__rpc_data['READDIRPLUS'][0] >> >> dentry_revals = nfs_stats['dentryrevalidates'] >> @@ -330,7 +330,7 @@ class DeviceData: >> def __print_rpc_op_stats(self, op, sample_time): >> """Print generic stats for one RPC op >> """ >> - if not self.__rpc_data.has_key(op): >> + if op not in self.__rpc_data: >> return >> >> rpc_stats = self.__rpc_data[op] >> @@ -405,7 +405,7 @@ class DeviceData: >> elif which == 2: >> self.__print_rpc_op_stats('LOOKUP', sample_time) >> self.__print_rpc_op_stats('READDIR', sample_time) >> - if self.__rpc_data.has_key('READDIRPLUS'): >> + if 'READDIRPLUS' in self.__rpc_data: >> self.__print_rpc_op_stats('READDIRPLUS', sample_time) >> self.__print_dir_cache_stats(sample_time) >> elif which == 3: >> @@ -450,7 +450,7 @@ def print_iostat_summary(old, new, devices, time, options): >> if old: >> # Trim device list to only include intersection of old and new data, >> # this addresses umounts due to autofs mountpoints >> - devicelist = filter(lambda x:x in devices,old) >> + devicelist = [x for x in old if x in devices] >> else: >> devicelist = devices >> >> > -- > To unsubscribe from this list: send the line "unsubscribe linux-nfs" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
----- Original Message ----- > This just made it into f19 and it doesn't work for me: > > $ mountstats /mnt > File "/usr/sbin/mountstats", line 272 > (count, ((count * 100) / sends)), end=' ') > ^ > SyntaxError: invalid syntax > > $ python > Python 2.7.5 (default, Oct 8 2013, 12:19:40) > [GCC 4.8.1 20130603 (Red Hat 4.8.1-1)] on linux2 > > > I think mountstats needs this line at the top of the file: > > from __future__ import print_function > True, sorry for the bug. Slavek > At least until python3 is the default on fedora. > > -dros > > On Sep 18, 2013, at 3:16 PM, Steve Dickson <SteveD@redhat.com> wrote: > > > > > > > On 17/09/13 05:21, Bohuslav Kabrda wrote: > >> This will make mountstat and nfs-iostat run on Python 2.6, 2.7 > >> and >= 3.0 > >> > >> Signed-off-by: Bohuslav Kabrda <bkabrda@redhat.com> > > Committed! > > > > steved. > > > >> --- > >> tools/mountstats/mountstats.py | 310 > >> ++++++++++++++++++++--------------------- > >> tools/nfs-iostat/nfs-iostat.py | 22 +-- > >> 2 files changed, 166 insertions(+), 166 deletions(-) > >> > >> diff --git a/tools/mountstats/mountstats.py > >> b/tools/mountstats/mountstats.py > >> index b95b71d..3f5fea5 100644 > >> --- a/tools/mountstats/mountstats.py > >> +++ b/tools/mountstats/mountstats.py > >> @@ -53,7 +53,7 @@ class DeviceData: > >> if words[6].find('nfs') != -1: > >> self.__nfs_data['statvers'] = words[7] > >> elif words[0] == 'age:': > >> - self.__nfs_data['age'] = long(words[1]) > >> + self.__nfs_data['age'] = int(words[1]) > >> elif words[0] == 'opts:': > >> self.__nfs_data['mountoptions'] = > >> ''.join(words[1:]).split(',') > >> elif words[0] == 'caps:': > >> @@ -91,12 +91,12 @@ class DeviceData: > >> self.__nfs_data['shortwrites'] = int(words[22]) > >> self.__nfs_data['delay'] = int(words[23]) > >> elif words[0] == 'bytes:': > >> - self.__nfs_data['normalreadbytes'] = long(words[1]) > >> - self.__nfs_data['normalwritebytes'] = long(words[2]) > >> - self.__nfs_data['directreadbytes'] = long(words[3]) > >> - self.__nfs_data['directwritebytes'] = long(words[4]) > >> - self.__nfs_data['serverreadbytes'] = long(words[5]) > >> - self.__nfs_data['serverwritebytes'] = long(words[6]) > >> + self.__nfs_data['normalreadbytes'] = int(words[1]) > >> + self.__nfs_data['normalwritebytes'] = int(words[2]) > >> + self.__nfs_data['directreadbytes'] = int(words[3]) > >> + self.__nfs_data['directwritebytes'] = int(words[4]) > >> + self.__nfs_data['serverreadbytes'] = int(words[5]) > >> + self.__nfs_data['serverwritebytes'] = int(words[6]) > >> > >> def __parse_rpc_line(self, words): > >> if words[0] == 'RPC': > >> @@ -110,8 +110,8 @@ class DeviceData: > >> self.__rpc_data['rpcsends'] = int(words[4]) > >> self.__rpc_data['rpcreceives'] = int(words[5]) > >> self.__rpc_data['badxids'] = int(words[6]) > >> - self.__rpc_data['inflightsends'] = long(words[7]) > >> - self.__rpc_data['backlogutil'] = long(words[8]) > >> + self.__rpc_data['inflightsends'] = int(words[7]) > >> + self.__rpc_data['backlogutil'] = int(words[8]) > >> elif words[1] == 'tcp': > >> self.__rpc_data['port'] = words[2] > >> self.__rpc_data['bind_count'] = int(words[3]) > >> @@ -121,7 +121,7 @@ class DeviceData: > >> self.__rpc_data['rpcsends'] = int(words[7]) > >> self.__rpc_data['rpcreceives'] = int(words[8]) > >> self.__rpc_data['badxids'] = int(words[9]) > >> - self.__rpc_data['inflightsends'] = long(words[10]) > >> + self.__rpc_data['inflightsends'] = int(words[10]) > >> self.__rpc_data['backlogutil'] = int(words[11]) > >> elif words[1] == 'rdma': > >> self.__rpc_data['port'] = words[2] > >> @@ -148,7 +148,7 @@ class DeviceData: > >> else: > >> op = words[0][:-1] > >> self.__rpc_data['ops'] += [op] > >> - self.__rpc_data[op] = [long(word) for word in words[1:]] > >> + self.__rpc_data[op] = [int(word) for word in words[1:]] > >> > >> def parse_stats(self, lines): > >> """Turn a list of lines from a mount stat file into a > >> @@ -179,81 +179,81 @@ class DeviceData: > >> def display_nfs_options(self): > >> """Pretty-print the NFS options > >> """ > >> - print 'Stats for %s mounted on %s:' % \ > >> - (self.__nfs_data['export'], self.__nfs_data['mountpoint']) > >> - > >> - print ' NFS mount options: %s' % > >> ','.join(self.__nfs_data['mountoptions']) > >> - print ' NFS server capabilities: %s' % > >> ','.join(self.__nfs_data['servercapabilities']) > >> - if self.__nfs_data.has_key('nfsv4flags'): > >> - print ' NFSv4 capability flags: %s' % > >> ','.join(self.__nfs_data['nfsv4flags']) > >> - if self.__nfs_data.has_key('pseudoflavor'): > >> - print ' NFS security flavor: %d pseudoflavor: %d' % \ > >> - (self.__nfs_data['flavor'], > >> self.__nfs_data['pseudoflavor']) > >> + print('Stats for %s mounted on %s:' % \ > >> + (self.__nfs_data['export'], self.__nfs_data['mountpoint'])) > >> + > >> + print(' NFS mount options: %s' % > >> ','.join(self.__nfs_data['mountoptions'])) > >> + print(' NFS server capabilities: %s' % > >> ','.join(self.__nfs_data['servercapabilities'])) > >> + if 'nfsv4flags' in self.__nfs_data: > >> + print(' NFSv4 capability flags: %s' % > >> ','.join(self.__nfs_data['nfsv4flags'])) > >> + if 'pseudoflavor' in self.__nfs_data: > >> + print(' NFS security flavor: %d pseudoflavor: %d' % \ > >> + (self.__nfs_data['flavor'], > >> self.__nfs_data['pseudoflavor'])) > >> else: > >> - print ' NFS security flavor: %d' % self.__nfs_data['flavor'] > >> + print(' NFS security flavor: %d' % > >> self.__nfs_data['flavor']) > >> > >> def display_nfs_events(self): > >> """Pretty-print the NFS event counters > >> """ > >> - print > >> - print 'Cache events:' > >> - print ' data cache invalidated %d times' % > >> self.__nfs_data['datainvalidates'] > >> - print ' attribute cache invalidated %d times' % > >> self.__nfs_data['attrinvalidates'] > >> - print ' inodes synced %d times' % self.__nfs_data['syncinodes'] > >> - print > >> - print 'VFS calls:' > >> - print ' VFS requested %d inode revalidations' % > >> self.__nfs_data['inoderevalidates'] > >> - print ' VFS requested %d dentry revalidations' % > >> self.__nfs_data['dentryrevalidates'] > >> - print > >> - print ' VFS called nfs_readdir() %d times' % > >> self.__nfs_data['vfsreaddir'] > >> - print ' VFS called nfs_lookup() %d times' % > >> self.__nfs_data['vfslookup'] > >> - print ' VFS called nfs_permission() %d times' % > >> self.__nfs_data['vfspermission'] > >> - print ' VFS called nfs_file_open() %d times' % > >> self.__nfs_data['vfsopen'] > >> - print ' VFS called nfs_file_flush() %d times' % > >> self.__nfs_data['vfsflush'] > >> - print ' VFS called nfs_lock() %d times' % > >> self.__nfs_data['vfslock'] > >> - print ' VFS called nfs_fsync() %d times' % > >> self.__nfs_data['vfsfsync'] > >> - print ' VFS called nfs_file_release() %d times' % > >> self.__nfs_data['vfsrelease'] > >> - print > >> - print 'VM calls:' > >> - print ' VFS called nfs_readpage() %d times' % > >> self.__nfs_data['vfsreadpage'] > >> - print ' VFS called nfs_readpages() %d times' % > >> self.__nfs_data['vfsreadpages'] > >> - print ' VFS called nfs_writepage() %d times' % > >> self.__nfs_data['vfswritepage'] > >> - print ' VFS called nfs_writepages() %d times' % > >> self.__nfs_data['vfswritepages'] > >> - print > >> - print 'Generic NFS counters:' > >> - print ' File size changing operations:' > >> - print ' truncating SETATTRs: %d extending WRITEs: %d' % \ > >> - (self.__nfs_data['setattrtrunc'], > >> self.__nfs_data['extendwrite']) > >> - print ' %d silly renames' % self.__nfs_data['sillyrenames'] > >> - print ' short reads: %d short writes: %d' % \ > >> - (self.__nfs_data['shortreads'], > >> self.__nfs_data['shortwrites']) > >> - print ' NFSERR_DELAYs from server: %d' % > >> self.__nfs_data['delay'] > >> + print() > >> + print('Cache events:') > >> + print(' data cache invalidated %d times' % > >> self.__nfs_data['datainvalidates']) > >> + print(' attribute cache invalidated %d times' % > >> self.__nfs_data['attrinvalidates']) > >> + print(' inodes synced %d times' % self.__nfs_data['syncinodes']) > >> + print() > >> + print('VFS calls:') > >> + print(' VFS requested %d inode revalidations' % > >> self.__nfs_data['inoderevalidates']) > >> + print(' VFS requested %d dentry revalidations' % > >> self.__nfs_data['dentryrevalidates']) > >> + print() > >> + print(' VFS called nfs_readdir() %d times' % > >> self.__nfs_data['vfsreaddir']) > >> + print(' VFS called nfs_lookup() %d times' % > >> self.__nfs_data['vfslookup']) > >> + print(' VFS called nfs_permission() %d times' % > >> self.__nfs_data['vfspermission']) > >> + print(' VFS called nfs_file_open() %d times' % > >> self.__nfs_data['vfsopen']) > >> + print(' VFS called nfs_file_flush() %d times' % > >> self.__nfs_data['vfsflush']) > >> + print(' VFS called nfs_lock() %d times' % > >> self.__nfs_data['vfslock']) > >> + print(' VFS called nfs_fsync() %d times' % > >> self.__nfs_data['vfsfsync']) > >> + print(' VFS called nfs_file_release() %d times' % > >> self.__nfs_data['vfsrelease']) > >> + print() > >> + print('VM calls:') > >> + print(' VFS called nfs_readpage() %d times' % > >> self.__nfs_data['vfsreadpage']) > >> + print(' VFS called nfs_readpages() %d times' % > >> self.__nfs_data['vfsreadpages']) > >> + print(' VFS called nfs_writepage() %d times' % > >> self.__nfs_data['vfswritepage']) > >> + print(' VFS called nfs_writepages() %d times' % > >> self.__nfs_data['vfswritepages']) > >> + print() > >> + print('Generic NFS counters:') > >> + print(' File size changing operations:') > >> + print(' truncating SETATTRs: %d extending WRITEs: %d' % \ > >> + (self.__nfs_data['setattrtrunc'], > >> self.__nfs_data['extendwrite'])) > >> + print(' %d silly renames' % self.__nfs_data['sillyrenames']) > >> + print(' short reads: %d short writes: %d' % \ > >> + (self.__nfs_data['shortreads'], > >> self.__nfs_data['shortwrites'])) > >> + print(' NFSERR_DELAYs from server: %d' % > >> self.__nfs_data['delay']) > >> > >> def display_nfs_bytes(self): > >> """Pretty-print the NFS event counters > >> """ > >> - print > >> - print 'NFS byte counts:' > >> - print ' applications read %d bytes via read(2)' % > >> self.__nfs_data['normalreadbytes'] > >> - print ' applications wrote %d bytes via write(2)' % > >> self.__nfs_data['normalwritebytes'] > >> - print ' applications read %d bytes via O_DIRECT read(2)' % > >> self.__nfs_data['directreadbytes'] > >> - print ' applications wrote %d bytes via O_DIRECT write(2)' % > >> self.__nfs_data['directwritebytes'] > >> - print ' client read %d bytes via NFS READ' % > >> self.__nfs_data['serverreadbytes'] > >> - print ' client wrote %d bytes via NFS WRITE' % > >> self.__nfs_data['serverwritebytes'] > >> + print() > >> + print('NFS byte counts:') > >> + print(' applications read %d bytes via read(2)' % > >> self.__nfs_data['normalreadbytes']) > >> + print(' applications wrote %d bytes via write(2)' % > >> self.__nfs_data['normalwritebytes']) > >> + print(' applications read %d bytes via O_DIRECT read(2)' % > >> self.__nfs_data['directreadbytes']) > >> + print(' applications wrote %d bytes via O_DIRECT write(2)' % > >> self.__nfs_data['directwritebytes']) > >> + print(' client read %d bytes via NFS READ' % > >> self.__nfs_data['serverreadbytes']) > >> + print(' client wrote %d bytes via NFS WRITE' % > >> self.__nfs_data['serverwritebytes']) > >> > >> def display_rpc_generic_stats(self): > >> """Pretty-print the generic RPC stats > >> """ > >> sends = self.__rpc_data['rpcsends'] > >> > >> - print > >> - print 'RPC statistics:' > >> + print() > >> + print('RPC statistics:') > >> > >> - print ' %d RPC requests sent, %d RPC replies received (%d XIDs > >> not found)' % \ > >> - (sends, self.__rpc_data['rpcreceives'], > >> self.__rpc_data['badxids']) > >> + print(' %d RPC requests sent, %d RPC replies received (%d XIDs > >> not found)' % \ > >> + (sends, self.__rpc_data['rpcreceives'], > >> self.__rpc_data['badxids'])) > >> if sends != 0: > >> - print ' average backlog queue length: %d' % \ > >> - (float(self.__rpc_data['backlogutil']) / sends) > >> + print(' average backlog queue length: %d' % \ > >> + (float(self.__rpc_data['backlogutil']) / sends)) > >> > >> def display_rpc_op_stats(self): > >> """Pretty-print the per-op stats > >> @@ -261,23 +261,23 @@ class DeviceData: > >> sends = self.__rpc_data['rpcsends'] > >> > >> # XXX: these should be sorted by 'count' > >> - print > >> + print() > >> for op in self.__rpc_data['ops']: > >> stats = self.__rpc_data[op] > >> count = stats[0] > >> retrans = stats[1] - count > >> if count != 0: > >> - print '%s:' % op > >> - print '\t%d ops (%d%%)' % \ > >> - (count, ((count * 100) / sends)), > >> - print '\t%d retrans (%d%%)' % (retrans, ((retrans * 100) > >> / count)), > >> - print '\t%d major timeouts' % stats[2] > >> - print '\tavg bytes sent per op: %d\tavg bytes received > >> per op: %d' % \ > >> - (stats[3] / count, stats[4] / count) > >> - print '\tbacklog wait: %f' % (float(stats[5]) / count), > >> - print '\tRTT: %f' % (float(stats[6]) / count), > >> - print '\ttotal execute time: %f (milliseconds)' % \ > >> - (float(stats[7]) / count) > >> + print('%s:' % op) > >> + print('\t%d ops (%d%%)' % \ > >> + (count, ((count * 100) / sends)), end=' ') > >> + print('\t%d retrans (%d%%)' % (retrans, ((retrans * 100) > >> / count)), end=' ') > >> + print('\t%d major timeouts' % stats[2]) > >> + print('\tavg bytes sent per op: %d\tavg bytes received > >> per op: %d' % \ > >> + (stats[3] / count, stats[4] / count)) > >> + print('\tbacklog wait: %f' % (float(stats[5]) / count), > >> end=' ') > >> + print('\tRTT: %f' % (float(stats[6]) / count), end=' ') > >> + print('\ttotal execute time: %f (milliseconds)' % \ > >> + (float(stats[7]) / count)) > >> > >> def compare_iostats(self, old_stats): > >> """Return the difference between two sets of stats > >> @@ -285,9 +285,9 @@ class DeviceData: > >> result = DeviceData() > >> > >> # copy self into result > >> - for key, value in self.__nfs_data.iteritems(): > >> + for key, value in self.__nfs_data.items(): > >> result.__nfs_data[key] = value > >> - for key, value in self.__rpc_data.iteritems(): > >> + for key, value in self.__rpc_data.items(): > >> result.__rpc_data[key] = value > >> > >> # compute the difference of each item in the list > >> @@ -295,7 +295,7 @@ class DeviceData: > >> # the reference to them. so we build new lists here > >> # for the result object. > >> for op in result.__rpc_data['ops']: > >> - result.__rpc_data[op] = map(difference, self.__rpc_data[op], > >> old_stats.__rpc_data[op]) > >> + result.__rpc_data[op] = list(map(difference, > >> self.__rpc_data[op], old_stats.__rpc_data[op])) > >> > >> # update the remaining keys we care about > >> result.__rpc_data['rpcsends'] -= old_stats.__rpc_data['rpcsends'] > >> @@ -312,17 +312,17 @@ class DeviceData: > >> if sample_time == 0: > >> sample_time = float(self.__nfs_data['age']) > >> > >> - print > >> - print '%s mounted on %s:' % \ > >> - (self.__nfs_data['export'], self.__nfs_data['mountpoint']) > >> + print() > >> + print('%s mounted on %s:' % \ > >> + (self.__nfs_data['export'], self.__nfs_data['mountpoint'])) > >> > >> - print '\top/s\trpc bklog' > >> - print '\t%.2f' % (sends / sample_time), > >> + print('\top/s\trpc bklog') > >> + print('\t%.2f' % (sends / sample_time), end=' ') > >> if sends != 0: > >> - print '\t%.2f' % \ > >> - ((float(self.__rpc_data['backlogutil']) / sends) / > >> sample_time) > >> + print('\t%.2f' % \ > >> + ((float(self.__rpc_data['backlogutil']) / sends) / > >> sample_time)) > >> else: > >> - print '\t0.00' > >> + print('\t0.00') > >> > >> # reads: ops/s, kB/s, avg rtt, and avg exe > >> # XXX: include avg xfer size and retransmits? > >> @@ -332,15 +332,15 @@ 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 '\t\t%.2f' % (ops / sample_time), > >> - print '\t\t%.2f' % (kilobytes / sample_time), > >> + print('\treads:\tops/s\t\tkB/s\t\tavg RTT (ms)\tavg exe (ms)') > >> + print('\t\t%.2f' % (ops / sample_time), end=' ') > >> + print('\t\t%.2f' % (kilobytes / sample_time), end=' ') > >> if ops != 0: > >> - print '\t\t%.2f' % (rtt / ops), > >> - print '\t\t%.2f' % (exe / ops) > >> + print('\t\t%.2f' % (rtt / ops), end=' ') > >> + print('\t\t%.2f' % (exe / ops)) > >> else: > >> - print '\t\t0.00', > >> - print '\t\t0.00' > >> + print('\t\t0.00', end=' ') > >> + print('\t\t0.00') > >> > >> # writes: ops/s, kB/s, avg rtt, and avg exe > >> # XXX: include avg xfer size and retransmits? > >> @@ -350,15 +350,15 @@ 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 '\t\t%.2f' % (ops / sample_time), > >> - print '\t\t%.2f' % (kilobytes / sample_time), > >> + print('\twrites:\tops/s\t\tkB/s\t\tavg RTT (ms)\tavg exe (ms)') > >> + print('\t\t%.2f' % (ops / sample_time), end=' ') > >> + print('\t\t%.2f' % (kilobytes / sample_time), end=' ') > >> if ops != 0: > >> - print '\t\t%.2f' % (rtt / ops), > >> - print '\t\t%.2f' % (exe / ops) > >> + print('\t\t%.2f' % (rtt / ops), end=' ') > >> + print('\t\t%.2f' % (exe / ops)) > >> else: > >> - print '\t\t0.00', > >> - print '\t\t0.00' > >> + print('\t\t0.00', end=' ') > >> + print('\t\t0.00') > >> > >> def parse_stats_file(filename): > >> """pop the contents of a mountstats file into a dictionary, > >> @@ -388,18 +388,18 @@ def parse_stats_file(filename): > >> return ms_dict > >> > >> def print_mountstats_help(name): > >> - print 'usage: %s [ options ] <mount point>' % name > >> - print > >> - print ' Version %s' % Mountstats_version > >> - print > >> - print ' Display NFS client per-mount statistics.' > >> - print > >> - print ' --version display the version of this command' > >> - print ' --nfs display only the NFS statistics' > >> - print ' --rpc display only the RPC statistics' > >> - print ' --start sample and save statistics' > >> - print ' --end resample statistics and compare them with > >> saved' > >> - print > >> + print('usage: %s [ options ] <mount point>' % name) > >> + print() > >> + print(' Version %s' % Mountstats_version) > >> + print() > >> + print(' Display NFS client per-mount statistics.') > >> + print() > >> + print(' --version display the version of this command') > >> + print(' --nfs display only the NFS statistics') > >> + print(' --rpc display only the RPC statistics') > >> + print(' --start sample and save statistics') > >> + print(' --end resample statistics and compare them with > >> saved') > >> + print() > >> > >> def mountstats_command(): > >> """Mountstats command > >> @@ -414,7 +414,7 @@ def mountstats_command(): > >> return > >> > >> if arg in ['-v', '--version', 'version']: > >> - print '%s version %s' % (sys.argv[0], Mountstats_version) > >> + print('%s version %s' % (sys.argv[0], Mountstats_version)) > >> sys.exit(0) > >> > >> if arg in ['-n', '--nfs']: > >> @@ -426,10 +426,10 @@ def mountstats_command(): > >> continue > >> > >> if arg in ['-s', '--start']: > >> - raise Exception, 'Sampling is not yet implemented' > >> + raise Exception('Sampling is not yet implemented') > >> > >> if arg in ['-e', '--end']: > >> - raise Exception, 'Sampling is not yet implemented' > >> + raise Exception('Sampling is not yet implemented') > >> > >> if arg == sys.argv[0]: > >> continue > >> @@ -448,14 +448,14 @@ def mountstats_command(): > >> > >> for mp in mountpoints: > >> if mp not in mountstats: > >> - print 'Statistics for mount point %s not found' % mp > >> + print('Statistics for mount point %s not found' % mp) > >> continue > >> > >> stats = DeviceData() > >> stats.parse_stats(mountstats[mp]) > >> > >> if not stats.is_nfs_mountpoint(): > >> - print 'Mount point %s exists but is not an NFS mount' % mp > >> + print('Mount point %s exists but is not an NFS mount' % mp) > >> continue > >> > >> if nfs_only: > >> @@ -472,37 +472,37 @@ def mountstats_command(): > >> stats.display_rpc_op_stats() > >> > >> def print_nfsstat_help(name): > >> - print 'usage: %s [ options ]' % name > >> - print > >> - print ' Version %s' % Mountstats_version > >> - print > >> - print ' nfsstat-like program that uses NFS client per-mount > >> statistics.' > >> - print > >> + print('usage: %s [ options ]' % name) > >> + print() > >> + print(' Version %s' % Mountstats_version) > >> + print() > >> + print(' nfsstat-like program that uses NFS client per-mount > >> statistics.') > >> + print() > >> > >> def nfsstat_command(): > >> print_nfsstat_help(prog) > >> > >> def print_iostat_help(name): > >> - print 'usage: %s [ <interval> [ <count> ] ] [ <mount point> ] ' % > >> name > >> - print > >> - print ' Version %s' % Mountstats_version > >> - print > >> - print ' iostat-like program to display NFS client per-mount > >> statistics.' > >> - print > >> - print ' The <interval> parameter specifies the amount of time in > >> seconds between' > >> - print ' each report. The first report contains statistics for the > >> time since each' > >> - print ' file system was mounted. Each subsequent report contains > >> statistics' > >> - print ' collected during the interval since the previous report.' > >> - print > >> - print ' If the <count> parameter is specified, the value of <count> > >> determines the' > >> - print ' number of reports generated at <interval> seconds apart. If > >> the interval' > >> - print ' parameter is specified without the <count> parameter, the > >> command generates' > >> - print ' reports continuously.' > >> - print > >> - print ' If one or more <mount point> names are specified, statistics > >> for only these' > >> - print ' mount points will be displayed. Otherwise, all NFS mount > >> points on the' > >> - print ' client are listed.' > >> - print > >> + print('usage: %s [ <interval> [ <count> ] ] [ <mount point> ] ' % > >> name) > >> + print() > >> + print(' Version %s' % Mountstats_version) > >> + print() > >> + print(' iostat-like program to display NFS client per-mount > >> statistics.') > >> + print() > >> + print(' The <interval> parameter specifies the amount of time in > >> seconds between') > >> + print(' each report. The first report contains statistics for the > >> time since each') > >> + print(' file system was mounted. Each subsequent report contains > >> statistics') > >> + print(' collected during the interval since the previous report.') > >> + print() > >> + print(' If the <count> parameter is specified, the value of <count> > >> determines the') > >> + print(' number of reports generated at <interval> seconds apart. If > >> the interval') > >> + print(' parameter is specified without the <count> parameter, the > >> command generates') > >> + print(' reports continuously.') > >> + print() > >> + print(' If one or more <mount point> names are specified, statistics > >> for only these') > >> + print(' mount points will be displayed. Otherwise, all NFS mount > >> points on the') > >> + print(' client are listed.') > >> + print() > >> > >> def print_iostat_summary(old, new, devices, time): > >> for device in devices: > >> @@ -530,7 +530,7 @@ def iostat_command(): > >> return > >> > >> if arg in ['-v', '--version', 'version']: > >> - print '%s version %s' % (sys.argv[0], Mountstats_version) > >> + print('%s version %s' % (sys.argv[0], Mountstats_version)) > >> return > >> > >> if arg == sys.argv[0]: > >> @@ -543,14 +543,14 @@ def iostat_command(): > >> if interval > 0: > >> interval_seen = True > >> else: > >> - print 'Illegal <interval> value' > >> + print('Illegal <interval> value') > >> return > >> elif not count_seen: > >> count = int(arg) > >> if count > 0: > >> count_seen = True > >> else: > >> - print 'Illegal <count> value' > >> + print('Illegal <count> value') > >> return > >> > >> # make certain devices contains only NFS mount points > >> @@ -563,13 +563,13 @@ def iostat_command(): > >> check += [device] > >> devices = check > >> else: > >> - for device, descr in mountstats.iteritems(): > >> + for device, descr in mountstats.items(): > >> stats = DeviceData() > >> stats.parse_stats(descr) > >> if stats.is_nfs_mountpoint(): > >> devices += [device] > >> if len(devices) == 0: > >> - print 'No NFS mount points were found' > >> + print('No NFS mount points were found') > >> return > >> > >> old_mountstats = None > >> @@ -608,7 +608,7 @@ try: > >> elif prog == 'ms-iostat': > >> iostat_command() > >> except KeyboardInterrupt: > >> - print 'Caught ^C... exiting' > >> + print('Caught ^C... exiting') > >> sys.exit(1) > >> > >> sys.exit(0) > >> diff --git a/tools/nfs-iostat/nfs-iostat.py > >> b/tools/nfs-iostat/nfs-iostat.py > >> index c035537..1c523f9 100644 > >> --- a/tools/nfs-iostat/nfs-iostat.py > >> +++ b/tools/nfs-iostat/nfs-iostat.py > >> @@ -95,7 +95,7 @@ class DeviceData: > >> if words[6] == 'nfs': > >> self.__nfs_data['statvers'] = words[7] > >> elif words[0] == 'age:': > >> - self.__nfs_data['age'] = long(words[1]) > >> + self.__nfs_data['age'] = int(words[1]) > >> elif words[0] == 'opts:': > >> self.__nfs_data['mountoptions'] = > >> ''.join(words[1:]).split(',') > >> elif words[0] == 'caps:': > >> @@ -116,7 +116,7 @@ class DeviceData: > >> elif words[0] == 'bytes:': > >> i = 1 > >> for key in NfsByteCounters: > >> - self.__nfs_data[key] = long(words[i]) > >> + self.__nfs_data[key] = int(words[i]) > >> i += 1 > >> > >> def __parse_rpc_line(self, words): > >> @@ -131,8 +131,8 @@ class DeviceData: > >> self.__rpc_data['rpcsends'] = int(words[4]) > >> self.__rpc_data['rpcreceives'] = int(words[5]) > >> self.__rpc_data['badxids'] = int(words[6]) > >> - self.__rpc_data['inflightsends'] = long(words[7]) > >> - self.__rpc_data['backlogutil'] = long(words[8]) > >> + self.__rpc_data['inflightsends'] = int(words[7]) > >> + self.__rpc_data['backlogutil'] = int(words[8]) > >> elif words[1] == 'tcp': > >> self.__rpc_data['port'] = words[2] > >> self.__rpc_data['bind_count'] = int(words[3]) > >> @@ -142,8 +142,8 @@ class DeviceData: > >> self.__rpc_data['rpcsends'] = int(words[7]) > >> self.__rpc_data['rpcreceives'] = int(words[8]) > >> self.__rpc_data['badxids'] = int(words[9]) > >> - self.__rpc_data['inflightsends'] = long(words[10]) > >> - self.__rpc_data['backlogutil'] = long(words[11]) > >> + self.__rpc_data['inflightsends'] = int(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]) > >> @@ -169,7 +169,7 @@ class DeviceData: > >> else: > >> op = words[0][:-1] > >> self.__rpc_data['ops'] += [op] > >> - self.__rpc_data[op] = [long(word) for word in words[1:]] > >> + self.__rpc_data[op] = [int(word) for word in words[1:]] > >> > >> def parse_stats(self, lines): > >> """Turn a list of lines from a mount stat file into a > >> @@ -271,7 +271,7 @@ class DeviceData: > >> nfs_stats = self.__nfs_data > >> lookup_ops = self.__rpc_data['LOOKUP'][0] > >> readdir_ops = self.__rpc_data['READDIR'][0] > >> - if self.__rpc_data.has_key('READDIRPLUS'): > >> + if 'READDIRPLUS' in self.__rpc_data: > >> readdir_ops += self.__rpc_data['READDIRPLUS'][0] > >> > >> dentry_revals = nfs_stats['dentryrevalidates'] > >> @@ -330,7 +330,7 @@ class DeviceData: > >> def __print_rpc_op_stats(self, op, sample_time): > >> """Print generic stats for one RPC op > >> """ > >> - if not self.__rpc_data.has_key(op): > >> + if op not in self.__rpc_data: > >> return > >> > >> rpc_stats = self.__rpc_data[op] > >> @@ -405,7 +405,7 @@ class DeviceData: > >> elif which == 2: > >> self.__print_rpc_op_stats('LOOKUP', sample_time) > >> self.__print_rpc_op_stats('READDIR', sample_time) > >> - if self.__rpc_data.has_key('READDIRPLUS'): > >> + if 'READDIRPLUS' in self.__rpc_data: > >> self.__print_rpc_op_stats('READDIRPLUS', sample_time) > >> self.__print_dir_cache_stats(sample_time) > >> elif which == 3: > >> @@ -450,7 +450,7 @@ def print_iostat_summary(old, new, devices, time, > >> options): > >> if old: > >> # Trim device list to only include intersection of old and new > >> data, > >> # this addresses umounts due to autofs mountpoints > >> - devicelist = filter(lambda x:x in devices,old) > >> + devicelist = [x for x in old if x in devices] > >> else: > >> devicelist = devices > >> > >> > > -- > > To unsubscribe from this list: send the line "unsubscribe linux-nfs" in > > the body of a message to majordomo@vger.kernel.org > > More majordomo info at http://vger.kernel.org/majordomo-info.html > >
On Oct 17, 2013, at 2:52 AM, Bohuslav Kabrda <bkabrda@redhat.com> wrote: > ----- Original Message ----- >> This just made it into f19 and it doesn't work for me: >> >> $ mountstats /mnt >> File "/usr/sbin/mountstats", line 272 >> (count, ((count * 100) / sends)), end=' ') >> ^ >> SyntaxError: invalid syntax >> >> $ python >> Python 2.7.5 (default, Oct 8 2013, 12:19:40) >> [GCC 4.8.1 20130603 (Red Hat 4.8.1-1)] on linux2 >> >> >> I think mountstats needs this line at the top of the file: >> >> from __future__ import print_function >> > > True, sorry for the bug. > Slavek I just posted this fix to the list as a patch. -dros > >> At least until python3 is the default on fedora. >> >> -dros >> >> On Sep 18, 2013, at 3:16 PM, Steve Dickson <SteveD@redhat.com> wrote: >> >>> >>> >>> On 17/09/13 05:21, Bohuslav Kabrda wrote: >>>> This will make mountstat and nfs-iostat run on Python 2.6, 2.7 >>>> and >= 3.0 >>>> >>>> Signed-off-by: Bohuslav Kabrda <bkabrda@redhat.com> >>> Committed! >>> >>> steved. >>> >>>> --- >>>> tools/mountstats/mountstats.py | 310 >>>> ++++++++++++++++++++--------------------- >>>> tools/nfs-iostat/nfs-iostat.py | 22 +-- >>>> 2 files changed, 166 insertions(+), 166 deletions(-) >>>> >>>> diff --git a/tools/mountstats/mountstats.py >>>> b/tools/mountstats/mountstats.py >>>> index b95b71d..3f5fea5 100644 >>>> --- a/tools/mountstats/mountstats.py >>>> +++ b/tools/mountstats/mountstats.py >>>> @@ -53,7 +53,7 @@ class DeviceData: >>>> if words[6].find('nfs') != -1: >>>> self.__nfs_data['statvers'] = words[7] >>>> elif words[0] == 'age:': >>>> - self.__nfs_data['age'] = long(words[1]) >>>> + self.__nfs_data['age'] = int(words[1]) >>>> elif words[0] == 'opts:': >>>> self.__nfs_data['mountoptions'] = >>>> ''.join(words[1:]).split(',') >>>> elif words[0] == 'caps:': >>>> @@ -91,12 +91,12 @@ class DeviceData: >>>> self.__nfs_data['shortwrites'] = int(words[22]) >>>> self.__nfs_data['delay'] = int(words[23]) >>>> elif words[0] == 'bytes:': >>>> - self.__nfs_data['normalreadbytes'] = long(words[1]) >>>> - self.__nfs_data['normalwritebytes'] = long(words[2]) >>>> - self.__nfs_data['directreadbytes'] = long(words[3]) >>>> - self.__nfs_data['directwritebytes'] = long(words[4]) >>>> - self.__nfs_data['serverreadbytes'] = long(words[5]) >>>> - self.__nfs_data['serverwritebytes'] = long(words[6]) >>>> + self.__nfs_data['normalreadbytes'] = int(words[1]) >>>> + self.__nfs_data['normalwritebytes'] = int(words[2]) >>>> + self.__nfs_data['directreadbytes'] = int(words[3]) >>>> + self.__nfs_data['directwritebytes'] = int(words[4]) >>>> + self.__nfs_data['serverreadbytes'] = int(words[5]) >>>> + self.__nfs_data['serverwritebytes'] = int(words[6]) >>>> >>>> def __parse_rpc_line(self, words): >>>> if words[0] == 'RPC': >>>> @@ -110,8 +110,8 @@ class DeviceData: >>>> self.__rpc_data['rpcsends'] = int(words[4]) >>>> self.__rpc_data['rpcreceives'] = int(words[5]) >>>> self.__rpc_data['badxids'] = int(words[6]) >>>> - self.__rpc_data['inflightsends'] = long(words[7]) >>>> - self.__rpc_data['backlogutil'] = long(words[8]) >>>> + self.__rpc_data['inflightsends'] = int(words[7]) >>>> + self.__rpc_data['backlogutil'] = int(words[8]) >>>> elif words[1] == 'tcp': >>>> self.__rpc_data['port'] = words[2] >>>> self.__rpc_data['bind_count'] = int(words[3]) >>>> @@ -121,7 +121,7 @@ class DeviceData: >>>> self.__rpc_data['rpcsends'] = int(words[7]) >>>> self.__rpc_data['rpcreceives'] = int(words[8]) >>>> self.__rpc_data['badxids'] = int(words[9]) >>>> - self.__rpc_data['inflightsends'] = long(words[10]) >>>> + self.__rpc_data['inflightsends'] = int(words[10]) >>>> self.__rpc_data['backlogutil'] = int(words[11]) >>>> elif words[1] == 'rdma': >>>> self.__rpc_data['port'] = words[2] >>>> @@ -148,7 +148,7 @@ class DeviceData: >>>> else: >>>> op = words[0][:-1] >>>> self.__rpc_data['ops'] += [op] >>>> - self.__rpc_data[op] = [long(word) for word in words[1:]] >>>> + self.__rpc_data[op] = [int(word) for word in words[1:]] >>>> >>>> def parse_stats(self, lines): >>>> """Turn a list of lines from a mount stat file into a >>>> @@ -179,81 +179,81 @@ class DeviceData: >>>> def display_nfs_options(self): >>>> """Pretty-print the NFS options >>>> """ >>>> - print 'Stats for %s mounted on %s:' % \ >>>> - (self.__nfs_data['export'], self.__nfs_data['mountpoint']) >>>> - >>>> - print ' NFS mount options: %s' % >>>> ','.join(self.__nfs_data['mountoptions']) >>>> - print ' NFS server capabilities: %s' % >>>> ','.join(self.__nfs_data['servercapabilities']) >>>> - if self.__nfs_data.has_key('nfsv4flags'): >>>> - print ' NFSv4 capability flags: %s' % >>>> ','.join(self.__nfs_data['nfsv4flags']) >>>> - if self.__nfs_data.has_key('pseudoflavor'): >>>> - print ' NFS security flavor: %d pseudoflavor: %d' % \ >>>> - (self.__nfs_data['flavor'], >>>> self.__nfs_data['pseudoflavor']) >>>> + print('Stats for %s mounted on %s:' % \ >>>> + (self.__nfs_data['export'], self.__nfs_data['mountpoint'])) >>>> + >>>> + print(' NFS mount options: %s' % >>>> ','.join(self.__nfs_data['mountoptions'])) >>>> + print(' NFS server capabilities: %s' % >>>> ','.join(self.__nfs_data['servercapabilities'])) >>>> + if 'nfsv4flags' in self.__nfs_data: >>>> + print(' NFSv4 capability flags: %s' % >>>> ','.join(self.__nfs_data['nfsv4flags'])) >>>> + if 'pseudoflavor' in self.__nfs_data: >>>> + print(' NFS security flavor: %d pseudoflavor: %d' % \ >>>> + (self.__nfs_data['flavor'], >>>> self.__nfs_data['pseudoflavor'])) >>>> else: >>>> - print ' NFS security flavor: %d' % self.__nfs_data['flavor'] >>>> + print(' NFS security flavor: %d' % >>>> self.__nfs_data['flavor']) >>>> >>>> def display_nfs_events(self): >>>> """Pretty-print the NFS event counters >>>> """ >>>> - print >>>> - print 'Cache events:' >>>> - print ' data cache invalidated %d times' % >>>> self.__nfs_data['datainvalidates'] >>>> - print ' attribute cache invalidated %d times' % >>>> self.__nfs_data['attrinvalidates'] >>>> - print ' inodes synced %d times' % self.__nfs_data['syncinodes'] >>>> - print >>>> - print 'VFS calls:' >>>> - print ' VFS requested %d inode revalidations' % >>>> self.__nfs_data['inoderevalidates'] >>>> - print ' VFS requested %d dentry revalidations' % >>>> self.__nfs_data['dentryrevalidates'] >>>> - print >>>> - print ' VFS called nfs_readdir() %d times' % >>>> self.__nfs_data['vfsreaddir'] >>>> - print ' VFS called nfs_lookup() %d times' % >>>> self.__nfs_data['vfslookup'] >>>> - print ' VFS called nfs_permission() %d times' % >>>> self.__nfs_data['vfspermission'] >>>> - print ' VFS called nfs_file_open() %d times' % >>>> self.__nfs_data['vfsopen'] >>>> - print ' VFS called nfs_file_flush() %d times' % >>>> self.__nfs_data['vfsflush'] >>>> - print ' VFS called nfs_lock() %d times' % >>>> self.__nfs_data['vfslock'] >>>> - print ' VFS called nfs_fsync() %d times' % >>>> self.__nfs_data['vfsfsync'] >>>> - print ' VFS called nfs_file_release() %d times' % >>>> self.__nfs_data['vfsrelease'] >>>> - print >>>> - print 'VM calls:' >>>> - print ' VFS called nfs_readpage() %d times' % >>>> self.__nfs_data['vfsreadpage'] >>>> - print ' VFS called nfs_readpages() %d times' % >>>> self.__nfs_data['vfsreadpages'] >>>> - print ' VFS called nfs_writepage() %d times' % >>>> self.__nfs_data['vfswritepage'] >>>> - print ' VFS called nfs_writepages() %d times' % >>>> self.__nfs_data['vfswritepages'] >>>> - print >>>> - print 'Generic NFS counters:' >>>> - print ' File size changing operations:' >>>> - print ' truncating SETATTRs: %d extending WRITEs: %d' % \ >>>> - (self.__nfs_data['setattrtrunc'], >>>> self.__nfs_data['extendwrite']) >>>> - print ' %d silly renames' % self.__nfs_data['sillyrenames'] >>>> - print ' short reads: %d short writes: %d' % \ >>>> - (self.__nfs_data['shortreads'], >>>> self.__nfs_data['shortwrites']) >>>> - print ' NFSERR_DELAYs from server: %d' % >>>> self.__nfs_data['delay'] >>>> + print() >>>> + print('Cache events:') >>>> + print(' data cache invalidated %d times' % >>>> self.__nfs_data['datainvalidates']) >>>> + print(' attribute cache invalidated %d times' % >>>> self.__nfs_data['attrinvalidates']) >>>> + print(' inodes synced %d times' % self.__nfs_data['syncinodes']) >>>> + print() >>>> + print('VFS calls:') >>>> + print(' VFS requested %d inode revalidations' % >>>> self.__nfs_data['inoderevalidates']) >>>> + print(' VFS requested %d dentry revalidations' % >>>> self.__nfs_data['dentryrevalidates']) >>>> + print() >>>> + print(' VFS called nfs_readdir() %d times' % >>>> self.__nfs_data['vfsreaddir']) >>>> + print(' VFS called nfs_lookup() %d times' % >>>> self.__nfs_data['vfslookup']) >>>> + print(' VFS called nfs_permission() %d times' % >>>> self.__nfs_data['vfspermission']) >>>> + print(' VFS called nfs_file_open() %d times' % >>>> self.__nfs_data['vfsopen']) >>>> + print(' VFS called nfs_file_flush() %d times' % >>>> self.__nfs_data['vfsflush']) >>>> + print(' VFS called nfs_lock() %d times' % >>>> self.__nfs_data['vfslock']) >>>> + print(' VFS called nfs_fsync() %d times' % >>>> self.__nfs_data['vfsfsync']) >>>> + print(' VFS called nfs_file_release() %d times' % >>>> self.__nfs_data['vfsrelease']) >>>> + print() >>>> + print('VM calls:') >>>> + print(' VFS called nfs_readpage() %d times' % >>>> self.__nfs_data['vfsreadpage']) >>>> + print(' VFS called nfs_readpages() %d times' % >>>> self.__nfs_data['vfsreadpages']) >>>> + print(' VFS called nfs_writepage() %d times' % >>>> self.__nfs_data['vfswritepage']) >>>> + print(' VFS called nfs_writepages() %d times' % >>>> self.__nfs_data['vfswritepages']) >>>> + print() >>>> + print('Generic NFS counters:') >>>> + print(' File size changing operations:') >>>> + print(' truncating SETATTRs: %d extending WRITEs: %d' % \ >>>> + (self.__nfs_data['setattrtrunc'], >>>> self.__nfs_data['extendwrite'])) >>>> + print(' %d silly renames' % self.__nfs_data['sillyrenames']) >>>> + print(' short reads: %d short writes: %d' % \ >>>> + (self.__nfs_data['shortreads'], >>>> self.__nfs_data['shortwrites'])) >>>> + print(' NFSERR_DELAYs from server: %d' % >>>> self.__nfs_data['delay']) >>>> >>>> def display_nfs_bytes(self): >>>> """Pretty-print the NFS event counters >>>> """ >>>> - print >>>> - print 'NFS byte counts:' >>>> - print ' applications read %d bytes via read(2)' % >>>> self.__nfs_data['normalreadbytes'] >>>> - print ' applications wrote %d bytes via write(2)' % >>>> self.__nfs_data['normalwritebytes'] >>>> - print ' applications read %d bytes via O_DIRECT read(2)' % >>>> self.__nfs_data['directreadbytes'] >>>> - print ' applications wrote %d bytes via O_DIRECT write(2)' % >>>> self.__nfs_data['directwritebytes'] >>>> - print ' client read %d bytes via NFS READ' % >>>> self.__nfs_data['serverreadbytes'] >>>> - print ' client wrote %d bytes via NFS WRITE' % >>>> self.__nfs_data['serverwritebytes'] >>>> + print() >>>> + print('NFS byte counts:') >>>> + print(' applications read %d bytes via read(2)' % >>>> self.__nfs_data['normalreadbytes']) >>>> + print(' applications wrote %d bytes via write(2)' % >>>> self.__nfs_data['normalwritebytes']) >>>> + print(' applications read %d bytes via O_DIRECT read(2)' % >>>> self.__nfs_data['directreadbytes']) >>>> + print(' applications wrote %d bytes via O_DIRECT write(2)' % >>>> self.__nfs_data['directwritebytes']) >>>> + print(' client read %d bytes via NFS READ' % >>>> self.__nfs_data['serverreadbytes']) >>>> + print(' client wrote %d bytes via NFS WRITE' % >>>> self.__nfs_data['serverwritebytes']) >>>> >>>> def display_rpc_generic_stats(self): >>>> """Pretty-print the generic RPC stats >>>> """ >>>> sends = self.__rpc_data['rpcsends'] >>>> >>>> - print >>>> - print 'RPC statistics:' >>>> + print() >>>> + print('RPC statistics:') >>>> >>>> - print ' %d RPC requests sent, %d RPC replies received (%d XIDs >>>> not found)' % \ >>>> - (sends, self.__rpc_data['rpcreceives'], >>>> self.__rpc_data['badxids']) >>>> + print(' %d RPC requests sent, %d RPC replies received (%d XIDs >>>> not found)' % \ >>>> + (sends, self.__rpc_data['rpcreceives'], >>>> self.__rpc_data['badxids'])) >>>> if sends != 0: >>>> - print ' average backlog queue length: %d' % \ >>>> - (float(self.__rpc_data['backlogutil']) / sends) >>>> + print(' average backlog queue length: %d' % \ >>>> + (float(self.__rpc_data['backlogutil']) / sends)) >>>> >>>> def display_rpc_op_stats(self): >>>> """Pretty-print the per-op stats >>>> @@ -261,23 +261,23 @@ class DeviceData: >>>> sends = self.__rpc_data['rpcsends'] >>>> >>>> # XXX: these should be sorted by 'count' >>>> - print >>>> + print() >>>> for op in self.__rpc_data['ops']: >>>> stats = self.__rpc_data[op] >>>> count = stats[0] >>>> retrans = stats[1] - count >>>> if count != 0: >>>> - print '%s:' % op >>>> - print '\t%d ops (%d%%)' % \ >>>> - (count, ((count * 100) / sends)), >>>> - print '\t%d retrans (%d%%)' % (retrans, ((retrans * 100) >>>> / count)), >>>> - print '\t%d major timeouts' % stats[2] >>>> - print '\tavg bytes sent per op: %d\tavg bytes received >>>> per op: %d' % \ >>>> - (stats[3] / count, stats[4] / count) >>>> - print '\tbacklog wait: %f' % (float(stats[5]) / count), >>>> - print '\tRTT: %f' % (float(stats[6]) / count), >>>> - print '\ttotal execute time: %f (milliseconds)' % \ >>>> - (float(stats[7]) / count) >>>> + print('%s:' % op) >>>> + print('\t%d ops (%d%%)' % \ >>>> + (count, ((count * 100) / sends)), end=' ') >>>> + print('\t%d retrans (%d%%)' % (retrans, ((retrans * 100) >>>> / count)), end=' ') >>>> + print('\t%d major timeouts' % stats[2]) >>>> + print('\tavg bytes sent per op: %d\tavg bytes received >>>> per op: %d' % \ >>>> + (stats[3] / count, stats[4] / count)) >>>> + print('\tbacklog wait: %f' % (float(stats[5]) / count), >>>> end=' ') >>>> + print('\tRTT: %f' % (float(stats[6]) / count), end=' ') >>>> + print('\ttotal execute time: %f (milliseconds)' % \ >>>> + (float(stats[7]) / count)) >>>> >>>> def compare_iostats(self, old_stats): >>>> """Return the difference between two sets of stats >>>> @@ -285,9 +285,9 @@ class DeviceData: >>>> result = DeviceData() >>>> >>>> # copy self into result >>>> - for key, value in self.__nfs_data.iteritems(): >>>> + for key, value in self.__nfs_data.items(): >>>> result.__nfs_data[key] = value >>>> - for key, value in self.__rpc_data.iteritems(): >>>> + for key, value in self.__rpc_data.items(): >>>> result.__rpc_data[key] = value >>>> >>>> # compute the difference of each item in the list >>>> @@ -295,7 +295,7 @@ class DeviceData: >>>> # the reference to them. so we build new lists here >>>> # for the result object. >>>> for op in result.__rpc_data['ops']: >>>> - result.__rpc_data[op] = map(difference, self.__rpc_data[op], >>>> old_stats.__rpc_data[op]) >>>> + result.__rpc_data[op] = list(map(difference, >>>> self.__rpc_data[op], old_stats.__rpc_data[op])) >>>> >>>> # update the remaining keys we care about >>>> result.__rpc_data['rpcsends'] -= old_stats.__rpc_data['rpcsends'] >>>> @@ -312,17 +312,17 @@ class DeviceData: >>>> if sample_time == 0: >>>> sample_time = float(self.__nfs_data['age']) >>>> >>>> - print >>>> - print '%s mounted on %s:' % \ >>>> - (self.__nfs_data['export'], self.__nfs_data['mountpoint']) >>>> + print() >>>> + print('%s mounted on %s:' % \ >>>> + (self.__nfs_data['export'], self.__nfs_data['mountpoint'])) >>>> >>>> - print '\top/s\trpc bklog' >>>> - print '\t%.2f' % (sends / sample_time), >>>> + print('\top/s\trpc bklog') >>>> + print('\t%.2f' % (sends / sample_time), end=' ') >>>> if sends != 0: >>>> - print '\t%.2f' % \ >>>> - ((float(self.__rpc_data['backlogutil']) / sends) / >>>> sample_time) >>>> + print('\t%.2f' % \ >>>> + ((float(self.__rpc_data['backlogutil']) / sends) / >>>> sample_time)) >>>> else: >>>> - print '\t0.00' >>>> + print('\t0.00') >>>> >>>> # reads: ops/s, kB/s, avg rtt, and avg exe >>>> # XXX: include avg xfer size and retransmits? >>>> @@ -332,15 +332,15 @@ 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 '\t\t%.2f' % (ops / sample_time), >>>> - print '\t\t%.2f' % (kilobytes / sample_time), >>>> + print('\treads:\tops/s\t\tkB/s\t\tavg RTT (ms)\tavg exe (ms)') >>>> + print('\t\t%.2f' % (ops / sample_time), end=' ') >>>> + print('\t\t%.2f' % (kilobytes / sample_time), end=' ') >>>> if ops != 0: >>>> - print '\t\t%.2f' % (rtt / ops), >>>> - print '\t\t%.2f' % (exe / ops) >>>> + print('\t\t%.2f' % (rtt / ops), end=' ') >>>> + print('\t\t%.2f' % (exe / ops)) >>>> else: >>>> - print '\t\t0.00', >>>> - print '\t\t0.00' >>>> + print('\t\t0.00', end=' ') >>>> + print('\t\t0.00') >>>> >>>> # writes: ops/s, kB/s, avg rtt, and avg exe >>>> # XXX: include avg xfer size and retransmits? >>>> @@ -350,15 +350,15 @@ 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 '\t\t%.2f' % (ops / sample_time), >>>> - print '\t\t%.2f' % (kilobytes / sample_time), >>>> + print('\twrites:\tops/s\t\tkB/s\t\tavg RTT (ms)\tavg exe (ms)') >>>> + print('\t\t%.2f' % (ops / sample_time), end=' ') >>>> + print('\t\t%.2f' % (kilobytes / sample_time), end=' ') >>>> if ops != 0: >>>> - print '\t\t%.2f' % (rtt / ops), >>>> - print '\t\t%.2f' % (exe / ops) >>>> + print('\t\t%.2f' % (rtt / ops), end=' ') >>>> + print('\t\t%.2f' % (exe / ops)) >>>> else: >>>> - print '\t\t0.00', >>>> - print '\t\t0.00' >>>> + print('\t\t0.00', end=' ') >>>> + print('\t\t0.00') >>>> >>>> def parse_stats_file(filename): >>>> """pop the contents of a mountstats file into a dictionary, >>>> @@ -388,18 +388,18 @@ def parse_stats_file(filename): >>>> return ms_dict >>>> >>>> def print_mountstats_help(name): >>>> - print 'usage: %s [ options ] <mount point>' % name >>>> - print >>>> - print ' Version %s' % Mountstats_version >>>> - print >>>> - print ' Display NFS client per-mount statistics.' >>>> - print >>>> - print ' --version display the version of this command' >>>> - print ' --nfs display only the NFS statistics' >>>> - print ' --rpc display only the RPC statistics' >>>> - print ' --start sample and save statistics' >>>> - print ' --end resample statistics and compare them with >>>> saved' >>>> - print >>>> + print('usage: %s [ options ] <mount point>' % name) >>>> + print() >>>> + print(' Version %s' % Mountstats_version) >>>> + print() >>>> + print(' Display NFS client per-mount statistics.') >>>> + print() >>>> + print(' --version display the version of this command') >>>> + print(' --nfs display only the NFS statistics') >>>> + print(' --rpc display only the RPC statistics') >>>> + print(' --start sample and save statistics') >>>> + print(' --end resample statistics and compare them with >>>> saved') >>>> + print() >>>> >>>> def mountstats_command(): >>>> """Mountstats command >>>> @@ -414,7 +414,7 @@ def mountstats_command(): >>>> return >>>> >>>> if arg in ['-v', '--version', 'version']: >>>> - print '%s version %s' % (sys.argv[0], Mountstats_version) >>>> + print('%s version %s' % (sys.argv[0], Mountstats_version)) >>>> sys.exit(0) >>>> >>>> if arg in ['-n', '--nfs']: >>>> @@ -426,10 +426,10 @@ def mountstats_command(): >>>> continue >>>> >>>> if arg in ['-s', '--start']: >>>> - raise Exception, 'Sampling is not yet implemented' >>>> + raise Exception('Sampling is not yet implemented') >>>> >>>> if arg in ['-e', '--end']: >>>> - raise Exception, 'Sampling is not yet implemented' >>>> + raise Exception('Sampling is not yet implemented') >>>> >>>> if arg == sys.argv[0]: >>>> continue >>>> @@ -448,14 +448,14 @@ def mountstats_command(): >>>> >>>> for mp in mountpoints: >>>> if mp not in mountstats: >>>> - print 'Statistics for mount point %s not found' % mp >>>> + print('Statistics for mount point %s not found' % mp) >>>> continue >>>> >>>> stats = DeviceData() >>>> stats.parse_stats(mountstats[mp]) >>>> >>>> if not stats.is_nfs_mountpoint(): >>>> - print 'Mount point %s exists but is not an NFS mount' % mp >>>> + print('Mount point %s exists but is not an NFS mount' % mp) >>>> continue >>>> >>>> if nfs_only: >>>> @@ -472,37 +472,37 @@ def mountstats_command(): >>>> stats.display_rpc_op_stats() >>>> >>>> def print_nfsstat_help(name): >>>> - print 'usage: %s [ options ]' % name >>>> - print >>>> - print ' Version %s' % Mountstats_version >>>> - print >>>> - print ' nfsstat-like program that uses NFS client per-mount >>>> statistics.' >>>> - print >>>> + print('usage: %s [ options ]' % name) >>>> + print() >>>> + print(' Version %s' % Mountstats_version) >>>> + print() >>>> + print(' nfsstat-like program that uses NFS client per-mount >>>> statistics.') >>>> + print() >>>> >>>> def nfsstat_command(): >>>> print_nfsstat_help(prog) >>>> >>>> def print_iostat_help(name): >>>> - print 'usage: %s [ <interval> [ <count> ] ] [ <mount point> ] ' % >>>> name >>>> - print >>>> - print ' Version %s' % Mountstats_version >>>> - print >>>> - print ' iostat-like program to display NFS client per-mount >>>> statistics.' >>>> - print >>>> - print ' The <interval> parameter specifies the amount of time in >>>> seconds between' >>>> - print ' each report. The first report contains statistics for the >>>> time since each' >>>> - print ' file system was mounted. Each subsequent report contains >>>> statistics' >>>> - print ' collected during the interval since the previous report.' >>>> - print >>>> - print ' If the <count> parameter is specified, the value of <count> >>>> determines the' >>>> - print ' number of reports generated at <interval> seconds apart. If >>>> the interval' >>>> - print ' parameter is specified without the <count> parameter, the >>>> command generates' >>>> - print ' reports continuously.' >>>> - print >>>> - print ' If one or more <mount point> names are specified, statistics >>>> for only these' >>>> - print ' mount points will be displayed. Otherwise, all NFS mount >>>> points on the' >>>> - print ' client are listed.' >>>> - print >>>> + print('usage: %s [ <interval> [ <count> ] ] [ <mount point> ] ' % >>>> name) >>>> + print() >>>> + print(' Version %s' % Mountstats_version) >>>> + print() >>>> + print(' iostat-like program to display NFS client per-mount >>>> statistics.') >>>> + print() >>>> + print(' The <interval> parameter specifies the amount of time in >>>> seconds between') >>>> + print(' each report. The first report contains statistics for the >>>> time since each') >>>> + print(' file system was mounted. Each subsequent report contains >>>> statistics') >>>> + print(' collected during the interval since the previous report.') >>>> + print() >>>> + print(' If the <count> parameter is specified, the value of <count> >>>> determines the') >>>> + print(' number of reports generated at <interval> seconds apart. If >>>> the interval') >>>> + print(' parameter is specified without the <count> parameter, the >>>> command generates') >>>> + print(' reports continuously.') >>>> + print() >>>> + print(' If one or more <mount point> names are specified, statistics >>>> for only these') >>>> + print(' mount points will be displayed. Otherwise, all NFS mount >>>> points on the') >>>> + print(' client are listed.') >>>> + print() >>>> >>>> def print_iostat_summary(old, new, devices, time): >>>> for device in devices: >>>> @@ -530,7 +530,7 @@ def iostat_command(): >>>> return >>>> >>>> if arg in ['-v', '--version', 'version']: >>>> - print '%s version %s' % (sys.argv[0], Mountstats_version) >>>> + print('%s version %s' % (sys.argv[0], Mountstats_version)) >>>> return >>>> >>>> if arg == sys.argv[0]: >>>> @@ -543,14 +543,14 @@ def iostat_command(): >>>> if interval > 0: >>>> interval_seen = True >>>> else: >>>> - print 'Illegal <interval> value' >>>> + print('Illegal <interval> value') >>>> return >>>> elif not count_seen: >>>> count = int(arg) >>>> if count > 0: >>>> count_seen = True >>>> else: >>>> - print 'Illegal <count> value' >>>> + print('Illegal <count> value') >>>> return >>>> >>>> # make certain devices contains only NFS mount points >>>> @@ -563,13 +563,13 @@ def iostat_command(): >>>> check += [device] >>>> devices = check >>>> else: >>>> - for device, descr in mountstats.iteritems(): >>>> + for device, descr in mountstats.items(): >>>> stats = DeviceData() >>>> stats.parse_stats(descr) >>>> if stats.is_nfs_mountpoint(): >>>> devices += [device] >>>> if len(devices) == 0: >>>> - print 'No NFS mount points were found' >>>> + print('No NFS mount points were found') >>>> return >>>> >>>> old_mountstats = None >>>> @@ -608,7 +608,7 @@ try: >>>> elif prog == 'ms-iostat': >>>> iostat_command() >>>> except KeyboardInterrupt: >>>> - print 'Caught ^C... exiting' >>>> + print('Caught ^C... exiting') >>>> sys.exit(1) >>>> >>>> sys.exit(0) >>>> diff --git a/tools/nfs-iostat/nfs-iostat.py >>>> b/tools/nfs-iostat/nfs-iostat.py >>>> index c035537..1c523f9 100644 >>>> --- a/tools/nfs-iostat/nfs-iostat.py >>>> +++ b/tools/nfs-iostat/nfs-iostat.py >>>> @@ -95,7 +95,7 @@ class DeviceData: >>>> if words[6] == 'nfs': >>>> self.__nfs_data['statvers'] = words[7] >>>> elif words[0] == 'age:': >>>> - self.__nfs_data['age'] = long(words[1]) >>>> + self.__nfs_data['age'] = int(words[1]) >>>> elif words[0] == 'opts:': >>>> self.__nfs_data['mountoptions'] = >>>> ''.join(words[1:]).split(',') >>>> elif words[0] == 'caps:': >>>> @@ -116,7 +116,7 @@ class DeviceData: >>>> elif words[0] == 'bytes:': >>>> i = 1 >>>> for key in NfsByteCounters: >>>> - self.__nfs_data[key] = long(words[i]) >>>> + self.__nfs_data[key] = int(words[i]) >>>> i += 1 >>>> >>>> def __parse_rpc_line(self, words): >>>> @@ -131,8 +131,8 @@ class DeviceData: >>>> self.__rpc_data['rpcsends'] = int(words[4]) >>>> self.__rpc_data['rpcreceives'] = int(words[5]) >>>> self.__rpc_data['badxids'] = int(words[6]) >>>> - self.__rpc_data['inflightsends'] = long(words[7]) >>>> - self.__rpc_data['backlogutil'] = long(words[8]) >>>> + self.__rpc_data['inflightsends'] = int(words[7]) >>>> + self.__rpc_data['backlogutil'] = int(words[8]) >>>> elif words[1] == 'tcp': >>>> self.__rpc_data['port'] = words[2] >>>> self.__rpc_data['bind_count'] = int(words[3]) >>>> @@ -142,8 +142,8 @@ class DeviceData: >>>> self.__rpc_data['rpcsends'] = int(words[7]) >>>> self.__rpc_data['rpcreceives'] = int(words[8]) >>>> self.__rpc_data['badxids'] = int(words[9]) >>>> - self.__rpc_data['inflightsends'] = long(words[10]) >>>> - self.__rpc_data['backlogutil'] = long(words[11]) >>>> + self.__rpc_data['inflightsends'] = int(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]) >>>> @@ -169,7 +169,7 @@ class DeviceData: >>>> else: >>>> op = words[0][:-1] >>>> self.__rpc_data['ops'] += [op] >>>> - self.__rpc_data[op] = [long(word) for word in words[1:]] >>>> + self.__rpc_data[op] = [int(word) for word in words[1:]] >>>> >>>> def parse_stats(self, lines): >>>> """Turn a list of lines from a mount stat file into a >>>> @@ -271,7 +271,7 @@ class DeviceData: >>>> nfs_stats = self.__nfs_data >>>> lookup_ops = self.__rpc_data['LOOKUP'][0] >>>> readdir_ops = self.__rpc_data['READDIR'][0] >>>> - if self.__rpc_data.has_key('READDIRPLUS'): >>>> + if 'READDIRPLUS' in self.__rpc_data: >>>> readdir_ops += self.__rpc_data['READDIRPLUS'][0] >>>> >>>> dentry_revals = nfs_stats['dentryrevalidates'] >>>> @@ -330,7 +330,7 @@ class DeviceData: >>>> def __print_rpc_op_stats(self, op, sample_time): >>>> """Print generic stats for one RPC op >>>> """ >>>> - if not self.__rpc_data.has_key(op): >>>> + if op not in self.__rpc_data: >>>> return >>>> >>>> rpc_stats = self.__rpc_data[op] >>>> @@ -405,7 +405,7 @@ class DeviceData: >>>> elif which == 2: >>>> self.__print_rpc_op_stats('LOOKUP', sample_time) >>>> self.__print_rpc_op_stats('READDIR', sample_time) >>>> - if self.__rpc_data.has_key('READDIRPLUS'): >>>> + if 'READDIRPLUS' in self.__rpc_data: >>>> self.__print_rpc_op_stats('READDIRPLUS', sample_time) >>>> self.__print_dir_cache_stats(sample_time) >>>> elif which == 3: >>>> @@ -450,7 +450,7 @@ def print_iostat_summary(old, new, devices, time, >>>> options): >>>> if old: >>>> # Trim device list to only include intersection of old and new >>>> data, >>>> # this addresses umounts due to autofs mountpoints >>>> - devicelist = filter(lambda x:x in devices,old) >>>> + devicelist = [x for x in old if x in devices] >>>> else: >>>> devicelist = devices >>>> >>>> >>> -- >>> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in >>> the body of a message to majordomo@vger.kernel.org >>> More majordomo info at http://vger.kernel.org/majordomo-info.html >> >> > > -- > Regards, > Bohuslav "Slavek" Kabrda. -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/tools/mountstats/mountstats.py b/tools/mountstats/mountstats.py index b95b71d..3f5fea5 100644 --- a/tools/mountstats/mountstats.py +++ b/tools/mountstats/mountstats.py @@ -53,7 +53,7 @@ class DeviceData: if words[6].find('nfs') != -1: self.__nfs_data['statvers'] = words[7] elif words[0] == 'age:': - self.__nfs_data['age'] = long(words[1]) + self.__nfs_data['age'] = int(words[1]) elif words[0] == 'opts:': self.__nfs_data['mountoptions'] = ''.join(words[1:]).split(',') elif words[0] == 'caps:': @@ -91,12 +91,12 @@ class DeviceData: self.__nfs_data['shortwrites'] = int(words[22]) self.__nfs_data['delay'] = int(words[23]) elif words[0] == 'bytes:': - self.__nfs_data['normalreadbytes'] = long(words[1]) - self.__nfs_data['normalwritebytes'] = long(words[2]) - self.__nfs_data['directreadbytes'] = long(words[3]) - self.__nfs_data['directwritebytes'] = long(words[4]) - self.__nfs_data['serverreadbytes'] = long(words[5]) - self.__nfs_data['serverwritebytes'] = long(words[6]) + self.__nfs_data['normalreadbytes'] = int(words[1]) + self.__nfs_data['normalwritebytes'] = int(words[2]) + self.__nfs_data['directreadbytes'] = int(words[3]) + self.__nfs_data['directwritebytes'] = int(words[4]) + self.__nfs_data['serverreadbytes'] = int(words[5]) + self.__nfs_data['serverwritebytes'] = int(words[6]) def __parse_rpc_line(self, words): if words[0] == 'RPC': @@ -110,8 +110,8 @@ class DeviceData: self.__rpc_data['rpcsends'] = int(words[4]) self.__rpc_data['rpcreceives'] = int(words[5]) self.__rpc_data['badxids'] = int(words[6]) - self.__rpc_data['inflightsends'] = long(words[7]) - self.__rpc_data['backlogutil'] = long(words[8]) + self.__rpc_data['inflightsends'] = int(words[7]) + self.__rpc_data['backlogutil'] = int(words[8]) elif words[1] == 'tcp': self.__rpc_data['port'] = words[2] self.__rpc_data['bind_count'] = int(words[3]) @@ -121,7 +121,7 @@ class DeviceData: self.__rpc_data['rpcsends'] = int(words[7]) self.__rpc_data['rpcreceives'] = int(words[8]) self.__rpc_data['badxids'] = int(words[9]) - self.__rpc_data['inflightsends'] = long(words[10]) + self.__rpc_data['inflightsends'] = int(words[10]) self.__rpc_data['backlogutil'] = int(words[11]) elif words[1] == 'rdma': self.__rpc_data['port'] = words[2] @@ -148,7 +148,7 @@ class DeviceData: else: op = words[0][:-1] self.__rpc_data['ops'] += [op] - self.__rpc_data[op] = [long(word) for word in words[1:]] + self.__rpc_data[op] = [int(word) for word in words[1:]] def parse_stats(self, lines): """Turn a list of lines from a mount stat file into a @@ -179,81 +179,81 @@ class DeviceData: def display_nfs_options(self): """Pretty-print the NFS options """ - print 'Stats for %s mounted on %s:' % \ - (self.__nfs_data['export'], self.__nfs_data['mountpoint']) - - print ' NFS mount options: %s' % ','.join(self.__nfs_data['mountoptions']) - print ' NFS server capabilities: %s' % ','.join(self.__nfs_data['servercapabilities']) - if self.__nfs_data.has_key('nfsv4flags'): - print ' NFSv4 capability flags: %s' % ','.join(self.__nfs_data['nfsv4flags']) - if self.__nfs_data.has_key('pseudoflavor'): - print ' NFS security flavor: %d pseudoflavor: %d' % \ - (self.__nfs_data['flavor'], self.__nfs_data['pseudoflavor']) + print('Stats for %s mounted on %s:' % \ + (self.__nfs_data['export'], self.__nfs_data['mountpoint'])) + + print(' NFS mount options: %s' % ','.join(self.__nfs_data['mountoptions'])) + print(' NFS server capabilities: %s' % ','.join(self.__nfs_data['servercapabilities'])) + if 'nfsv4flags' in self.__nfs_data: + print(' NFSv4 capability flags: %s' % ','.join(self.__nfs_data['nfsv4flags'])) + if 'pseudoflavor' in self.__nfs_data: + print(' NFS security flavor: %d pseudoflavor: %d' % \ + (self.__nfs_data['flavor'], self.__nfs_data['pseudoflavor'])) else: - print ' NFS security flavor: %d' % self.__nfs_data['flavor'] + print(' NFS security flavor: %d' % self.__nfs_data['flavor']) def display_nfs_events(self): """Pretty-print the NFS event counters """ - print - print 'Cache events:' - print ' data cache invalidated %d times' % self.__nfs_data['datainvalidates'] - print ' attribute cache invalidated %d times' % self.__nfs_data['attrinvalidates'] - print ' inodes synced %d times' % self.__nfs_data['syncinodes'] - print - print 'VFS calls:' - print ' VFS requested %d inode revalidations' % self.__nfs_data['inoderevalidates'] - print ' VFS requested %d dentry revalidations' % self.__nfs_data['dentryrevalidates'] - print - print ' VFS called nfs_readdir() %d times' % self.__nfs_data['vfsreaddir'] - print ' VFS called nfs_lookup() %d times' % self.__nfs_data['vfslookup'] - print ' VFS called nfs_permission() %d times' % self.__nfs_data['vfspermission'] - print ' VFS called nfs_file_open() %d times' % self.__nfs_data['vfsopen'] - print ' VFS called nfs_file_flush() %d times' % self.__nfs_data['vfsflush'] - print ' VFS called nfs_lock() %d times' % self.__nfs_data['vfslock'] - print ' VFS called nfs_fsync() %d times' % self.__nfs_data['vfsfsync'] - print ' VFS called nfs_file_release() %d times' % self.__nfs_data['vfsrelease'] - print - print 'VM calls:' - print ' VFS called nfs_readpage() %d times' % self.__nfs_data['vfsreadpage'] - print ' VFS called nfs_readpages() %d times' % self.__nfs_data['vfsreadpages'] - print ' VFS called nfs_writepage() %d times' % self.__nfs_data['vfswritepage'] - print ' VFS called nfs_writepages() %d times' % self.__nfs_data['vfswritepages'] - print - print 'Generic NFS counters:' - print ' File size changing operations:' - print ' truncating SETATTRs: %d extending WRITEs: %d' % \ - (self.__nfs_data['setattrtrunc'], self.__nfs_data['extendwrite']) - print ' %d silly renames' % self.__nfs_data['sillyrenames'] - print ' short reads: %d short writes: %d' % \ - (self.__nfs_data['shortreads'], self.__nfs_data['shortwrites']) - print ' NFSERR_DELAYs from server: %d' % self.__nfs_data['delay'] + print() + print('Cache events:') + print(' data cache invalidated %d times' % self.__nfs_data['datainvalidates']) + print(' attribute cache invalidated %d times' % self.__nfs_data['attrinvalidates']) + print(' inodes synced %d times' % self.__nfs_data['syncinodes']) + print() + print('VFS calls:') + print(' VFS requested %d inode revalidations' % self.__nfs_data['inoderevalidates']) + print(' VFS requested %d dentry revalidations' % self.__nfs_data['dentryrevalidates']) + print() + print(' VFS called nfs_readdir() %d times' % self.__nfs_data['vfsreaddir']) + print(' VFS called nfs_lookup() %d times' % self.__nfs_data['vfslookup']) + print(' VFS called nfs_permission() %d times' % self.__nfs_data['vfspermission']) + print(' VFS called nfs_file_open() %d times' % self.__nfs_data['vfsopen']) + print(' VFS called nfs_file_flush() %d times' % self.__nfs_data['vfsflush']) + print(' VFS called nfs_lock() %d times' % self.__nfs_data['vfslock']) + print(' VFS called nfs_fsync() %d times' % self.__nfs_data['vfsfsync']) + print(' VFS called nfs_file_release() %d times' % self.__nfs_data['vfsrelease']) + print() + print('VM calls:') + print(' VFS called nfs_readpage() %d times' % self.__nfs_data['vfsreadpage']) + print(' VFS called nfs_readpages() %d times' % self.__nfs_data['vfsreadpages']) + print(' VFS called nfs_writepage() %d times' % self.__nfs_data['vfswritepage']) + print(' VFS called nfs_writepages() %d times' % self.__nfs_data['vfswritepages']) + print() + print('Generic NFS counters:') + print(' File size changing operations:') + print(' truncating SETATTRs: %d extending WRITEs: %d' % \ + (self.__nfs_data['setattrtrunc'], self.__nfs_data['extendwrite'])) + print(' %d silly renames' % self.__nfs_data['sillyrenames']) + print(' short reads: %d short writes: %d' % \ + (self.__nfs_data['shortreads'], self.__nfs_data['shortwrites'])) + print(' NFSERR_DELAYs from server: %d' % self.__nfs_data['delay']) def display_nfs_bytes(self): """Pretty-print the NFS event counters """ - print - print 'NFS byte counts:' - print ' applications read %d bytes via read(2)' % self.__nfs_data['normalreadbytes'] - print ' applications wrote %d bytes via write(2)' % self.__nfs_data['normalwritebytes'] - print ' applications read %d bytes via O_DIRECT read(2)' % self.__nfs_data['directreadbytes'] - print ' applications wrote %d bytes via O_DIRECT write(2)' % self.__nfs_data['directwritebytes'] - print ' client read %d bytes via NFS READ' % self.__nfs_data['serverreadbytes'] - print ' client wrote %d bytes via NFS WRITE' % self.__nfs_data['serverwritebytes'] + print() + print('NFS byte counts:') + print(' applications read %d bytes via read(2)' % self.__nfs_data['normalreadbytes']) + print(' applications wrote %d bytes via write(2)' % self.__nfs_data['normalwritebytes']) + print(' applications read %d bytes via O_DIRECT read(2)' % self.__nfs_data['directreadbytes']) + print(' applications wrote %d bytes via O_DIRECT write(2)' % self.__nfs_data['directwritebytes']) + print(' client read %d bytes via NFS READ' % self.__nfs_data['serverreadbytes']) + print(' client wrote %d bytes via NFS WRITE' % self.__nfs_data['serverwritebytes']) def display_rpc_generic_stats(self): """Pretty-print the generic RPC stats """ sends = self.__rpc_data['rpcsends'] - print - print 'RPC statistics:' + print() + print('RPC statistics:') - print ' %d RPC requests sent, %d RPC replies received (%d XIDs not found)' % \ - (sends, self.__rpc_data['rpcreceives'], self.__rpc_data['badxids']) + print(' %d RPC requests sent, %d RPC replies received (%d XIDs not found)' % \ + (sends, self.__rpc_data['rpcreceives'], self.__rpc_data['badxids'])) if sends != 0: - print ' average backlog queue length: %d' % \ - (float(self.__rpc_data['backlogutil']) / sends) + print(' average backlog queue length: %d' % \ + (float(self.__rpc_data['backlogutil']) / sends)) def display_rpc_op_stats(self): """Pretty-print the per-op stats @@ -261,23 +261,23 @@ class DeviceData: sends = self.__rpc_data['rpcsends'] # XXX: these should be sorted by 'count' - print + print() for op in self.__rpc_data['ops']: stats = self.__rpc_data[op] count = stats[0] retrans = stats[1] - count if count != 0: - print '%s:' % op - print '\t%d ops (%d%%)' % \ - (count, ((count * 100) / sends)), - print '\t%d retrans (%d%%)' % (retrans, ((retrans * 100) / count)), - print '\t%d major timeouts' % stats[2] - print '\tavg bytes sent per op: %d\tavg bytes received per op: %d' % \ - (stats[3] / count, stats[4] / count) - print '\tbacklog wait: %f' % (float(stats[5]) / count), - print '\tRTT: %f' % (float(stats[6]) / count), - print '\ttotal execute time: %f (milliseconds)' % \ - (float(stats[7]) / count) + print('%s:' % op) + print('\t%d ops (%d%%)' % \ + (count, ((count * 100) / sends)), end=' ') + print('\t%d retrans (%d%%)' % (retrans, ((retrans * 100) / count)), end=' ') + print('\t%d major timeouts' % stats[2]) + print('\tavg bytes sent per op: %d\tavg bytes received per op: %d' % \ + (stats[3] / count, stats[4] / count)) + print('\tbacklog wait: %f' % (float(stats[5]) / count), end=' ') + print('\tRTT: %f' % (float(stats[6]) / count), end=' ') + print('\ttotal execute time: %f (milliseconds)' % \ + (float(stats[7]) / count)) def compare_iostats(self, old_stats): """Return the difference between two sets of stats @@ -285,9 +285,9 @@ class DeviceData: result = DeviceData() # copy self into result - for key, value in self.__nfs_data.iteritems(): + for key, value in self.__nfs_data.items(): result.__nfs_data[key] = value - for key, value in self.__rpc_data.iteritems(): + for key, value in self.__rpc_data.items(): result.__rpc_data[key] = value # compute the difference of each item in the list @@ -295,7 +295,7 @@ class DeviceData: # the reference to them. so we build new lists here # for the result object. for op in result.__rpc_data['ops']: - result.__rpc_data[op] = map(difference, self.__rpc_data[op], old_stats.__rpc_data[op]) + result.__rpc_data[op] = list(map(difference, self.__rpc_data[op], old_stats.__rpc_data[op])) # update the remaining keys we care about result.__rpc_data['rpcsends'] -= old_stats.__rpc_data['rpcsends'] @@ -312,17 +312,17 @@ class DeviceData: if sample_time == 0: sample_time = float(self.__nfs_data['age']) - print - print '%s mounted on %s:' % \ - (self.__nfs_data['export'], self.__nfs_data['mountpoint']) + print() + print('%s mounted on %s:' % \ + (self.__nfs_data['export'], self.__nfs_data['mountpoint'])) - print '\top/s\trpc bklog' - print '\t%.2f' % (sends / sample_time), + print('\top/s\trpc bklog') + print('\t%.2f' % (sends / sample_time), end=' ') if sends != 0: - print '\t%.2f' % \ - ((float(self.__rpc_data['backlogutil']) / sends) / sample_time) + print('\t%.2f' % \ + ((float(self.__rpc_data['backlogutil']) / sends) / sample_time)) else: - print '\t0.00' + print('\t0.00') # reads: ops/s, kB/s, avg rtt, and avg exe # XXX: include avg xfer size and retransmits? @@ -332,15 +332,15 @@ 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 '\t\t%.2f' % (ops / sample_time), - print '\t\t%.2f' % (kilobytes / sample_time), + print('\treads:\tops/s\t\tkB/s\t\tavg RTT (ms)\tavg exe (ms)') + print('\t\t%.2f' % (ops / sample_time), end=' ') + print('\t\t%.2f' % (kilobytes / sample_time), end=' ') if ops != 0: - print '\t\t%.2f' % (rtt / ops), - print '\t\t%.2f' % (exe / ops) + print('\t\t%.2f' % (rtt / ops), end=' ') + print('\t\t%.2f' % (exe / ops)) else: - print '\t\t0.00', - print '\t\t0.00' + print('\t\t0.00', end=' ') + print('\t\t0.00') # writes: ops/s, kB/s, avg rtt, and avg exe # XXX: include avg xfer size and retransmits? @@ -350,15 +350,15 @@ 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 '\t\t%.2f' % (ops / sample_time), - print '\t\t%.2f' % (kilobytes / sample_time), + print('\twrites:\tops/s\t\tkB/s\t\tavg RTT (ms)\tavg exe (ms)') + print('\t\t%.2f' % (ops / sample_time), end=' ') + print('\t\t%.2f' % (kilobytes / sample_time), end=' ') if ops != 0: - print '\t\t%.2f' % (rtt / ops), - print '\t\t%.2f' % (exe / ops) + print('\t\t%.2f' % (rtt / ops), end=' ') + print('\t\t%.2f' % (exe / ops)) else: - print '\t\t0.00', - print '\t\t0.00' + print('\t\t0.00', end=' ') + print('\t\t0.00') def parse_stats_file(filename): """pop the contents of a mountstats file into a dictionary, @@ -388,18 +388,18 @@ def parse_stats_file(filename): return ms_dict def print_mountstats_help(name): - print 'usage: %s [ options ] <mount point>' % name - print - print ' Version %s' % Mountstats_version - print - print ' Display NFS client per-mount statistics.' - print - print ' --version display the version of this command' - print ' --nfs display only the NFS statistics' - print ' --rpc display only the RPC statistics' - print ' --start sample and save statistics' - print ' --end resample statistics and compare them with saved' - print + print('usage: %s [ options ] <mount point>' % name) + print() + print(' Version %s' % Mountstats_version) + print() + print(' Display NFS client per-mount statistics.') + print() + print(' --version display the version of this command') + print(' --nfs display only the NFS statistics') + print(' --rpc display only the RPC statistics') + print(' --start sample and save statistics') + print(' --end resample statistics and compare them with saved') + print() def mountstats_command(): """Mountstats command @@ -414,7 +414,7 @@ def mountstats_command(): return if arg in ['-v', '--version', 'version']: - print '%s version %s' % (sys.argv[0], Mountstats_version) + print('%s version %s' % (sys.argv[0], Mountstats_version)) sys.exit(0) if arg in ['-n', '--nfs']: @@ -426,10 +426,10 @@ def mountstats_command(): continue if arg in ['-s', '--start']: - raise Exception, 'Sampling is not yet implemented' + raise Exception('Sampling is not yet implemented') if arg in ['-e', '--end']: - raise Exception, 'Sampling is not yet implemented' + raise Exception('Sampling is not yet implemented') if arg == sys.argv[0]: continue @@ -448,14 +448,14 @@ def mountstats_command(): for mp in mountpoints: if mp not in mountstats: - print 'Statistics for mount point %s not found' % mp + print('Statistics for mount point %s not found' % mp) continue stats = DeviceData() stats.parse_stats(mountstats[mp]) if not stats.is_nfs_mountpoint(): - print 'Mount point %s exists but is not an NFS mount' % mp + print('Mount point %s exists but is not an NFS mount' % mp) continue if nfs_only: @@ -472,37 +472,37 @@ def mountstats_command(): stats.display_rpc_op_stats() def print_nfsstat_help(name): - print 'usage: %s [ options ]' % name - print - print ' Version %s' % Mountstats_version - print - print ' nfsstat-like program that uses NFS client per-mount statistics.' - print + print('usage: %s [ options ]' % name) + print() + print(' Version %s' % Mountstats_version) + print() + print(' nfsstat-like program that uses NFS client per-mount statistics.') + print() def nfsstat_command(): print_nfsstat_help(prog) def print_iostat_help(name): - print 'usage: %s [ <interval> [ <count> ] ] [ <mount point> ] ' % name - print - print ' Version %s' % Mountstats_version - print - print ' iostat-like program to display NFS client per-mount statistics.' - print - print ' The <interval> parameter specifies the amount of time in seconds between' - print ' each report. The first report contains statistics for the time since each' - print ' file system was mounted. Each subsequent report contains statistics' - print ' collected during the interval since the previous report.' - print - print ' If the <count> parameter is specified, the value of <count> determines the' - print ' number of reports generated at <interval> seconds apart. If the interval' - print ' parameter is specified without the <count> parameter, the command generates' - print ' reports continuously.' - print - print ' If one or more <mount point> names are specified, statistics for only these' - print ' mount points will be displayed. Otherwise, all NFS mount points on the' - print ' client are listed.' - print + print('usage: %s [ <interval> [ <count> ] ] [ <mount point> ] ' % name) + print() + print(' Version %s' % Mountstats_version) + print() + print(' iostat-like program to display NFS client per-mount statistics.') + print() + print(' The <interval> parameter specifies the amount of time in seconds between') + print(' each report. The first report contains statistics for the time since each') + print(' file system was mounted. Each subsequent report contains statistics') + print(' collected during the interval since the previous report.') + print() + print(' If the <count> parameter is specified, the value of <count> determines the') + print(' number of reports generated at <interval> seconds apart. If the interval') + print(' parameter is specified without the <count> parameter, the command generates') + print(' reports continuously.') + print() + print(' If one or more <mount point> names are specified, statistics for only these') + print(' mount points will be displayed. Otherwise, all NFS mount points on the') + print(' client are listed.') + print() def print_iostat_summary(old, new, devices, time): for device in devices: @@ -530,7 +530,7 @@ def iostat_command(): return if arg in ['-v', '--version', 'version']: - print '%s version %s' % (sys.argv[0], Mountstats_version) + print('%s version %s' % (sys.argv[0], Mountstats_version)) return if arg == sys.argv[0]: @@ -543,14 +543,14 @@ def iostat_command(): if interval > 0: interval_seen = True else: - print 'Illegal <interval> value' + print('Illegal <interval> value') return elif not count_seen: count = int(arg) if count > 0: count_seen = True else: - print 'Illegal <count> value' + print('Illegal <count> value') return # make certain devices contains only NFS mount points @@ -563,13 +563,13 @@ def iostat_command(): check += [device] devices = check else: - for device, descr in mountstats.iteritems(): + for device, descr in mountstats.items(): stats = DeviceData() stats.parse_stats(descr) if stats.is_nfs_mountpoint(): devices += [device] if len(devices) == 0: - print 'No NFS mount points were found' + print('No NFS mount points were found') return old_mountstats = None @@ -608,7 +608,7 @@ try: elif prog == 'ms-iostat': iostat_command() except KeyboardInterrupt: - print 'Caught ^C... exiting' + print('Caught ^C... exiting') sys.exit(1) sys.exit(0) diff --git a/tools/nfs-iostat/nfs-iostat.py b/tools/nfs-iostat/nfs-iostat.py index c035537..1c523f9 100644 --- a/tools/nfs-iostat/nfs-iostat.py +++ b/tools/nfs-iostat/nfs-iostat.py @@ -95,7 +95,7 @@ class DeviceData: if words[6] == 'nfs': self.__nfs_data['statvers'] = words[7] elif words[0] == 'age:': - self.__nfs_data['age'] = long(words[1]) + self.__nfs_data['age'] = int(words[1]) elif words[0] == 'opts:': self.__nfs_data['mountoptions'] = ''.join(words[1:]).split(',') elif words[0] == 'caps:': @@ -116,7 +116,7 @@ class DeviceData: elif words[0] == 'bytes:': i = 1 for key in NfsByteCounters: - self.__nfs_data[key] = long(words[i]) + self.__nfs_data[key] = int(words[i]) i += 1 def __parse_rpc_line(self, words): @@ -131,8 +131,8 @@ class DeviceData: self.__rpc_data['rpcsends'] = int(words[4]) self.__rpc_data['rpcreceives'] = int(words[5]) self.__rpc_data['badxids'] = int(words[6]) - self.__rpc_data['inflightsends'] = long(words[7]) - self.__rpc_data['backlogutil'] = long(words[8]) + self.__rpc_data['inflightsends'] = int(words[7]) + self.__rpc_data['backlogutil'] = int(words[8]) elif words[1] == 'tcp': self.__rpc_data['port'] = words[2] self.__rpc_data['bind_count'] = int(words[3]) @@ -142,8 +142,8 @@ class DeviceData: self.__rpc_data['rpcsends'] = int(words[7]) self.__rpc_data['rpcreceives'] = int(words[8]) self.__rpc_data['badxids'] = int(words[9]) - self.__rpc_data['inflightsends'] = long(words[10]) - self.__rpc_data['backlogutil'] = long(words[11]) + self.__rpc_data['inflightsends'] = int(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]) @@ -169,7 +169,7 @@ class DeviceData: else: op = words[0][:-1] self.__rpc_data['ops'] += [op] - self.__rpc_data[op] = [long(word) for word in words[1:]] + self.__rpc_data[op] = [int(word) for word in words[1:]] def parse_stats(self, lines): """Turn a list of lines from a mount stat file into a @@ -271,7 +271,7 @@ class DeviceData: nfs_stats = self.__nfs_data lookup_ops = self.__rpc_data['LOOKUP'][0] readdir_ops = self.__rpc_data['READDIR'][0] - if self.__rpc_data.has_key('READDIRPLUS'): + if 'READDIRPLUS' in self.__rpc_data: readdir_ops += self.__rpc_data['READDIRPLUS'][0] dentry_revals = nfs_stats['dentryrevalidates'] @@ -330,7 +330,7 @@ class DeviceData: def __print_rpc_op_stats(self, op, sample_time): """Print generic stats for one RPC op """ - if not self.__rpc_data.has_key(op): + if op not in self.__rpc_data: return rpc_stats = self.__rpc_data[op] @@ -405,7 +405,7 @@ class DeviceData: elif which == 2: self.__print_rpc_op_stats('LOOKUP', sample_time) self.__print_rpc_op_stats('READDIR', sample_time) - if self.__rpc_data.has_key('READDIRPLUS'): + if 'READDIRPLUS' in self.__rpc_data: self.__print_rpc_op_stats('READDIRPLUS', sample_time) self.__print_dir_cache_stats(sample_time) elif which == 3: @@ -450,7 +450,7 @@ def print_iostat_summary(old, new, devices, time, options): if old: # Trim device list to only include intersection of old and new data, # this addresses umounts due to autofs mountpoints - devicelist = filter(lambda x:x in devices,old) + devicelist = [x for x in old if x in devices] else: devicelist = devices
This will make mountstat and nfs-iostat run on Python 2.6, 2.7 and >= 3.0 Signed-off-by: Bohuslav Kabrda <bkabrda@redhat.com> --- tools/mountstats/mountstats.py | 310 ++++++++++++++++++++--------------------- tools/nfs-iostat/nfs-iostat.py | 22 +-- 2 files changed, 166 insertions(+), 166 deletions(-)