linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 2/4] nfs-utils: nfs-iostat.py autofs cleanup and option to sort by ops/s
@ 2009-08-26  4:59 Lans Carstensen
  2009-08-26 14:28 ` Chuck Lever
  0 siblings, 1 reply; 10+ messages in thread
From: Lans Carstensen @ 2009-08-26  4:59 UTC (permalink / raw)
  To: NFS list

commit d3bb692a8c26c2d4e0dc70d7d0359daf79090e1e
Author: Lans Carstensen <Lans.Carstensen@dreamworks.com>
Date:   Tue Aug 25 21:52:03 2009 -0700

     Bump nfs-iostat.py version up to 0.3 to reflect new features.

diff --git a/tools/nfs-iostat/nfs-iostat.py b/tools/nfs-iostat/nfs-iostat.py
index ea02db4..6ce31fc 100644
--- a/tools/nfs-iostat/nfs-iostat.py
+++ b/tools/nfs-iostat/nfs-iostat.py
@@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, 
MA 02111-1307 USA

  import sys, os, time

-Iostats_version = '0.2'
+Iostats_version = '0.3'

  def difference(x, y):
      """Used for a map() function



^ permalink raw reply related	[flat|nested] 10+ messages in thread
* [PATCH 2/4] nfs-utils: nfs-iostat.py autofs cleanup and option to sort by ops/s
@ 2009-09-15  4:57 Lans Carstensen
  0 siblings, 0 replies; 10+ messages in thread
From: Lans Carstensen @ 2009-09-15  4:57 UTC (permalink / raw)
  To: linux-nfs

Update list of mount points at each interval and check for differences
when producing comparative stats.  This ensures proper stats collection
for autofs mountpoints.

Original patch corrected with email feedback from Chuck Lever

Signed-off-by: Lans Carstensen <Lans.Carstensen-hCDZnVt6e3JSwrhanM7KvQ@public.gmane.org>
---
  tools/nfs-iostat/nfs-iostat.py |   60 
+++++++++++++++++++++++++++++----------
  1 files changed, 44 insertions(+), 16 deletions(-)
  mode change 100644 => 100755 tools/nfs-iostat/nfs-iostat.py

diff --git a/tools/nfs-iostat/nfs-iostat.py b/tools/nfs-iostat/nfs-iostat.py
old mode 100644
new mode 100755
index ea02db4..b3f335a
--- a/tools/nfs-iostat/nfs-iostat.py
+++ b/tools/nfs-iostat/nfs-iostat.py
@@ -447,7 +447,14 @@ def parse_stats_file(filename):
      return ms_dict

  def print_iostat_summary(old, new, devices, time, ac):
-    for device in devices:
+    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)
+    else:
+        devicelist = devices
+
+    for device in devicelist:
          stats = DeviceData()
          stats.parse_stats(new[device])
          if not old:
@@ -458,11 +465,32 @@ def print_iostat_summary(old, new, devices, time, ac):
              diff_stats = stats.compare_iostats(old_stats)
              diff_stats.display_iostats(time, ac)

+def list_nfs_mounts(givenlist, mountstats):
+    """return a list of NFS mounts given a list to validate or
+       return a full list if the given list is empty -
+       may return an empty list if none found
+    """
+    list = []
+    if len(givenlist) > 0:
+        for device in givenlist:
+            stats = DeviceData()
+            stats.parse_stats(mountstats[device])
+            if stats.is_nfs_mountpoint():
+                list += [device]
+    else:
+        for device, descr in mountstats.iteritems():
+            stats = DeviceData()
+            stats.parse_stats(descr)
+            if stats.is_nfs_mountpoint():
+                list += [device]
+    return list
+
  def iostat_command(name):
      """iostat-like command for NFS mount points
      """
      mountstats = parse_stats_file('/proc/self/mountstats')
      devices = []
+    origdevices = []
      which = 0
      interval_seen = False
      count_seen = False
@@ -492,7 +520,7 @@ def iostat_command(name):
              continue

          if arg in mountstats:
-            devices += [arg]
+            origdevices += [arg]
          elif not interval_seen:
              interval = int(arg)
              if interval > 0:
@@ -509,23 +537,11 @@ def iostat_command(name):
                  return

      # make certain devices contains only NFS mount points
-    if len(devices) > 0:
-        check = []
-        for device in devices:
-            stats = DeviceData()
-            stats.parse_stats(mountstats[device])
-            if stats.is_nfs_mountpoint():
-                check += [device]
-        devices = check
-    else:
-        for device, descr in mountstats.iteritems():
-            stats = DeviceData()
-            stats.parse_stats(descr)
-            if stats.is_nfs_mountpoint():
-                devices += [device]
+    devices = list_nfs_mounts(origdevices, mountstats)
      if len(devices) == 0:
          print 'No NFS mount points were found'
          return
+

      old_mountstats = None
      sample_time = 0.0
@@ -541,6 +557,12 @@ def iostat_command(name):
              time.sleep(interval)
              sample_time = interval
              mountstats = parse_stats_file('/proc/self/mountstats')
+            # automount mountpoints add and drop, if automount is involved
+            # we need to recheck the devices list when reparsing
+            devices = list_nfs_mounts(origdevices,mountstats)
+            if len(devices) == 0:
+                print 'No NFS mount points were found'
+                return
              count -= 1
      else:
          while True:
@@ -549,6 +571,12 @@ def iostat_command(name):
              time.sleep(interval)
              sample_time = interval
              mountstats = parse_stats_file('/proc/self/mountstats')
+            # automount mountpoints add and drop, if automount is involved
+            # we need to recheck the devices list when reparsing
+            devices = list_nfs_mounts(origdevices,mountstats)
+            if len(devices) == 0:
+                print 'No NFS mount points were found'
+                return

  #
  # Main
-- 
1.5.5.6



^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2009-09-15  5:00 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-08-26  4:59 [PATCH 2/4] nfs-utils: nfs-iostat.py autofs cleanup and option to sort by ops/s Lans Carstensen
2009-08-26 14:28 ` Chuck Lever
2009-08-26 15:13   ` Steve Dickson
2009-08-26 15:35     ` Chuck Lever
2009-08-26 18:03       ` Steve Dickson
2009-08-26 20:28         ` Chuck Lever
2009-08-26 23:56           ` Lans Carstensen
2009-08-27 14:04             ` Chuck Lever
2009-08-27 14:17               ` Steve Dickson
  -- strict thread matches above, loose matches on Subject: below --
2009-09-15  4:57 Lans Carstensen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).