Linux NFS development
 help / color / mirror / Atom feed
* [PATCH 1/2] nfsstat: Print diff stats every N seconds
  2009-03-17  4:18 [PATCH 2/2] nfsstat: Add --list flag Greg Banks
@ 2009-03-17  7:46 ` Kevin Constantine
       [not found]   ` <1237275989-16421-1-git-send-email-kevin.constantine-FfNkGbSheRGpB8w63BLUukEOCMrvLtNR@public.gmane.org>
  0 siblings, 1 reply; 10+ messages in thread
From: Kevin Constantine @ 2009-03-17  7:46 UTC (permalink / raw)
  To: gnb; +Cc: linux-nfs, steved, Kevin Constantine

nfsstat.c: Implements an optional "interval" argument to --sleep
nfsstat.man: Explains the use of --sleep[interval]

Signed-off-by: Kevin Constantine <kevin.constantine-FfNkGbSheRGpB8w63BLUukEOCMrvLtNR@public.gmane.org>
---
 utils/nfsstat/nfsstat.c   |  107 ++++++++++++++++++++++++++++++++++-----------
 utils/nfsstat/nfsstat.man |    6 ++-
 2 files changed, 86 insertions(+), 27 deletions(-)

diff --git a/utils/nfsstat/nfsstat.c b/utils/nfsstat/nfsstat.c
index 1517414..a447cf9 100644
--- a/utils/nfsstat/nfsstat.c
+++ b/utils/nfsstat/nfsstat.c
@@ -167,6 +167,9 @@ DECLARE_SRV(srvinfo, _old);
 DECLARE_CLT(cltinfo);
 DECLARE_CLT(cltinfo, _old);
 
