After some testing, I corrected an error and removed a
couple of redundancies.  I have the following patch
applied and running on my system and it seems solid:

CLIENT
 sar -n NFS
Linux 2.6.18 (dell566)  08/08/2007

12:00:02 AM    call/s retrans/s    read/s   write/s 
access/s  getatt/s
<* snip *>
01:35:01 PM      9.70      0.00      0.00      0.00   
  3.47      0.45
01:45:01 PM      4.84      0.00      0.00      0.00   
  1.96      0.23
01:55:01 PM      0.00      0.00      0.00      0.00   
  0.00      0.00
02:05:01 PM     90.34      0.00      0.00      0.01   
 27.67      2.46
02:15:02 PM    216.38      0.00      0.00      0.01   
 69.51      6.07
Average:        35.49      0.00      0.00      0.00   
 11.25      1.03
 

SERVER 
 sar -n NFSD
Linux 2.6.18 (emach433)         08/08/2007

01:34:31 PM       LINUX RESTART

01:35:01 PM   scall/s badcall/s  packet/s     udp/s   
 tcp/s     hit/s    miss/s   sread/s  swrite/s
saccess/s sgetatt/s
01:45:01 PM      4.84      0.00      4.84      0.00   
  4.84      0.00      0.00      0.00      0.00     
0.23      5.02
01:55:01 PM      0.00      0.00      0.00      0.00   
  0.00      0.00      0.00      0.00      0.00     
0.00      0.00
02:05:01 PM     90.47      0.00     90.47      0.00   
 90.46      0.00      0.00      0.00      0.01     
2.47     94.06
02:15:02 PM    216.48      0.00    216.48      0.00   
216.48      0.00      0.00      0.00      0.01     
6.06    231.47
Average:        77.95      0.00     77.95      0.00   
 77.95      0.00      0.00      0.00      0.01     
2.19     82.64

--- sadc.old	2007-08-07 22:53:24.000000000 -0400
+++ sadc.c	2007-08-08 14:08:32.000000000 -0400
@@ -64,6 +64,8 @@
 unsigned int u_tmp[NR_DISKS - 1];
 char comment[MAX_COMMENT_LEN];
 
+/* NFS V4 support */
+char *v3zeroes = "0 0 0 0 0 0 0 0";	/* Version 3 zero counts */
 
 /*
  ***************************************************************************
@@ -1270,6 +1272,12 @@
 {
    FILE *fp;
    static char line[256];
+   
+   /* NFS Version 4 client support */
+   static char *v4cfmt = "%*u %*u %u %u %*u %*u "	/* Version 4 client format */
+			 "%*u %*u %*u %*u %*u %*u "
+			 "%*u %*u %*u %*u %*u %*u "
+			 "%u %u";         
 
    if ((fp = fopen(NET_RPC_NFS, "r")) == NULL)
       return;
@@ -1280,10 +1288,16 @@
 	 sscanf(line + 3, "%u %u",
 		&(file_stats.nfs_rpccnt), &(file_stats.nfs_rpcretrans));
 	
-      else if (!strncmp(line, "proc3", 5))
+      else if (!strncmp(line, "proc3", 5) && !strncmp(line + 9, v3zeroes, strlen(v3zeroes)))
 	 sscanf(line + 5, "%*u %*u %u %*u %*u %u %*u %u %u",
 		&(file_stats.nfs_getattcnt), &(file_stats.nfs_accesscnt),
 		&(file_stats.nfs_readcnt), &(file_stats.nfs_writecnt));
+		
+      /* NFS Version 4 client support */
+      else if (!strncmp(line, "proc4", 5))
+         sscanf(line + 5, v4cfmt, 
+		&(file_stats.nfs_readcnt), &(file_stats.nfs_writecnt),
+		&(file_stats.nfs_getattcnt), &(file_stats.nfs_accesscnt));
    }
 
    fclose(fp);
@@ -1299,7 +1313,16 @@
 {
    FILE *fp;
    static char line[256];
-
+   
+   /* NFS Version 4 server support */
+   static char *v4sfmt = "%*u %*u %*u %*u %u %*u "	/* Version 4 server format */
+			 "%*u %*u %*u %*u %u %*u "
+			 "%*u %*u %*u %*u %*u %*u "
+			 "%*u %*u %*u %*u %*u %*u "
+			 "%*u %*u %u %*u %*u %*u "
+			 "%*u %*u %*u %*u %*u %*u "
+			 "%*u %*u %*u %u"; 
+			 
    if ((fp = fopen(NET_RPC_NFSD, "r")) == NULL)
       return;
 
@@ -1318,17 +1341,20 @@
 	 sscanf(line + 3, "%u %u",
 		&(file_stats.nfsd_rpccnt), &(file_stats.nfsd_rpcbad));
 	
-      else if (!strncmp(line, "proc3", 5))
-	 sscanf(line + 5, "%*u %*u %u %*u %*u %u %*u %u %u",
+      else if (!strncmp(line, "proc3", 5) && !strncmp(line + 11, v3zeroes, strlen(v3zeroes)))
+      	 sscanf(line + 5, "%*u %*u %u %*u %*u %u %*u %u %u",
 		&(file_stats.nfsd_getattcnt), &(file_stats.nfsd_accesscnt),
 		&(file_stats.nfsd_readcnt), &(file_stats.nfsd_writecnt));
+      else if (!strncmp(line, "proc4ops", 8)) 
+        sscanf(line + 8, v4sfmt,
+		&(file_stats.nfsd_accesscnt), &(file_stats.nfsd_getattcnt),
+		&(file_stats.nfsd_readcnt), &(file_stats.nfsd_writecnt));
    }
 
    fclose(fp);
 }
 
 
-
 /*
  ***************************************************************************
  * Read stats from /proc/diskstats

Reply via email to