linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "J. Bruce Fields" <bfields@fieldses.org>
To: Steve Dickson <SteveD@redhat.com>
Cc: Linux NFS Mailing list <linux-nfs@vger.kernel.org>
Subject: Re: [PATCH 3/3] nfsstat: Eliminate the displaying zero stats
Date: Sun, 12 Apr 2009 13:23:40 -0400	[thread overview]
Message-ID: <20090412172340.GD14592@fieldses.org> (raw)
In-Reply-To: <49DCCB34.4080901-AfCzQyP5zfLQT0dZR+AlfA@public.gmane.org>

On Wed, Apr 08, 2009 at 12:05:08PM -0400, Steve Dickson wrote:
> Eliminate the displaying zero stats when the explicit protocol
> is specified (-2, -3, -4) the -Z and or --list options.
>     
> When a particular protocol is specified and either
> the -Z or --list options are used, zeros or blank lines
> are echoed to the screen when there is not any NFS traffic.
> This cause any useful data to be scroll off the screen.

Sound like good fixes.

>     
> With this patch only non-zero stats will be shown, which
> makes the output of these options more condensed and
> in turn more useful.

Couldn't this make the output harder to parse?  E.g. if you want to know
how many getattr's were sent each second, it might be simpler if you say
a 0 those times when there were no getattrs.

--b.

>     
> Signed-off-by: Steve Dickson <steved@redhat.com>
> 
> diff --git a/utils/nfsstat/nfsstat.c b/utils/nfsstat/nfsstat.c
> index d5bdad7..6d81f66 100644
> --- a/utils/nfsstat/nfsstat.c
> +++ b/utils/nfsstat/nfsstat.c
> @@ -466,79 +466,96 @@ print_all_stats (int opt_srv, int opt_clt, int opt_prt)
>  static void 
>  print_server_stats(int opt_srv, int opt_prt) 
>  {
> -	if (opt_srv) {
> -		if (opt_prt & PRNT_NET) {
> -			print_numbers(
> -			LABEL_srvnet
> -			"packets    udp        tcp        tcpconn\n",
> -			srvnetinfo, 4
> -			);
> +	if (!opt_srv)
> +		return;
> +
> +	if (opt_prt & PRNT_NET) {
> +		if (opt_sleep && !has_rpcstats(srvnetinfo, 4)) {
> +		} else {
> +			print_numbers( LABEL_srvnet
> +				"packets    udp        tcp        tcpconn\n",
> +			srvnetinfo, 4);
>  			printf("\n");
>  		}
> -		if (opt_prt & PRNT_RPC) {
> -			if (!opt_sleep && !has_rpcstats(srvrpcinfo, 5)) {
> -				print_numbers(
> -				LABEL_srvrpc
> +	}
> +	if (opt_prt & PRNT_RPC) {
> +		if (opt_sleep && !has_rpcstats(srvrpcinfo, 5)) {
> +			;
> +		} else {
> +			print_numbers(LABEL_srvrpc
>  				"calls      badcalls   badauth    badclnt    xdrcall\n",
> -				srvrpcinfo, 5
> -				);
> -				printf("\n");
> -			}
> +				srvrpcinfo, 5);
> +			printf("\n");
>  		}
> -		if (opt_prt & PRNT_RC) {
> -			print_numbers(
> -			LABEL_srvrc
> -			"hits       misses     nocache\n",
> -			srvrcinfo, 3
> -			);
> +	}
> +	if (opt_prt & PRNT_RC) {
> +		if (opt_sleep && !has_rpcstats(srvrcinfo, 3)) {
> +			;
> +		} else {
> +			print_numbers(LABEL_srvrc
> +				"hits       misses     nocache\n",
> +				srvrcinfo, 3);
>  			printf("\n");
>  		}
> +	}
>  
> -		/*
> -		 * 2.2 puts all fh-related info after the 'rc' header
> -		 * 2.4 puts all fh-related info after the 'fh' header, but relocates
> -		 *     'stale' to the start and swaps dir and nondir :-(  
> -		 *     We preseve the 2.2 order
> -		 */
> -		if (opt_prt & PRNT_FH) {
> -			if (get_stat_info("fh", srvinfo)) {	/* >= 2.4 */
> -				int t = srvfhinfo[3];
> -				srvfhinfo[3]=srvfhinfo[4];
> -				srvfhinfo[4]=t;
> -				
> -				srvfhinfo[5]=srvfhinfo[0]; /* relocate 'stale' */
> -				
> -				print_numbers(
> -					LABEL_srvfh
> -					"lookup     anon       ncachedir  ncachedir  stale\n",
> -					srvfhinfo + 1, 5);
> -			} else					/* < 2.4 */
> -				print_numbers(
> -					LABEL_srvfh
> -					"lookup     anon       ncachedir  ncachedir  stale\n",
> -					srvrcinfo + 3, 5);
> -			printf("\n");
> +	/*
> +	 * 2.2 puts all fh-related info after the 'rc' header
> +	 * 2.4 puts all fh-related info after the 'fh' header, but relocates
> +	 *     'stale' to the start and swaps dir and nondir :-(  
> +	 *     We preseve the 2.2 order
> +	 */
> +	if (opt_prt & PRNT_FH) {
> +		if (get_stat_info("fh", srvinfo)) {	/* >= 2.4 */
> +			int t = srvfhinfo[3];
> +			srvfhinfo[3]=srvfhinfo[4];
> +			srvfhinfo[4]=t;
> +			
> +			srvfhinfo[5]=srvfhinfo[0]; /* relocate 'stale' */
> +			
> +			print_numbers(
> +				LABEL_srvfh
> +				"lookup     anon       ncachedir  ncachedir  stale\n",
> +				srvfhinfo + 1, 5);
> +		} else					/* < 2.4 */
> +			print_numbers(
> +				LABEL_srvfh
> +				"lookup     anon       ncachedir  ncachedir  stale\n",
> +				srvrcinfo + 3, 5);
> +		printf("\n");
> +	}
> +	if (opt_prt & PRNT_CALLS) {
> +		if ((opt_prt & PRNT_V2) || 
> +				((opt_prt & PRNT_AUTO) && has_stats(srvproc2info))) {
> +			if (opt_sleep && !has_stats(srvproc2info)) {
> +				;
> +			} else {
> +				print_callstats(LABEL_srvproc2,
> +					nfsv2name, srvproc2info + 1, 
> +					sizeof(nfsv2name)/sizeof(char *));
> +			}
> +		}
> +		if ((opt_prt & PRNT_V3) || 
> +				((opt_prt & PRNT_AUTO) && has_stats(srvproc3info))) {
> +			if (opt_sleep && !has_stats(srvproc3info)) {
> +				;
> +			} else {
> +				print_callstats(LABEL_srvproc3,
> +					nfsv3name, srvproc3info + 1, 
> +					sizeof(nfsv3name)/sizeof(char *));
> +			}
>  		}
> -		if (opt_prt & PRNT_CALLS) {
> -			if ((opt_prt & PRNT_V2) || ((opt_prt & PRNT_AUTO) && has_stats(srvproc2info)))
> -				print_callstats(
> -				LABEL_srvproc2,
> -				nfsv2name, srvproc2info + 1, sizeof(nfsv2name)/sizeof(char *)
> -				);
> -			if ((opt_prt & PRNT_V3) || ((opt_prt & PRNT_AUTO) && has_stats(srvproc3info)))
> -				print_callstats(
> -				LABEL_srvproc3,
> -				nfsv3name, srvproc3info + 1, sizeof(nfsv3name)/sizeof(char *)
> -				);
> -			if ((opt_prt & PRNT_V4) || ((opt_prt & PRNT_AUTO) && has_stats(srvproc4info))) {
> -				print_callstats(
> -				LABEL_srvproc4,
> -				nfssrvproc4name, srvproc4info + 1, sizeof(nfssrvproc4name)/sizeof(char *)
> -				);
> -				print_callstats(
> -				LABEL_srvproc4ops,
> -				nfssrvproc4opname, srvproc4opsinfo + 1, sizeof(nfssrvproc4opname)/sizeof(char *)
> -				);
> +		if ((opt_prt & PRNT_V4) || 
> +				((opt_prt & PRNT_AUTO) && has_stats(srvproc4info))) {
> +			if (opt_sleep && !has_stats(srvproc4info)) {
> +				;
> +			} else {
> +				print_callstats( LABEL_srvproc4,
> +					nfssrvproc4name, srvproc4info + 1, 
> +					sizeof(nfssrvproc4name)/sizeof(char *));
> +				print_callstats(LABEL_srvproc4ops,
> +					nfssrvproc4opname, srvproc4opsinfo + 1, 
> +					sizeof(nfssrvproc4opname)/sizeof(char *));
>  			}
>  		}
>  	}
> @@ -546,41 +563,59 @@ print_server_stats(int opt_srv, int opt_prt)
>  static void
>  print_client_stats(int opt_clt, int opt_prt) 
>  {
> -	if (opt_clt) {
> -		if (opt_prt & PRNT_NET) {
> -			print_numbers(
> -			LABEL_cltnet
> -			"packets    udp        tcp        tcpconn\n",
> -			cltnetinfo, 4
> -			);
> +	if (!opt_clt)
> +		return;
> +
> +	if (opt_prt & PRNT_NET) {
> +		if (opt_sleep && !has_rpcstats(cltnetinfo, 4)) {
> +			;
> +		} else { 
> +			print_numbers(LABEL_cltnet
> +				"packets    udp        tcp        tcpconn\n",
> +				cltnetinfo, 4);
>  			printf("\n");
>  		}
> -		if (opt_prt & PRNT_RPC) {
> -			if (!opt_sleep && !has_rpcstats(cltrpcinfo, 3)) {
> -				print_numbers(
> -				LABEL_cltrpc
> +	}
> +	if (opt_prt & PRNT_RPC) {
> +		if (opt_sleep && !has_rpcstats(cltrpcinfo, 3)) {
> +			;
> +		} else {
> +			print_numbers(LABEL_cltrpc
>  				"calls      retrans    authrefrsh\n",
> -				cltrpcinfo, 3
> -				);
> -				printf("\n");
> +				cltrpcinfo, 3);
> +			printf("\n");
> +		}
> +	}
> +	if (opt_prt & PRNT_CALLS) {
> +		if ((opt_prt & PRNT_V2) || 
> +				((opt_prt & PRNT_AUTO) && has_stats(cltproc2info))) {
> +			if (opt_sleep && !has_stats(cltproc2info)) {
> +				;
> +			} else {
> +				print_callstats(LABEL_cltproc2,
> +					nfsv2name, cltproc2info + 1,  
> +					sizeof(nfsv2name)/sizeof(char *));
> +			}
> +		}
> +		if ((opt_prt & PRNT_V3) || 
> +				((opt_prt & PRNT_AUTO) && has_stats(cltproc3info))) {
> +			if (opt_sleep && !has_stats(cltproc3info)) {
> +				;
> +			} else {
> +				print_callstats( LABEL_cltproc3,
> +					nfsv3name, cltproc3info + 1, 
> +					sizeof(nfsv3name)/sizeof(char *));
>  			}
>  		}
> -		if (opt_prt & PRNT_CALLS) {
> -			if ((opt_prt & PRNT_V2) || ((opt_prt & PRNT_AUTO) && has_stats(cltproc2info)))
> -				print_callstats(
> -				LABEL_cltproc2,
> -				nfsv2name, cltproc2info + 1,  sizeof(nfsv2name)/sizeof(char *)
> -				);
> -			if ((opt_prt & PRNT_V3) || ((opt_prt & PRNT_AUTO) && has_stats(cltproc3info)))
> -				print_callstats(
> -				LABEL_cltproc3,
> -				nfsv3name, cltproc3info + 1, sizeof(nfsv3name)/sizeof(char *)
> -				);
> -			if ((opt_prt & PRNT_V4) || ((opt_prt & PRNT_AUTO) && has_stats(cltproc4info)))
> -				print_callstats(
> -				LABEL_cltproc4,
> -				nfscltproc4name, cltproc4info + 1,  sizeof(nfscltproc4name)/sizeof(char *)
> -				);
> +		if ((opt_prt & PRNT_V4) || 
> +				((opt_prt & PRNT_AUTO) && has_stats(cltproc4info))) {
> +			if (opt_sleep && !has_stats(cltproc4info)) {
> +				;
> +			} else {
> +				print_callstats(LABEL_cltproc4,
> +					nfscltproc4name, cltproc4info + 1,  
> +					sizeof(nfscltproc4name)/sizeof(char *));
> +			}
>  		}
>  	}
>  }
> @@ -593,35 +628,28 @@ print_stats_list(int opt_prt)
>  			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");
>  		}
>  	}
>  }
> @@ -686,11 +714,15 @@ print_callstats_list(const char *hdr, const char **names,
>  	for (i = 0, calltotal = 0; i < nr; i++) {
>  		calltotal += callinfo[i];
>  	}
> +	if (!calltotal)
> +		return;
>  	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]);
> +			if (callinfo[i])
> +				printf("%13s %12s: %8u \n", hdr, names[i], callinfo[i]);
>  	}
> +	printf("\n");
>  		
>  }
>  
> --
> 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

  parent reply	other threads:[~2009-04-12 17:23 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-04-08 14:51 [PATCH 0/3] nfsstat: Fixing and improving the new --sleep and --list options Steve Dickson
     [not found] ` <49DCB9DA.5000300-AfCzQyP5zfLQT0dZR+AlfA@public.gmane.org>
2009-04-08 16:01   ` [PATCH 1/3] nfsstat: The --list option does not work on server stats Steve Dickson
2009-04-08 16:03   ` [PATCH 2/3] nfsstat: -Z showing incorrect " Steve Dickson
2009-04-08 16:05   ` [PATCH 3/3] nfsstat: Eliminate the displaying zero stats Steve Dickson
     [not found]     ` <49DCCB34.4080901-AfCzQyP5zfLQT0dZR+AlfA@public.gmane.org>
2009-04-12 17:23       ` J. Bruce Fields [this message]
2009-04-13 12:08         ` Steve Dickson
     [not found]           ` <49E32B4B.5060704-AfCzQyP5zfLQT0dZR+AlfA@public.gmane.org>
2009-04-13 17:02             ` Kevin Constantine
     [not found]               ` <49E3701E.40202-P5ys19MLBK/QT0dZR+AlfA@public.gmane.org>
2009-04-13 21:28                 ` Steve Dickson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090412172340.GD14592@fieldses.org \
    --to=bfields@fieldses.org \
    --cc=SteveD@redhat.com \
    --cc=linux-nfs@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).