* [PATCH 7/7] nfsstat: add -D/--diff-stat
@ 2007-07-31 21:39 david m. richter
2007-08-07 21:19 ` Steinar H. Gunderson
0 siblings, 1 reply; 8+ messages in thread
From: david m. richter @ 2007-07-31 21:39 UTC (permalink / raw)
To: Neil Brown; +Cc: Andrew Richardson, nfs, Alex Soule
Add -D/--diff-stat: instead of immediately displaying total
collected NFS stats and exiting, nfsstat will take a snapshot of current
statistics and pause until the user hits ^C, at which point it takes a
second snapshot and then prints out the difference of the two; i.e.,
only the statistics collected during the pause.
Signed-off-by: David M. Richter <richterd@citi.umich.edu>
---
utils/nfsstat/nfsstat.c | 93 ++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 91 insertions(+), 2 deletions(-)
diff --git a/utils/nfsstat/nfsstat.c b/utils/nfsstat/nfsstat.c
index ab6bce7..c9a2f7d 100644
--- a/utils/nfsstat/nfsstat.c
+++ b/utils/nfsstat/nfsstat.c
@@ -20,6 +20,8 @@
#include <string.h>
#include <fcntl.h>
#include <errno.h>
+#include <signal.h>
+#include <time.h>
#define MAXNRVALS 32
@@ -153,6 +155,11 @@ static int mounts(const char *);
static void get_stats(const char *, statinfo *, int *, int, const char *);
static int has_stats(const unsigned int *);
+static void copy_stats(statinfo *, statinfo *);
+static void diff_stats(statinfo *, statinfo *);
+static void unpause(int);
+
+static time_t starttime;
#define PRNT_CALLS 0x0001
#define PRNT_RPC 0x0002
@@ -191,6 +198,7 @@ void usage(char *name)
-v, --verbose, --all\tSame as '-o all'\n\
-r, --rpc\t\tShow RPC statistics\n\
-n, --nfs\t\tShow NFS statistics\n\
+ -D, --diff-stat\tSaves stats, pauses, diffs current and saved\n\
--version\t\tShow program version\n\
--help\t\tWhat you just did\n\
\n", name);
@@ -211,6 +219,7 @@ static struct option longopts[] =
{ "zero", 0, 0, 'z' },
{ "help", 0, 0, '\1' },
{ "version", 0, 0, '\2' },
+ { "diff-stat", 0, 0, 'D' },
{ NULL, 0, 0, 0 }
};
@@ -220,16 +229,22 @@ main(int argc, char **argv)
int opt_all = 0,
opt_srv = 0,
opt_clt = 0,
- opt_prt = 0;
+ opt_prt = 0,
+ opt_diffstat = 0;
int c;
char *progname;
+ struct sigaction act = {
+ .sa_handler = unpause,
+ .sa_flags = SA_ONESHOT,
+ };
+
if ((progname = strrchr(argv[0], '/')))
progname++;
else
progname = argv[0];
- while ((c = getopt_long(argc, argv, "234acmno:vrsz\1\2", longopts, NULL)) != EOF) {
+ while ((c = getopt_long(argc, argv, "234acmno:Dvrsz\1\2", longopts, NULL)) != EOF) {
switch (c) {
case 'a':
fprintf(stderr, "nfsstat: nfs acls are not yet supported.\n");
@@ -259,6 +274,9 @@ main(int argc, char **argv)
return 2;
}
break;
+ case 'D':
+ opt_diffstat = 1;
+ break;
case '2':
case '3':
case '4':
@@ -319,6 +337,29 @@ main(int argc, char **argv)
if (opt_clt)
get_stats(NFSCLTSTAT, cltinfo, &opt_clt, opt_srv, "Client");
+ /* save stat snapshots; wait for signal; then diff current and saved stats */
+ if (opt_diffstat) {
+ starttime = time(NULL);
+ printf("Collecting statistics; press CTRL-C to view results from interval (i.e., from pause to CTRL-C).\n");
+ if (opt_srv)
+ copy_stats(srvinfo_tmp, srvinfo);
+ if (opt_clt)
+ copy_stats(cltinfo_tmp, cltinfo);
+ if (sigaction(SIGINT, &act, NULL) != 0) {
+ fprintf(stderr, "Error: couldn't register for signal and pause.\n");
+ return 1;
+ }
+ pause();
+ if (opt_srv) {
+ get_stats(NFSSRVSTAT, srvinfo, &opt_srv, opt_clt, "Server");
+ diff_stats(srvinfo, srvinfo_tmp);
+ }
+ if (opt_clt) {
+ get_stats(NFSCLTSTAT, cltinfo, &opt_clt, opt_srv, "Client");
+ diff_stats(cltinfo, cltinfo_tmp);
+ }
+ }
+
if (opt_srv) {
if (opt_prt & PRNT_NET) {
print_numbers(
@@ -593,3 +634,51 @@ has_stats(const unsigned int *info)
{
return (info[0] && info[info[0] + 1] != info[0]);
}
+
+/* clone 'src' to 'dest' */
+static void
+copy_stats(struct statinfo *dest, struct statinfo *src)
+{
+ int i, j;
+
+ for (i = 0; src[i].tag; i++) {
+ dest[i].tag = src[i].tag;
+ dest[i].nrvals = src[i].nrvals;
+ for (j = 0; j < dest[i].nrvals; j++)
+ dest[i].valptr[j] = src[i].valptr[j];
+ }
+}
+
+/*
+ * take the difference of each individual stat value in 'new' and 'old'
+ * and store the results back into 'new'
+ */
+static void
+diff_stats(struct statinfo *new, struct statinfo *old)
+{
+ int i, j, is_srv, should_diff;
+
+ is_srv = (new == srvinfo);
+ for (i = 0; old[i].tag; i++) {
+ for (j = 0; j < new[i].nrvals; j++) {
+ /* skip items in valptr that shouldn't be changed */
+ should_diff = (i < (3 + is_srv) || j > 0);
+ if (should_diff)
+ new[i].valptr[j] -= old[i].valptr[j];
+ }
+ }
+}
+
+static void
+unpause(int sig)
+{
+ double time_diff;
+ int minutes, seconds;
+ time_t endtime;
+
+ endtime = time(NULL);
+ time_diff = difftime(endtime, starttime);
+ minutes = time_diff / 60;
+ seconds = (int)time_diff % 60;
+ printf("Signal received; displaying (only) statistics gathered over the last %d minutes, %d seconds:\n\n", minutes, seconds);
+}
--
1.4.4
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
NFS maillist - NFS@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nfs
^ permalink raw reply related [flat|nested] 8+ messages in thread* Re: [PATCH 7/7] nfsstat: add -D/--diff-stat
2007-07-31 21:39 [PATCH 7/7] nfsstat: add -D/--diff-stat david m. richter
@ 2007-08-07 21:19 ` Steinar H. Gunderson
2007-08-07 21:26 ` david m. richter
2007-08-09 1:25 ` Neil Brown
0 siblings, 2 replies; 8+ messages in thread
From: Steinar H. Gunderson @ 2007-08-07 21:19 UTC (permalink / raw)
To: david m. richter; +Cc: Neil Brown, Andrew Richardson, nfs, Alex Soule
On Tue, Jul 31, 2007 at 05:39:49PM -0400, david m. richter wrote:
> + double time_diff;
Unfortunately, this breaks the build on alpha. For some reason, configure.ac
does
case $host in
alpha*)
ARCHFLAGS="-mno-fp-regs -ffixed-8" ;;
*)
ARCHFLAGS="" ;;
esac
which essentially means that you cannot use any floating-point in the program
at all, according to the Debian alpha porters.
Either this snippet must be removed for alpha (I presume it was put in for a
reason at some point, but I have no idea what this reason was, and if it's
still valid), or the code must be rewritten not to use floating-point.
/* Steinar */
--
Homepage: http://www.sesse.net/
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
NFS maillist - NFS@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nfs
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH 7/7] nfsstat: add -D/--diff-stat
2007-08-07 21:19 ` Steinar H. Gunderson
@ 2007-08-07 21:26 ` david m. richter
2007-08-07 21:53 ` Steinar H. Gunderson
2007-08-09 1:25 ` Neil Brown
1 sibling, 1 reply; 8+ messages in thread
From: david m. richter @ 2007-08-07 21:26 UTC (permalink / raw)
To: Steinar H. Gunderson; +Cc: Neil Brown, Andrew Richardson, nfs, Alex Soule
On Tue, 7 Aug 2007, Steinar H. Gunderson wrote:
> On Tue, Jul 31, 2007 at 05:39:49PM -0400, david m. richter wrote:
> > + double time_diff;
>
> Unfortunately, this breaks the build on alpha. For some reason, configure.ac
> does
>
> case $host in
> alpha*)
> ARCHFLAGS="-mno-fp-regs -ffixed-8" ;;
> *)
> ARCHFLAGS="" ;;
> esac
>
> which essentially means that you cannot use any floating-point in the program
> at all, according to the Debian alpha porters.
>
> Either this snippet must be removed for alpha (I presume it was put in for a
> reason at some point, but I have no idea what this reason was, and if it's
> still valid), or the code must be rewritten not to use floating-point.
>
> /* Steinar */
ach, that's too bad; thanks for finding it. that double is only
used in one spot, in a "helpful" message that isn't important; we could
remove it. i'll look at it right now.
does anyone know the reason behind no-floating-point-on-Alpha?
thanks,
d
.
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
NFS maillist - NFS@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nfs
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 7/7] nfsstat: add -D/--diff-stat
2007-08-07 21:26 ` david m. richter
@ 2007-08-07 21:53 ` Steinar H. Gunderson
2007-08-07 22:08 ` Kevin Coffman
0 siblings, 1 reply; 8+ messages in thread
From: Steinar H. Gunderson @ 2007-08-07 21:53 UTC (permalink / raw)
To: david m. richter; +Cc: Neil Brown, Andrew Richardson, nfs, Alex Soule
On Tue, Aug 07, 2007 at 05:26:13PM -0400, david m. richter wrote:
> does anyone know the reason behind no-floating-point-on-Alpha?
It seems to have been added as part of this changelog entry (slightly munged
in git, perhaps something went wrong from the CVS import):
2005-12-20 Kevin Coffman <kwc@citi.umich.edu> NeilBrown <neilb@suse.de>
Substantial Makefile/configure rewrite.
Run 'autogen.sh' to create "Makefile.in" etc.
Also add -D_FILE_OFFSET_BITS=64 to CPP_FLAGS so that mountd can
stat and export files larger than 2Gig.
1.0.8-rc2 released
I sort of suspect it was just copied blindly from somewhere...
/* Steinar */
--
Homepage: http://www.sesse.net/
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
NFS maillist - NFS@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nfs
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH 7/7] nfsstat: add -D/--diff-stat
2007-08-07 21:53 ` Steinar H. Gunderson
@ 2007-08-07 22:08 ` Kevin Coffman
2007-08-07 22:15 ` david m. richter
0 siblings, 1 reply; 8+ messages in thread
From: Kevin Coffman @ 2007-08-07 22:08 UTC (permalink / raw)
To: Steinar H. Gunderson
Cc: Neil Brown, Andrew Richardson, nfs, Alex Soule, david m. richter
On 8/7/07, Steinar H. Gunderson <sgunderson@bigfoot.com> wrote:
> On Tue, Aug 07, 2007 at 05:26:13PM -0400, david m. richter wrote:
> > does anyone know the reason behind no-floating-point-on-Alpha?
>
> It seems to have been added as part of this changelog entry (slightly munged
> in git, perhaps something went wrong from the CVS import):
>
> 2005-12-20 Kevin Coffman <kwc@citi.umich.edu> NeilBrown <neilb@suse.de>
> Substantial Makefile/configure rewrite.
> Run 'autogen.sh' to create "Makefile.in" etc.
>
> Also add -D_FILE_OFFSET_BITS=64 to CPP_FLAGS so that mountd can
> stat and export files larger than 2Gig.
>
> 1.0.8-rc2 released
>
> I sort of suspect it was just copied blindly from somewhere...
Actually, it was copied carefully from the old config.mk.in :-)
It was in config.mk.in from the beginning, AFAICT.
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
NFS maillist - NFS@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nfs
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 7/7] nfsstat: add -D/--diff-stat
2007-08-07 22:08 ` Kevin Coffman
@ 2007-08-07 22:15 ` david m. richter
2007-08-07 23:31 ` Kevin Coffman
0 siblings, 1 reply; 8+ messages in thread
From: david m. richter @ 2007-08-07 22:15 UTC (permalink / raw)
To: Kevin Coffman; +Cc: Neil Brown, Andrew Richardson, nfs, Alex Soule
On Tue, 7 Aug 2007, Kevin Coffman wrote:
> On 8/7/07, Steinar H. Gunderson <sgunderson@bigfoot.com> wrote:
> > On Tue, Aug 07, 2007 at 05:26:13PM -0400, david m. richter wrote:
> > > does anyone know the reason behind no-floating-point-on-Alpha?
> >
> > It seems to have been added as part of this changelog entry (slightly munged
> > in git, perhaps something went wrong from the CVS import):
> >
> > 2005-12-20 Kevin Coffman <kwc@citi.umich.edu> NeilBrown <neilb@suse.de>
> > Substantial Makefile/configure rewrite.
> > Run 'autogen.sh' to create "Makefile.in" etc.
> >
> > Also add -D_FILE_OFFSET_BITS=64 to CPP_FLAGS so that mountd can
> > stat and export files larger than 2Gig.
> >
> > 1.0.8-rc2 released
> >
> > I sort of suspect it was just copied blindly from somewhere...
>
> Actually, it was copied carefully from the old config.mk.in :-)
> It was in config.mk.in from the beginning, AFAICT.
i'm curious -- is this something that can be removed from the
build stuff, then? (i haven't an Alpha on which to test..)
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
NFS maillist - NFS@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nfs
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 7/7] nfsstat: add -D/--diff-stat
2007-08-07 22:15 ` david m. richter
@ 2007-08-07 23:31 ` Kevin Coffman
0 siblings, 0 replies; 8+ messages in thread
From: Kevin Coffman @ 2007-08-07 23:31 UTC (permalink / raw)
To: david m. richter; +Cc: Neil Brown, Andrew Richardson, nfs, Alex Soule
On 8/7/07, david m. richter <richterd@citi.umich.edu> wrote:
> On Tue, 7 Aug 2007, Kevin Coffman wrote:
>
> > On 8/7/07, Steinar H. Gunderson <sgunderson@bigfoot.com> wrote:
> > > On Tue, Aug 07, 2007 at 05:26:13PM -0400, david m. richter wrote:
> > > > does anyone know the reason behind no-floating-point-on-Alpha?
> > >
> > > It seems to have been added as part of this changelog entry (slightly munged
> > > in git, perhaps something went wrong from the CVS import):
> > >
> > > 2005-12-20 Kevin Coffman <kwc@citi.umich.edu> NeilBrown <neilb@suse.de>
> > > Substantial Makefile/configure rewrite.
> > > Run 'autogen.sh' to create "Makefile.in" etc.
> > >
> > > Also add -D_FILE_OFFSET_BITS=64 to CPP_FLAGS so that mountd can
> > > stat and export files larger than 2Gig.
> > >
> > > 1.0.8-rc2 released
> > >
> > > I sort of suspect it was just copied blindly from somewhere...
> >
> > Actually, it was copied carefully from the old config.mk.in :-)
> > It was in config.mk.in from the beginning, AFAICT.
>
> i'm curious -- is this something that can be removed from the
> build stuff, then? (i haven't an Alpha on which to test..)
I've been looking back at the history. These alpha flags came from
the knfsd code. Looking at today's linux kernel code, it still has
these flags in arch/alpha/Makefile. Whether they are required for
user-land code, I don't know. (Whether they are req'd or really used
for kernel code, or are just some LCD thing, I don't know.)
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
NFS maillist - NFS@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nfs
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 7/7] nfsstat: add -D/--diff-stat
2007-08-07 21:19 ` Steinar H. Gunderson
2007-08-07 21:26 ` david m. richter
@ 2007-08-09 1:25 ` Neil Brown
1 sibling, 0 replies; 8+ messages in thread
From: Neil Brown @ 2007-08-09 1:25 UTC (permalink / raw)
To: Steinar H. Gunderson; +Cc: Andrew Richardson, nfs, Alex Soule, david m. richter
On Tuesday August 7, sgunderson@bigfoot.com wrote:
> On Tue, Jul 31, 2007 at 05:39:49PM -0400, david m. richter wrote:
> > + double time_diff;
>
> Unfortunately, this breaks the build on alpha. For some reason, configure.ac
> does
>
> case $host in
> alpha*)
> ARCHFLAGS="-mno-fp-regs -ffixed-8" ;;
> *)
> ARCHFLAGS="" ;;
> esac
>
> which essentially means that you cannot use any floating-point in the program
> at all, according to the Debian alpha porters.
>
> Either this snippet must be removed for alpha (I presume it was put in for a
> reason at some point, but I have no idea what this reason was, and if it's
> still valid), or the code must be rewritten not to use floating-point.
I have removed this snippet. It is clearly only needed for kernel
code, not for regular user-space programs.
Thanks,
NeilBrown
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
NFS maillist - NFS@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nfs
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2007-08-09 1:25 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-07-31 21:39 [PATCH 7/7] nfsstat: add -D/--diff-stat david m. richter
2007-08-07 21:19 ` Steinar H. Gunderson
2007-08-07 21:26 ` david m. richter
2007-08-07 21:53 ` Steinar H. Gunderson
2007-08-07 22:08 ` Kevin Coffman
2007-08-07 22:15 ` david m. richter
2007-08-07 23:31 ` Kevin Coffman
2007-08-09 1:25 ` Neil Brown
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.