diff mbox

nfsstat: add server ra cache stats

Message ID 541FB1D6.9040000@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Marko Myllynen Sept. 22, 2014, 5:21 a.m. UTC
From 7a5072efd524f5537a0b38808420bea8c0e45b01 Mon Sep 17 00:00:00 2001
From: Marko Myllynen <myllynen@redhat.com>
Date: Mon, 22 Sep 2014 08:13:04 +0300
Subject: [PATCH] nfsstat: add server ra cache stats

---
 utils/nfsstat/nfsstat.c |   29 +++++++++++++++++++++++++----
 1 files changed, 25 insertions(+), 4 deletions(-)
diff mbox

Patch

diff --git a/utils/nfsstat/nfsstat.c b/utils/nfsstat/nfsstat.c
index 83bde9d..8e165a8 100644
--- a/utils/nfsstat/nfsstat.c
+++ b/utils/nfsstat/nfsstat.c
@@ -96,6 +96,11 @@  static unsigned int	srvioinfo[3], srvioinfo_old[3];		/* 0  bytes read
 								 * 1  bytes written
 								 */
 
+static unsigned int	srvrainfo[13], srvrainfo_old[13];	/* 0  ra cache size
+								 * 1..11 depth of ra cache hit
+								 * 12 ra cache misses
+								 */
+
 static const char *	nfsv2name[SRVPROC2_SZ] = {
 	"null", "getattr", "setattr", "root",   "lookup",  "readlink",
 	"read", "wrcache", "write",   "create", "remove",  "rename",
@@ -172,6 +177,7 @@  static const char *     nfssrvproc4opname[SRVPROC4OPS_SZ] = {
 #define LABEL_srvrc		"Server reply cache:\n"
 #define LABEL_srvfh		"Server file handle cache:\n"
 #define LABEL_srvio		"Server io stats:\n"
+#define LABEL_srvra		"Server read ahead cache:\n"
 #define LABEL_srvproc2		"Server nfs v2:\n"
 #define LABEL_srvproc3		"Server nfs v3:\n"
 #define LABEL_srvproc4		"Server nfs v4:\n"
@@ -204,6 +210,7 @@  typedef struct statinfo {
 					SRV(rc,s), \
 					SRV(fh,s), \
 					SRV(io,s), \
+					SRV(ra,s), \
 					SRV(proc2,s), \
 					SRV(proc3,s),\
 					SRV(proc4,s), \
@@ -256,6 +263,7 @@  static time_t		starttime;
 #define PRNT_FH		0x0008
 #define PRNT_RC		0x0010
 #define PRNT_IO		0x0020
+#define PRNT_RA		0x0040
 #define PRNT_AUTO	0x1000
 #define PRNT_V2		0x2000
 #define PRNT_V3		0x4000
@@ -283,8 +291,9 @@  void usage(char *name)
      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\
      io			Usage information on the server's io statistics\n\
+     ra			Usage information on the server's read ahead 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\
@@ -376,8 +385,10 @@  main(int argc, char **argv)
 				opt_prt |= PRNT_FH;
 			else if (!strcmp(optarg, "io"))
 				opt_prt |= PRNT_IO;
+			else if (!strcmp(optarg, "ra"))
+				opt_prt |= PRNT_RA;
 			else if (!strcmp(optarg, "all"))
-				opt_prt |= PRNT_CALLS | PRNT_RPC | PRNT_NET | PRNT_RC | PRNT_FH | PRNT_IO;
+				opt_prt |= PRNT_CALLS | PRNT_RPC | PRNT_NET | PRNT_RC | PRNT_FH | PRNT_IO | PRNT_RA;
 			else {
 				fprintf(stderr, "nfsstat: unknown category: "
 						"%s\n", optarg);
@@ -445,9 +456,9 @@  main(int argc, char **argv)
 	if (!(opt_prt & 0xe000)) {
 		opt_prt |= PRNT_AUTO;
 	}
-	if ((opt_prt & (PRNT_FH|PRNT_RC|PRNT_IO)) && !opt_srv) {
+	if ((opt_prt & (PRNT_FH|PRNT_RC|PRNT_IO|PRNT_RA)) && !opt_srv) {
 		fprintf(stderr,
-			"You requested io, file handle, or request cache "
+			"You requested fh/io/ra/rc "
 			"statistics while using the -c option.\n"
 			"This information is available only for the NFS "
 			"server.\n");
@@ -572,6 +583,16 @@  print_server_stats(int opt_prt)
 			printf("\n");
 		}
 	}
+	if (opt_prt & PRNT_RA) {
+		if (opt_sleep && !has_rpcstats(srvrainfo, 3)) {
+			;
+		} else {
+			print_numbers(LABEL_srvra
+				"size       0-10%      10-20%     20-30%     30-40%     40-50%     50-60%     60-70%     70-80%     80-90%     90-100%    notfound\n",
+				srvrainfo, 12);
+			printf("\n");
+		}
+	}
 
 	/*
 	 * 2.2 puts all fh-related info after the 'rc' header