+static void		print_all_stats(int, int, int);
+static void		print_server_stats(int, int);
+static void		print_client_stats(int, int);
 static void		print_numbers(const char *, unsigned int *,
 					unsigned int);
 static void		print_callstats(const char *, const char **,
@@ -183,6 +186,7 @@ static void		get_stats(const char *, struct statinfo *, int *, int,
 static int		has_stats(const unsigned int *);
 static void 		diff_stats(struct statinfo *, struct statinfo *, int);
 static void 		unpause(int);
+static void 		update_old_counters(struct statinfo *, struct statinfo *);
 
 static time_t		starttime;
 
@@ -207,26 +211,29 @@ void usage(char *name)
 {
 	printf("Usage: %s [OPTION]...\n\
 \n\
-  -m, --mounts\t\tShow statistics on mounted NFS filesystems\n\
-  -c, --client\t\tShow NFS client statistics\n\
-  -s, --server\t\tShow NFS server statistics\n\
-  -2\t\t\tShow NFS version 2 statistics\n\
-  -3\t\t\tShow NFS version 3 statistics\n\
-  -4\t\t\tShow NFS version 4 statistics\n\
-  -o [facility]\t\tShow statistics on particular facilities.\n\
-     nfs\tNFS protocol information\n\
-     rpc\tGeneral RPC information\n\
-     net\tNetwork layer statistics\n\
-     fh\t\tUsage information on the server's file handle cache\n\
-     rc\t\tUsage information on the server's request reply cache\n\
-     all\tSelect all of the above\n\
-  -v, --verbose, --all\tSame as '-o all'\n\
-  -r, --rpc\t\tShow RPC statistics\n\
-  -n, --nfs\t\tShow NFS statistics\n\
-  -Z, --sleep\t\tSaves stats, pauses, diffs current and saved\n\
-  -S, --since file\tShows difference between current stats and those in 'file'\n\
-  --version\t\tShow program version\n\
-  --help\t\tWhat you just did\n\
+  -m, --mounts		Show statistics on mounted NFS filesystems\n\
+  -c, --client		Show NFS client statistics\n\
+  -s, --server		Show NFS server statistics\n\
+  -2			Show NFS version 2 statistics\n\
+  -3			Show NFS version 3 statistics\n\
+  -4			Show NFS version 4 statistics\n\
+  -o [facility]		Show statistics on particular facilities.\n\
+     nfs		NFS protocol information\n\
+     rpc		General RPC information\n\
+     net		Network layer statistics\n\
+     fh			Usage information on the server's file handle cache\n\
+     rc			Usage information on the server's request reply cache\n\
+     all		Select all of the above\n\
+  -v, --verbose, --all	Same as '-o all'\n\
+  -r, --rpc		Show RPC statistics\n\
+  -n, --nfs		Show NFS statistics\n\
+  -Z[#], --sleep[=#]	Collects stats until interrupted.\n\
+			    Cumulative stats are then printed\n\
+          		    If # is provided, stats will be output every\n\
+			    # seconds.\n\
+  -S, --since file	Shows difference between current stats and those in 'file'\n\
+  --version		Show program version\n\
+  --help		What you just did\n\
 \n", name);
 	exit(0);
 }
@@ -245,7 +252,7 @@ static struct option longopts[] =
 	{ "zero", 0, 0, 'z' },
 	{ "help", 0, 0, '\1' },
 	{ "version", 0, 0, '\2' },
-	{ "sleep", 0, 0, 'Z' },
+	{ "sleep", 2, 0, 'Z' },
 	{ "since", 1, 0, 'S' },
 	{ NULL, 0, 0, 0 }
 };
@@ -258,6 +265,7 @@ main(int argc, char **argv)
 			opt_clt = 0,
 			opt_prt = 0,
 			opt_sleep = 0,
+			sleep_time = 0,
 			opt_since = 0;
 	int		c;
 	char           *progname,
@@ -279,7 +287,7 @@ main(int argc, char **argv)
 	else
 		progname = argv[0];
 
-	while ((c = getopt_long(argc, argv, "234acmno:ZS:vrsz\1\2", longopts, NULL)) != EOF) {
+	while ((c = getopt_long(argc, argv, "234acmno:Z::S:vrsz\1\2", longopts, NULL)) != EOF) {
 		switch (c) {
 		case 'a':
 			fprintf(stderr, "nfsstat: nfs acls are not yet supported.\n");
@@ -311,6 +319,9 @@ main(int argc, char **argv)
 			break;
 		case 'Z':
 			opt_sleep = 1;
+			if (optarg) {
+				sleep_time = atoi(optarg);
+			}
 			break;
 		case 'S':
 			opt_since = 1;
@@ -384,7 +395,7 @@ main(int argc, char **argv)
 	if (opt_clt)
 		get_stats(clientfile, clientinfo, &opt_clt, opt_srv, 0);
 
-	if (opt_sleep) {
+	if (opt_sleep && !sleep_time) {
 		starttime = time(NULL);
 		printf("Collecting statistics; press CTRL-C to view results from interval (i.e., from pause to CTRL-C).\n");
 		if (sigaction(SIGINT, &act, NULL) != 0) {
@@ -404,7 +415,40 @@ main(int argc, char **argv)
 			diff_stats(clientinfo_tmp, clientinfo, 0);
 		}
 	}
+	if(sleep_time) {
+		while(1) {
+			if (opt_srv) {
+				get_stats(NFSSRVSTAT, serverinfo_tmp , &opt_srv, opt_clt, 1);
+				diff_stats(serverinfo_tmp, serverinfo, 1);
+			}
+			if (opt_clt) {
+				get_stats(NFSCLTSTAT, clientinfo_tmp, &opt_clt, opt_srv, 0);
+				diff_stats(clientinfo_tmp, clientinfo, 0);
+			}
+			print_all_stats(opt_srv, opt_clt, opt_prt);
+			printf("\n\n");
+			fflush(stdout);
+
+			update_old_counters(clientinfo_tmp, clientinfo);
+			sleep(sleep_time);
+		}	
+	} else {
+		print_all_stats(opt_srv, opt_clt, opt_prt);
+	}
+
+	return 0;
+}
+
+static void
+print_all_stats (int opt_srv, int opt_clt, int opt_prt)
+{
+	print_server_stats(opt_srv, opt_prt);
+	print_client_stats(opt_clt, opt_prt);
+}
 
+static void 
+print_server_stats(int opt_srv, int opt_prt) 
+{
 	if (opt_srv) {
 		if (opt_prt & PRNT_NET) {
 			print_numbers(
@@ -479,7 +523,10 @@ main(int argc, char **argv)
 			}
 		}
 	}
-
+}
+static void
+print_client_stats(int opt_clt, int opt_prt) 
+{
 	if (opt_clt) {
 		if (opt_prt & PRNT_NET) {
 			print_numbers(
@@ -515,8 +562,6 @@ main(int argc, char **argv)
 				);
 		}
 	}
-
-	return 0;
 }
 
 static statinfo *
@@ -846,3 +891,13 @@ unpause(int sig)
 	seconds = (int)time_diff % 60;
 	printf("Signal received; displaying (only) statistics gathered over the last %d minutes, %d seconds:\n\n", minutes, seconds);
 }
+
+static void
+update_old_counters(struct statinfo *new, struct statinfo *old)
+{
+	int z, i;
+	for (z = 0; old[z].tag; z++) 
+		for (i = 0; i <= old[z].nrvals; i++) 
+			old[z].valptr[i] += new[z].valptr[i];
+
+}
diff --git a/utils/nfsstat/nfsstat.man b/utils/nfsstat/nfsstat.man
index cb5f89f..461b2c0 100644
--- a/utils/nfsstat/nfsstat.man
+++ b/utils/nfsstat/nfsstat.man
@@ -91,7 +91,7 @@ output
 .I file
 are treated as zeroes.
 .TP
-.B \-Z, \-\-sleep
+.B \-Z[interval], \-\-sleep=[interval]
 Instead of printing current statistics and immediately exiting,
 .B nfsstat
 takes a snapshot of the current statistics and pauses until it receives
@@ -100,6 +100,10 @@ takes a snapshot of the current statistics and pauses until it receives
 .BR Ctrl-C ),
 at which point it takes another snapshot and displays the difference
 between the two.
+If \fIinterval\fR is specified, 
+.B nfsstat
+will print the number of \fBNFS\fR calls made since the previous report.
+Stats will be printed repeatedly every \fIinterval\fR seconds.
 .\" --------------------- EXAMPLES -------------------------------
 .SH EXAMPLES
 .TP
-- 
1.6.0.4.761.g47577


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

* Re: [PATCH 1/2] nfsstat: Print diff stats every N seconds
       [not found]   ` <1237275989-16421-1-git-send-email-kevin.constantine-FfNkGbSheRGpB8w63BLUukEOCMrvLtNR@public.gmane.org>
@ 2009-03-18  2:43     ` Greg Banks
  0 siblings, 0 replies; 10+ messages in thread
From: Greg Banks @ 2009-03-18  2:43 UTC (permalink / raw)
  To: Kevin Constantine; +Cc: linux-nfs, steved, Kevin Constantine

Kevin Constantine wrote:
> nfsstat.c: Implements an optional "interval" argument to --sleep
> nfsstat.man: Explains the use of --sleep[interval]
>
> Signed-off-by: Kevin Constantine <kevin.constantine-FfNkGbSheRGpB8w63BLUukEOCMrvLtNR@public.gmane.org>
> ---
>
>   
Acked-by: Greg Banks <gnb@sgi.com>


-- 
Greg Banks, P.Engineer, SGI Australian Software Group.
the brightly coloured sporks of revolution.
I don't speak for SGI.


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

* [PATCH 0/2] nfsstat: Patch resend
@ 2009-04-03 19:06 Kevin Constantine
       [not found] ` <1238785592-18869-1-git-send-email-kevin.constantine-FfNkGbSheRGpB8w63BLUukEOCMrvLtNR@public.gmane.org>
  0 siblings, 1 reply; 10+ messages in thread
From: Kevin Constantine @ 2009-04-03 19:06 UTC (permalink / raw)
  To: steved; +Cc: linux-nfs, Kevin.Constantine-P5ys19MLBK/QT0dZR+AlfA

Just wanted to re-send the patches so that the right versions get looked at.  This leaves out an erroneous printing of newlines when there's no nfs traffic that was in the original patchset.

-kevin

[PATCH 1/2] nfsstat: Print diff stats every N seconds
[PATCH 2/2] nfsstat: Add --list flag

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

* [PATCH 1/2] nfsstat: Print diff stats every N seconds
       [not found] ` <1238785592-18869-1-git-send-email-kevin.constantine-FfNkGbSheRGpB8w63BLUukEOCMrvLtNR@public.gmane.org>
@ 2009-04-03 19:06   ` Kevin Constantine
       [not found]     ` <1238785592-18869-2-git-send-email-kevin.constantine-FfNkGbSheRGpB8w63BLUukEOCMrvLtNR@public.gmane.org>
  0 siblings, 1 reply; 10+ messages in thread
From: Kevin Constantine @ 2009-04-03 19:06 UTC (permalink / raw)
  To: steved
  Cc: linux-nfs, Kevin.Constantine-P5ys19MLBK/QT0dZR+AlfA,
	Kevin Constantine

 nfsstat.c: Implements an optional "interval" argument to --sleep
 nfsstat.man: Explains the use of --sleep[interval]

Signed-off-by: Kevin Constantine <kevin.constantine-FfNkGbSheRGpB8w63BLUukEOCMrvLtNR@public.gmane.org>
---
 utils/nfsstat/nfsstat.c   |  106 ++++++++++++++++++++++++++++++++++-----------
 utils/nfsstat/nfsstat.man |    6 ++-
 2 files changed, 85 insertions(+), 27 deletions(-)

diff --git a/utils/nfsstat/nfsstat.c b/utils/nfsstat/nfsstat.c
index 1517414..453d345 100644
--- a/utils/nfsstat/nfsstat.c
+++ b/utils/nfsstat/nfsstat.c
@@ -167,6 +167,9 @@ DECLARE_SRV(srvinfo, _old);
 DECLARE_CLT(cltinfo);
 DECLARE_CLT(cltinfo, _old);
 
+static void		print_all_stats(int, int, int);
+static void		print_server_stats(int, int);
+static void		print_client_stats(int, int);
 static void		print_numbers(const char *, unsigned int *,
 					unsigned int);
 static void		print_callstats(const char *, const char **,
@@ -183,6 +186,7 @@ static void		get_stats(const char *, struct statinfo *, int *, int,
 static int		has_stats(const unsigned int *);
 static void 		diff_stats(struct statinfo *, struct statinfo *, int);
 static void 		unpause(int);
+static void 		update_old_counters(struct statinfo *, struct statinfo *);
 
 static time_t		starttime;
 
@@ -207,26 +211,29 @@ void usage(char *name)
 {
 	printf("Usage: %s [OPTION]...\n\
 \n\
-  -m, --mounts\t\tShow statistics on mounted NFS filesystems\n\
-  -c, --client\t\tShow NFS client statistics\n\
-  -s, --server\t\tShow NFS server statistics\n\
-  -2\t\t\tShow NFS version 2 statistics\n\
-  -3\t\t\tShow NFS version 3 statistics\n\
-  -4\t\t\tShow NFS version 4 statistics\n\
-  -o [facility]\t\tShow statistics on particular facilities.\n\
-     nfs\tNFS protocol information\n\
-     rpc\tGeneral RPC information\n\
-     net\tNetwork layer statistics\n\
-     fh\t\tUsage information on the server's file handle cache\n\
-     rc\t\tUsage information on the server's request reply cache\n\
-     all\tSelect all of the above\n\
-  -v, --verbose, --all\tSame as '-o all'\n\
-  -r, --rpc\t\tShow RPC statistics\n\
-  -n, --nfs\t\tShow NFS statistics\n\
-  -Z, --sleep\t\tSaves stats, pauses, diffs current and saved\n\
-  -S, --since file\tShows difference between current stats and those in 'file'\n\
-  --version\t\tShow program version\n\
-  --help\t\tWhat you just did\n\
+  -m, --mounts		Show statistics on mounted NFS filesystems\n\
+  -c, --client		Show NFS client statistics\n\
+  -s, --server		Show NFS server statistics\n\
+  -2			Show NFS version 2 statistics\n\
+  -3			Show NFS version 3 statistics\n\
+  -4			Show NFS version 4 statistics\n\
+  -o [facility]		Show statistics on particular facilities.\n\
+     nfs		NFS protocol information\n\
+     rpc		General RPC information\n\
+     net		Network layer statistics\n\
+     fh			Usage information on the server's file handle cache\n\
+     rc			Usage information on the server's request reply cache\n\
+     all		Select all of the above\n\
+  -v, --verbose, --all	Same as '-o all'\n\
+  -r, --rpc		Show RPC statistics\n\
+  -n, --nfs		Show NFS statistics\n\
+  -Z[#], --sleep[=#]	Collects stats until interrupted.\n\
+			    Cumulative stats are then printed\n\
+          		    If # is provided, stats will be output every\n\
+			    # seconds.\n\
+  -S, --since file	Shows difference between current stats and those in 'file'\n\
+  --version		Show program version\n\
+  --help		What you just did\n\
 \n", name);
 	exit(0);
 }
@@ -245,7 +252,7 @@ static struct option longopts[] =
 	{ "zero", 0, 0, 'z' },
 	{ "help", 0, 0, '\1' },
 	{ "version", 0, 0, '\2' },
-	{ "sleep", 0, 0, 'Z' },
+	{ "sleep", 2, 0, 'Z' },
 	{ "since", 1, 0, 'S' },
 	{ NULL, 0, 0, 0 }
 };
@@ -258,6 +265,7 @@ main(int argc, char **argv)
 			opt_clt = 0,
 			opt_prt = 0,
 			opt_sleep = 0,
+			sleep_time = 0,
 			opt_since = 0;
 	int		c;
 	char           *progname,
@@ -279,7 +287,7 @@ main(int argc, char **argv)
 	else
 		progname = argv[0];
 
-	while ((c = getopt_long(argc, argv, "234acmno:ZS:vrsz\1\2", longopts, NULL)) != EOF) {
+	while ((c = getopt_long(argc, argv, "234acmno:Z::S:vrsz\1\2", longopts, NULL)) != EOF) {
 		switch (c) {
 		case 'a':
 			fprintf(stderr, "nfsstat: nfs acls are not yet supported.\n");
@@ -311,6 +319,9 @@ main(int argc, char **argv)
 			break;
 		case 'Z':
 			opt_sleep = 1;
+			if (optarg) {
+				sleep_time = atoi(optarg);
+			}
 			break;
 		case 'S':
 			opt_since = 1;
@@ -384,7 +395,7 @@ main(int argc, char **argv)
 	if (opt_clt)
 		get_stats(clientfile, clientinfo, &opt_clt, opt_srv, 0);
 
-	if (opt_sleep) {
+	if (opt_sleep && !sleep_time) {
 		starttime = time(NULL);
 		printf("Collecting statistics; press CTRL-C to view results from interval (i.e., from pause to CTRL-C).\n");
 		if (sigaction(SIGINT, &act, NULL) != 0) {
@@ -404,7 +415,39 @@ main(int argc, char **argv)
 			diff_stats(clientinfo_tmp, clientinfo, 0);
 		}
 	}
+	if(sleep_time) {
+		while(1) {
+			if (opt_srv) {
+				get_stats(NFSSRVSTAT, serverinfo_tmp , &opt_srv, opt_clt, 1);
+				diff_stats(serverinfo_tmp, serverinfo, 1);
+			}
+			if (opt_clt) {
+				get_stats(NFSCLTSTAT, clientinfo_tmp, &opt_clt, opt_srv, 0);
+				diff_stats(clientinfo_tmp, clientinfo, 0);
+			}
+			print_all_stats(opt_srv, opt_clt, opt_prt);
+			fflush(stdout);
+
+			update_old_counters(clientinfo_tmp, clientinfo);
+			sleep(sleep_time);
+		}	
+	} else {
+		print_all_stats(opt_srv, opt_clt, opt_prt);
+	}
+
+	return 0;
+}
+
+static void
+print_all_stats (int opt_srv, int opt_clt, int opt_prt)
+{
+	print_server_stats(opt_srv, opt_prt);
+	print_client_stats(opt_clt, opt_prt);
+}
 
+static void 
+print_server_stats(int opt_srv, int opt_prt) 
+{
 	if (opt_srv) {
 		if (opt_prt & PRNT_NET) {
 			print_numbers(
@@ -479,7 +522,10 @@ main(int argc, char **argv)
 			}
 		}
 	}
-
+}
+static void
+print_client_stats(int opt_clt, int opt_prt) 
+{
 	if (opt_clt) {
 		if (opt_prt & PRNT_NET) {
 			print_numbers(
@@ -515,8 +561,6 @@ main(int argc, char **argv)
 				);
 		}
 	}
-
-	return 0;
 }
 
 static statinfo *
@@ -846,3 +890,13 @@ unpause(int sig)
 	seconds = (int)time_diff % 60;
 	printf("Signal received; displaying (only) statistics gathered over the last %d minutes, %d seconds:\n\n", minutes, seconds);
 }
+
+static void
+update_old_counters(struct statinfo *new, struct statinfo *old)
+{
+	int z, i;
+	for (z = 0; old[z].tag; z++) 
+		for (i = 0; i <= old[z].nrvals; i++) 
+			old[z].valptr[i] += new[z].valptr[i];
+
+}
diff --git a/utils/nfsstat/nfsstat.man b/utils/nfsstat/nfsstat.man
index cb5f89f..461b2c0 100644
--- a/utils/nfsstat/nfsstat.man
+++ b/utils/nfsstat/nfsstat.man
@@ -91,7 +91,7 @@ output
 .I file
 are treated as zeroes.
 .TP
-.B \-Z, \-\-sleep
+.B \-Z[interval], \-\-sleep=[interval]
 Instead of printing current statistics and immediately exiting,
 .B nfsstat
 takes a snapshot of the current statistics and pauses until it receives
@@ -100,6 +100,10 @@ takes a snapshot of the current statistics and pauses until it receives
 .BR Ctrl-C ),
 at which point it takes another snapshot and displays the difference
 between the two.
+If \fIinterval\fR is specified, 
+.B nfsstat
+will print the number of \fBNFS\fR calls made since the previous report.
+Stats will be printed repeatedly every \fIinterval\fR seconds.
 .\" --------------------- EXAMPLES -------------------------------
 .SH EXAMPLES
 .TP
-- 
1.6.2.1


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

* [PATCH 2/2] nfsstat: Add --list flag
       [not found]     ` <1238785592-18869-2-git-send-email-kevin.constantine-FfNkGbSheRGpB8w63BLUukEOCMrvLtNR@public.gmane.org>
@ 2009-04-03 19:06       ` Kevin Constantine
       [not found]         ` <1238785592-18869-3-git-send-email-kevin.constantine-FfNkGbSheRGpB8w63BLUukEOCMrvLtNR@public.gmane.org>
  2009-04-03 23:48       ` [PATCH 1/2] nfsstat: Print diff stats every N seconds Greg Banks
  2009-04-04 10:42       ` Steve Dickson
  2 siblings, 1 reply; 10+ messages in thread
From: Kevin Constantine @ 2009-04-03 19:06 UTC (permalink / raw)
  To: steved
  Cc: linux-nfs, Kevin.Constantine-P5ys19MLBK/QT0dZR+AlfA,
	Kevin Constantine

 nfsstat.c: Adds the --list flag to print information in a list format instead of the standard multi-column format
 nfsstat.man: Updates the manpage to include the --list flag.

Signed-off-by: Kevin Constantine <kevin.constantine-FfNkGbSheRGpB8w63BLUukEOCMrvLtNR@public.gmane.org>
---
 utils/nfsstat/nfsstat.c   |   83 +++++++++++++++++++++++++++++++++++++++++++--
 utils/nfsstat/nfsstat.man |    3 ++
 2 files changed, 83 insertions(+), 3 deletions(-)

diff --git a/utils/nfsstat/nfsstat.c b/utils/nfsstat/nfsstat.c
index 453d345..28385b8 100644
--- a/utils/nfsstat/nfsstat.c
+++ b/utils/nfsstat/nfsstat.c
@@ -170,10 +170,13 @@ DECLARE_CLT(cltinfo, _old);
 static void		print_all_stats(int, int, int);
 static void		print_server_stats(int, int);
 static void		print_client_stats(int, int);
+static void		print_stats_list(int);
 static void		print_numbers(const char *, unsigned int *,
 					unsigned int);
 static void		print_callstats(const char *, const char **,
 					unsigned int *, unsigned int);
+static void		print_callstats_list(const char *, const char **,
+					unsigned int *, unsigned int);
 static int		parse_raw_statfile(const char *, struct statinfo *);
 static int 		parse_pretty_statfile(const char *, struct statinfo *);
 
@@ -232,6 +235,7 @@ void usage(char *name)
           		    If # is provided, stats will be output every\n\
 			    # seconds.\n\
   -S, --since file	Shows difference between current stats and those in 'file'\n\
+  -l, --list		Prints stats in list format\n\
   --version		Show program version\n\
   --help		What you just did\n\
 \n", name);
@@ -254,6 +258,7 @@ static struct option longopts[] =
 	{ "version", 0, 0, '\2' },
 	{ "sleep", 2, 0, 'Z' },
 	{ "since", 1, 0, 'S' },
+	{ "list", 0, 0, 'l' },
 	{ NULL, 0, 0, 0 }
 };
 
@@ -266,6 +271,7 @@ main(int argc, char **argv)
 			opt_prt = 0,
 			opt_sleep = 0,
 			sleep_time = 0,
+			opt_list =0,
 			opt_since = 0;
 	int		c;
 	char           *progname,
@@ -287,7 +293,7 @@ main(int argc, char **argv)
 	else
 		progname = argv[0];
 
-	while ((c = getopt_long(argc, argv, "234acmno:Z::S:vrsz\1\2", longopts, NULL)) != EOF) {
+	while ((c = getopt_long(argc, argv, "234acmno:Z::S:vrslz\1\2", longopts, NULL)) != EOF) {
 		switch (c) {
 		case 'a':
 			fprintf(stderr, "nfsstat: nfs acls are not yet supported.\n");
@@ -345,6 +351,9 @@ main(int argc, char **argv)
 		case 's':
 			opt_srv = 1;
 			break;
+		case 'l':
+			opt_list = 1;
+			break;
 		case 'z':
 			fprintf(stderr, "nfsstat: zeroing of nfs statistics "
 					"not yet supported\n");
@@ -425,14 +434,22 @@ main(int argc, char **argv)
 				get_stats(NFSCLTSTAT, clientinfo_tmp, &opt_clt, opt_srv, 0);
 				diff_stats(clientinfo_tmp, clientinfo, 0);
 			}
-			print_all_stats(opt_srv, opt_clt, opt_prt);
+			if (opt_list) {
+				print_stats_list(opt_prt);
+			} else {
+				print_all_stats(opt_srv, opt_clt, opt_prt);
+			}
 			fflush(stdout);
 
 			update_old_counters(clientinfo_tmp, clientinfo);
 			sleep(sleep_time);
 		}	
 	} else {
-		print_all_stats(opt_srv, opt_clt, opt_prt);
+		if (opt_list) {
+			print_stats_list(opt_prt);
+		} else {
+			print_all_stats(opt_srv, opt_clt, opt_prt);
+		}
 	}
 
 	return 0;
@@ -563,6 +580,47 @@ print_client_stats(int opt_clt, int opt_prt)
 	}
 }
 
+static void
+print_stats_list(int opt_prt) 
+{
+	if (opt_prt & PRNT_CALLS) {
+		if ((opt_prt & PRNT_V2) || ((opt_prt & PRNT_AUTO) && has_stats(cltproc2info))) {
+			print_callstats_list(
+			"nfs v2 server",
+			nfsv2name, srvproc2info + 1, sizeof(nfsv2name)/sizeof(char *));
+			printf("\n");
+			print_callstats_list(
+			"nfs v2 client",
+			nfsv2name, cltproc2info + 1,  sizeof(nfsv2name)/sizeof(char *));
+			printf("\n");
+		}
+		if ((opt_prt & PRNT_V3) || ((opt_prt & PRNT_AUTO) && has_stats(cltproc3info))) {
+			print_callstats_list(
+			"nfs v3 server",
+			nfsv3name, srvproc3info + 1, sizeof(nfsv3name)/sizeof(char *));
+			printf("\n");
+			print_callstats_list(
+			"nfs v3 client",
+			nfsv3name, cltproc3info + 1, sizeof(nfsv3name)/sizeof(char *));
+			printf("\n");
+		}
+		if ((opt_prt & PRNT_V4) || ((opt_prt & PRNT_AUTO) && has_stats(cltproc4info))) {
+			print_callstats_list(
+			"nfs v4 server",
+			nfssrvproc4name, srvproc4info + 1, sizeof(nfssrvproc4name)/sizeof(char *));
+			printf("\n");
+			print_callstats_list(
+			"nfs v4 ops",
+			nfssrvproc4opname, srvproc4opsinfo + 1, sizeof(nfssrvproc4opname)/sizeof(char *));
+			printf("\n");
+			print_callstats_list(
+			"nfs v4 client",
+			nfscltproc4name, cltproc4info + 1,  sizeof(nfscltproc4name)/sizeof(char *));
+			printf("\n");
+		}
+	}
+}
+
 static statinfo *
 get_stat_info(const char *sp, struct statinfo *statp)
 {
@@ -613,6 +671,25 @@ print_callstats(const char *hdr, const char **names,
 	printf("\n");
 }
 
+static void
+print_callstats_list(const char *hdr, const char **names,
+		 	unsigned int *callinfo, unsigned int nr)
+{
+	unsigned long long	calltotal;
+	int			i;
+
+	for (i = 0, calltotal = 0; i < nr; i++) {
+		calltotal += callinfo[i];
+	}
+	printf("%13s %13s %8llu \n", hdr, "total:", calltotal);
+	printf("------------- ------------- --------\n");
+	for (i = 0; i < nr; i++) {
+			printf("%13s %12s: %8u \n", hdr, names[i], callinfo[i]);
+	}
+		
+}
+
+
 /* returns 0 on success, 1 otherwise */
 static int
 parse_raw_statfile(const char *name, struct statinfo *statp)
diff --git a/utils/nfsstat/nfsstat.man b/utils/nfsstat/nfsstat.man
index 461b2c0..52215a9 100644
--- a/utils/nfsstat/nfsstat.man
+++ b/utils/nfsstat/nfsstat.man
@@ -72,6 +72,9 @@ Display all of the above facilities.
 .B \-v, \-\-verbose
 This is equivalent to \fB\-o all\fR.
 .TP
+.B \-l, \-\-list
+Print information in list form.
+.TP
 .BI "\-S, \-\-since " file
 Instead of printing current statistics, 
 .B nfsstat
-- 
1.6.2.1


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

* Re: [PATCH 1/2] nfsstat: Print diff stats every N seconds
       [not found]     ` <1238785592-18869-2-git-send-email-kevin.constantine-FfNkGbSheRGpB8w63BLUukEOCMrvLtNR@public.gmane.org>
  2009-04-03 19:06       ` [PATCH 2/2] nfsstat: Add --list flag Kevin Constantine
@ 2009-04-03 23:48       ` Greg Banks
       [not found]         ` <ac442c870904031648v5b40e29avf8c1327c07b4f7ec-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
  2009-04-04 10:42       ` Steve Dickson
  2 siblings, 1 reply; 10+ messages in thread
From: Greg Banks @ 2009-04-03 23:48 UTC (permalink / raw)
  To: Kevin Constantine; +Cc: steved, linux-nfs, Kevin Constantine

On Sat, Apr 4, 2009 at 6:06 AM, Kevin Constantine
<Kevin.Constantine-FfNkGbSheRGpB8w63BLUukEOCMrvLtNR@public.gmane.org> wrote:
>  nfsstat.c: Implements an optional "interval" argument to --sleep
>  nfsstat.man: Explains the use of --sleep[interval]
>
> Signed-off-by: Kevin Constantine <kevin.constantine-FfNkGbSheRGpB8w63BLUukEOCMrvLtNR@public.gmane.org>
> ---

Reviewed-By: Greg Banks <gnb-xTcybq6BZ68@public.gmane.org>
-- 
Greg.

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

* Re: [PATCH 2/2] nfsstat: Add --list flag
       [not found]         ` <1238785592-18869-3-git-send-email-kevin.constantine-FfNkGbSheRGpB8w63BLUukEOCMrvLtNR@public.gmane.org>
@ 2009-04-03 23:49           ` Greg Banks
       [not found]             ` <ac442c870904031649o5880e9fcpeb3d6420c5de9a9c-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
  0 siblings, 1 reply; 10+ messages in thread
From: Greg Banks @ 2009-04-03 23:49 UTC (permalink / raw)
  To: Kevin Constantine; +Cc: steved, linux-nfs, Kevin Constantine

On Sat, Apr 4, 2009 at 6:06 AM, Kevin Constantine
<Kevin.Constantine-FfNkGbSheRGpB8w63BLUukEOCMrvLtNR@public.gmane.org> wrote:
>  nfsstat.c: Adds the --list flag to print information in a list format instead of the standard multi-column format
>  nfsstat.man: Updates the manpage to include the --list flag.
>
> Signed-off-by: Kevin Constantine <kevin.constantine-FfNkGbSheRGpB8w63BLUukEOCMrvLtNR@public.gmane.org>
> ---
>

Reviewed-By: Greg Banks <gnb-xTcybq6BZ68@public.gmane.org>

-- 
Greg.

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

* Re: [PATCH 1/2] nfsstat: Print diff stats every N seconds
       [not found]     ` <1238785592-18869-2-git-send-email-kevin.constantine-FfNkGbSheRGpB8w63BLUukEOCMrvLtNR@public.gmane.org>
  2009-04-03 19:06       ` [PATCH 2/2] nfsstat: Add --list flag Kevin Constantine
  2009-04-03 23:48       ` [PATCH 1/2] nfsstat: Print diff stats every N seconds Greg Banks
@ 2009-04-04 10:42       ` Steve Dickson
  2 siblings, 0 replies; 10+ messages in thread
From: Steve Dickson @ 2009-04-04 10:42 UTC (permalink / raw)
  To: Kevin Constantine; +Cc: linux-nfs

Kevin Constantine wrote:
>  nfsstat.c: Implements an optional "interval" argument to --sleep
>  nfsstat.man: Explains the use of --sleep[interval]
> 
> Signed-off-by: Kevin Constantine <kevin.constantine-FfNkGbSheRGpB8w63BLUukEOCMrvLtNR@public.gmane.org>
> ---
>  utils/nfsstat/nfsstat.c   |  106 ++++++++++++++++++++++++++++++++++-----------
>  utils/nfsstat/nfsstat.man |    6 ++-
>  2 files changed, 85 insertions(+), 27 deletions(-)
> 
I'm making a slight modification to this patch.

I noticed when there was no NFS traffic and you
ran the 'nfsstat -Z5' command would continually 
spit out:

Client rpc stats:
calls      retrans    authrefrsh
0          0          0       

which makes the output a bit "messy" imho... 
So I added a the following code that will 
keep the interval output quite when there 
is no NFS traffic. 

steved.


Keep the interval output quite when there is no NFS traffic.

The  'nfsstat -Z5' command continually outputs the following
when there is no NFS traffic.

Client rpc stats:
calls      retrans    authrefrsh
0          0          0       

This patch adds code that will keep the interval output 
quite so real results will not be scrolled of the screen

Signed-off-by: Steve Dickson <steved@redhat.com>
-----------------------
diff -up nfs-utils/utils/nfsstat/nfsstat.c.orig nfs-utils/utils/nfsstat/nfsstat.c
--- nfs-utils/utils/nfsstat/nfsstat.c.orig	2009-04-03 15:28:19.000000000 -0400
+++ nfs-utils/utils/nfsstat/nfsstat.c	2009-04-04 06:23:02.000000000 -0400
@@ -184,6 +184,7 @@ static int		mounts(const char *);
 static void		get_stats(const char *, struct statinfo *, int *, int,
 					int);
 static int		has_stats(const unsigned int *);
+static int		has_rpcstats(const unsigned int *, int);
 static void 		diff_stats(struct statinfo *, struct statinfo *, int);
 static void 		unpause(int);
 static void 		update_old_counters(struct statinfo *, struct statinfo *);
@@ -256,6 +257,7 @@ static struct option longopts[] =
 	{ "since", 1, 0, 'S' },
 	{ NULL, 0, 0, 0 }
 };
+int opt_sleep;
 
 int
 main(int argc, char **argv)
@@ -264,7 +266,6 @@ main(int argc, char **argv)
 			opt_srv = 0,
 			opt_clt = 0,
 			opt_prt = 0,
-			opt_sleep = 0,
 			sleep_time = 0,
 			opt_since = 0;
 	int		c;
@@ -458,12 +459,14 @@ print_server_stats(int opt_srv, int opt_
 			printf("\n");
 		}
 		if (opt_prt & PRNT_RPC) {
-			print_numbers(
-			LABEL_srvrpc
-			"calls      badcalls   badauth    badclnt    xdrcall\n",
-			srvrpcinfo, 5
-			);
-			printf("\n");
+			if (!opt_sleep && !has_rpcstats(srvrpcinfo, 5)) {
+				print_numbers(
+				LABEL_srvrpc
+				"calls      badcalls   badauth    badclnt    xdrcall\n",
+				srvrpcinfo, 5
+				);
+				printf("\n");
+			}
 		}
 		if (opt_prt & PRNT_RC) {
 			print_numbers(
@@ -536,12 +539,14 @@ print_client_stats(int opt_clt, int opt_
 			printf("\n");
 		}
 		if (opt_prt & PRNT_RPC) {
-			print_numbers(
-			LABEL_cltrpc
-			"calls      retrans    authrefrsh\n",
-			cltrpcinfo, 3
-			);
-			printf("\n");
+			if (!opt_sleep && !has_rpcstats(cltrpcinfo, 3)) {
+				print_numbers(
+				LABEL_cltrpc
+				"calls      retrans    authrefrsh\n",
+				cltrpcinfo, 3
+				);
+				printf("\n");
+			}
 		}
 		if (opt_prt & PRNT_CALLS) {
 			if ((opt_prt & PRNT_V2) || ((opt_prt & PRNT_AUTO) && has_stats(cltproc2info)))
@@ -836,6 +841,15 @@ has_stats(const unsigned int *info)
 {
 	return (info[0] && info[info[0] + 1] > info[0]);
 }
+static int
+has_rpcstats(const unsigned int *info, int size)
+{
+	int i, cnt;
+
+	for (i=0, cnt=0; i < size; i++)
+		cnt += info[i];
+	return cnt;
+}
 
 /*
  * take the difference of each individual stat value in 'new' and 'old'


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

* Re: [PATCH 2/2] nfsstat: Add --list flag
       [not found]             ` <ac442c870904031649o5880e9fcpeb3d6420c5de9a9c-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 2009-04-04 11:55               ` Steve Dickson
  0 siblings, 0 replies; 10+ messages in thread
From: Steve Dickson @ 2009-04-04 11:55 UTC (permalink / raw)
  To: Greg Banks; +Cc: Kevin Constantine, linux-nfs, Kevin Constantine



Greg Banks wrote:
> On Sat, Apr 4, 2009 at 6:06 AM, Kevin Constantine
> <Kevin.Constantine-FfNkGbSheRGpB8w63BLUukEOCMrvLtNR@public.gmane.org> wrote:
>>  nfsstat.c: Adds the --list flag to print information in a list format instead of the standard multi-column format
>>  nfsstat.man: Updates the manpage to include the --list flag.
>>
>> Signed-off-by: Kevin Constantine <kevin.constantine-FfNkGbSheRGpB8w63BLUukEOCMrvLtNR@public.gmane.org>
>> ---
>>
> 
> Reviewed-By: Greg Banks <gnb-xTcybq6BZ68@public.gmane.org>
Committed...

steved.

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

* Re: [PATCH 1/2] nfsstat: Print diff stats every N seconds
       [not found]         ` <ac442c870904031648v5b40e29avf8c1327c07b4f7ec-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 2009-04-04 11:55           ` Steve Dickson
  0 siblings, 0 replies; 10+ messages in thread
From: Steve Dickson @ 2009-04-04 11:55 UTC (permalink / raw)
  To: Greg Banks; +Cc: Kevin Constantine, linux-nfs, Kevin Constantine



Greg Banks wrote:
> On Sat, Apr 4, 2009 at 6:06 AM, Kevin Constantine
> <Kevin.Constantine-FfNkGbSheRGpB8w63BLUukEOCMrvLtNR@public.gmane.org> wrote:
>>  nfsstat.c: Implements an optional "interval" argument to --sleep
>>  nfsstat.man: Explains the use of --sleep[interval]
>>
>> Signed-off-by: Kevin Constantine <kevin.constantine-FfNkGbSheRGpB8w63BLUukEOCMrvLtNR@public.gmane.org>
>> ---
> 
> Reviewed-By: Greg Banks <gnb-xTcybq6BZ68@public.gmane.org>

Committed.

steved.


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

end of thread, other threads:[~2009-04-04 11:58 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-04-03 19:06 [PATCH 0/2] nfsstat: Patch resend Kevin Constantine
     [not found] ` <1238785592-18869-1-git-send-email-kevin.constantine-FfNkGbSheRGpB8w63BLUukEOCMrvLtNR@public.gmane.org>
2009-04-03 19:06   ` [PATCH 1/2] nfsstat: Print diff stats every N seconds Kevin Constantine
     [not found]     ` <1238785592-18869-2-git-send-email-kevin.constantine-FfNkGbSheRGpB8w63BLUukEOCMrvLtNR@public.gmane.org>
2009-04-03 19:06       ` [PATCH 2/2] nfsstat: Add --list flag Kevin Constantine
     [not found]         ` <1238785592-18869-3-git-send-email-kevin.constantine-FfNkGbSheRGpB8w63BLUukEOCMrvLtNR@public.gmane.org>
2009-04-03 23:49           ` Greg Banks
     [not found]             ` <ac442c870904031649o5880e9fcpeb3d6420c5de9a9c-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-04-04 11:55               ` Steve Dickson
2009-04-03 23:48       ` [PATCH 1/2] nfsstat: Print diff stats every N seconds Greg Banks
     [not found]         ` <ac442c870904031648v5b40e29avf8c1327c07b4f7ec-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-04-04 11:55           ` Steve Dickson
2009-04-04 10:42       ` Steve Dickson
  -- strict thread matches above, loose matches on Subject: below --
2009-03-17  4:18 [PATCH 2/2] nfsstat: Add --list flag Greg Banks
2009-03-17  7:46 ` [PATCH 1/2] nfsstat: Print diff stats every N seconds Kevin Constantine
     [not found]   ` <1237275989-16421-1-git-send-email-kevin.constantine-FfNkGbSheRGpB8w63BLUukEOCMrvLtNR@public.gmane.org>
2009-03-18  2:43     ` Greg Banks

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox