Ivana Varekova 48dfff6
diff -up sysstat-8.0.4/man/iostat.1.pom sysstat-8.0.4/man/iostat.1
Ivana Varekova 48dfff6
--- sysstat-8.0.4/man/iostat.1.pom	2007-11-10 14:41:02.000000000 +0100
Ivana Varekova 48dfff6
+++ sysstat-8.0.4/man/iostat.1	2008-03-06 10:21:45.000000000 +0100
Ivana Varekova 48dfff6
@@ -3,7 +3,7 @@
Ivana Varekova 48dfff6
 iostat \- Report Central Processing Unit (CPU) statistics and input/output
Ivana Varekova 48dfff6
 statistics for devices, partitions and network filesystems (NFS).
Ivana Varekova 48dfff6
 .SH SYNOPSIS
Ivana Varekova 48dfff6
-.B iostat [ -c ] [ -d ] [ -N ] [ -n ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [
Ivana Varekova 48dfff6
+.B iostat [ -c ] [ -d ] [ -N ] [ -n ] [ -h ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [
Ivana Varekova 48dfff6
 .I device
Ivana Varekova 48dfff6
 .B [ ... ] | ALL ] [ -p [
Ivana Varekova 48dfff6
 .I device
Ivana Varekova 48dfff6
@@ -409,6 +409,19 @@ NFS READ request.
Ivana Varekova 48dfff6
 .RS
Ivana Varekova 48dfff6
 Indicate the number of megabytes written to the server by the NFS client via an
Ivana Varekova 48dfff6
 NFS WRITE request.
Ivana Varekova 48dfff6
+ 
Ivana Varekova 48dfff6
+.RE 
Ivana Varekova 48dfff6
+.B rops/s 
Ivana Varekova 48dfff6
+.RS 
Ivana Varekova 48dfff6
+Indicate the number of read operations that were issued to the mount point  
Ivana Varekova 48dfff6
+per second  
Ivana Varekova 48dfff6
+ 
Ivana Varekova 48dfff6
+.RE 
Ivana Varekova 48dfff6
+.B wops/s 
Ivana Varekova 48dfff6
+.RS 
Ivana Varekova 48dfff6
+Indicate the number of write operations that were issued to the mount point  
Ivana Varekova 48dfff6
+per second 
Ivana Varekova 48dfff6
+
Ivana Varekova 48dfff6
 .RE
Ivana Varekova 48dfff6
 .RE
Ivana Varekova 48dfff6
 .SH OPTIONS
Ivana Varekova 48dfff6
@@ -429,6 +442,8 @@ Useful for viewing LVM2 statistics.
Ivana Varekova 48dfff6
 .IP -n
Ivana Varekova 48dfff6
 Display the network filesystem (NFS) report. This option works only with kernel
Ivana Varekova 48dfff6
 2.6.17 and later.
Ivana Varekova 48dfff6
+.IP -h 
Ivana Varekova 48dfff6
+Display the NFS report more human readable.
Ivana Varekova 48dfff6
 .IP "-p [ { device | ALL } ]"
Ivana Varekova 48dfff6
 The -p option is exclusive of the -x option and displays statistics for
Ivana Varekova 48dfff6
 block devices and all their partitions that are used by the system.
Ivana Varekova 48dfff6
diff -up sysstat-8.0.4/iostat.c.pom sysstat-8.0.4/iostat.c
Ivana Varekova 48dfff6
--- sysstat-8.0.4/iostat.c.pom	2008-01-01 10:26:31.000000000 +0100
Ivana Varekova 48dfff6
+++ sysstat-8.0.4/iostat.c	2008-03-06 12:13:01.000000000 +0100
Ivana Varekova 48dfff6
@@ -73,7 +73,7 @@ void usage(char *progname)
Ivana Varekova 48dfff6
 {
Ivana Varekova 48dfff6
    fprintf(stderr, _("Usage: %s [ options... ] [ <interval> [ <count> ] ]\n"
Ivana Varekova 48dfff6
 		   "Options are:\n"
Ivana Varekova 48dfff6
-		   "[ -c ] [ -d ] [ -N ] [ -n ] [ -k | -m ] [ -t ] [ -V ] [ -x ]\n"
Ivana Varekova 48dfff6
+		   "[ -c ] [ -d ] [ -N ] [ -n ] [ -h ] [ -k | -m ] [ -t ] [ -V ] [ -x ]\n"
Ivana Varekova 48dfff6
 		   "[ <device> [ ... ] | ALL ] [ -p [ <device> | ALL ] ]\n"),
Ivana Varekova 48dfff6
 	   progname);
Ivana Varekova 48dfff6
    exit(1);
Ivana Varekova 48dfff6
@@ -843,10 +843,11 @@ void read_ppartitions_stat(int curr, int
Ivana Varekova 48dfff6
 void read_nfs_stat(int curr, int flags)
Ivana Varekova 48dfff6
 {
Ivana Varekova 48dfff6
    FILE *fp;
Ivana Varekova 48dfff6
-   int i, sw = 0;
Ivana Varekova 48dfff6
+   int sw = 0;
Ivana Varekova 48dfff6
    char line[8192];
Ivana Varekova 48dfff6
+   char *xprt_line; 
Ivana Varekova 48dfff6
    char nfs_name[MAX_NAME_LEN];
Ivana Varekova 48dfff6
-   char mount[10], on[10], bytes[10], aux[32];
Ivana Varekova 48dfff6
+   char mount[10], on[10], prefix[10], aux[32];
Ivana Varekova 48dfff6
    struct io_nfs_stats snfs;
Ivana Varekova 48dfff6
 
Ivana Varekova 48dfff6
    /* Every I/O NFS entry is potentially unregistered */
Ivana Varekova 48dfff6
@@ -869,15 +870,45 @@ void read_nfs_stat(int curr, int flags)
Ivana Varekova 48dfff6
          }
Ivana Varekova 48dfff6
       }
Ivana Varekova 48dfff6
 
Ivana Varekova 48dfff6
-      sscanf(line, "%10s", bytes);
Ivana Varekova 48dfff6
-      if (sw && (!strncmp(bytes, "bytes:", 6))) {
Ivana Varekova 48dfff6
+      sscanf(line, "%10s", prefix);
Ivana Varekova 48dfff6
+      if (sw && (!strncmp(prefix, "bytes:", 6))) {
Ivana Varekova 48dfff6
          /* Read the stats for the last NFS-mounted directory */
Ivana Varekova 48dfff6
-         i = sscanf(strstr(line, "bytes:") + 6, "%llu %llu %llu %llu %llu %llu",
Ivana Varekova 48dfff6
+         sscanf(strstr(line, "bytes:") + 6, "%llu %llu %llu %llu %llu %llu",
Ivana Varekova 48dfff6
 		    &snfs.rd_normal_bytes, &snfs.wr_normal_bytes, &snfs.rd_direct_bytes,
Ivana Varekova 48dfff6
 		    &snfs.wr_direct_bytes, &snfs.rd_server_bytes, &snfs.wr_server_bytes);
Ivana Varekova 48dfff6
 
Ivana Varekova 48dfff6
-         save_stats(nfs_name, curr, &snfs, ionfs_nr, st_hdr_ionfs);
Ivana Varekova 48dfff6
-         sw = 0;
Ivana Varekova 48dfff6
+         sw = 2;
Ivana Varekova 48dfff6
+      }
Ivana Varekova 48dfff6
+  
Ivana Varekova 48dfff6
+      if ((sw==2) && (!strncmp(prefix,"xprt:", 5))) { 
Ivana Varekova 48dfff6
+         /* Read extended statistic for the last NFS-mounted directory 
Ivana Varekova 48dfff6
+            - number of sent rpc requests*/ 
Ivana Varekova 48dfff6
+         xprt_line=(strstr(line,"xprt:")+6); 
Ivana Varekova 48dfff6
+         /* upc, tcp or rdma data  */ 
Ivana Varekova 48dfff6
+
Ivana Varekova 48dfff6
+         if (!strncmp(xprt_line,"udp",3)) { 
Ivana Varekova 48dfff6
+            /* port, bind_count, sends, recvs, bad_xids, req_u, bklog_u */ 
Ivana Varekova 48dfff6
+            sscanf(strstr(xprt_line,"udp")+4, "%*u %*u %lu %lu %*u %*u %*u", 
Ivana Varekova 48dfff6
+                   &snfs.rpc_sends, &snfs.rpc_recvs); 
Ivana Varekova 48dfff6
+         } 
Ivana Varekova 48dfff6
+
Ivana Varekova 48dfff6
+         if (!strncmp(xprt_line,"tcp",3)) { 
Ivana Varekova 48dfff6
+            /* port, bind_counter, connect_count, connect_time, idle_time, 
Ivana Varekova 48dfff6
+               sends, recvs, bad_xids, req_u, bklog_u*/ 
Ivana Varekova 48dfff6
+            sscanf(strstr(xprt_line,"tcp")+4, "%*u %*u %*u %*u %*d %lu %lu %*u %*u %*u", 
Ivana Varekova 48dfff6
+                   &snfs.rpc_sends, &snfs.rpc_recvs);                                                                
Ivana Varekova 48dfff6
+         } 
Ivana Varekova 48dfff6
+
Ivana Varekova 48dfff6
+         if (!strncmp(xprt_line,"rdma",4)) { 
Ivana Varekova 48dfff6
+            /* 0(port), bind_count, connect_count, connect_time, idle_time 
Ivana Varekova 48dfff6
+               sends, recvs, bad_xids, req_u, bklog_u 
Ivana Varekova 48dfff6
+               ... */ 
Ivana Varekova 48dfff6
+            sscanf(strstr(xprt_line,"rdma")+5,"%*u %*u %*u %*u %*d %lu %lu %*u %*u %*u " 
Ivana Varekova 48dfff6
+                   "%*u %*u %*u %*u %*u %*u %*u %*u %*u %*u\n", 
Ivana Varekova 48dfff6
+                   &snfs.rpc_sends, &snfs.rpc_recvs); 
Ivana Varekova 48dfff6
+         } 
Ivana Varekova 48dfff6
+         save_stats(nfs_name, curr, &snfs, ionfs_nr, st_hdr_ionfs);                          
Ivana Varekova 48dfff6
+         sw = 0; 
Ivana Varekova 48dfff6
       }
Ivana Varekova 48dfff6
    }
Ivana Varekova 48dfff6
 
Ivana Varekova 48dfff6
@@ -957,15 +988,15 @@ void write_nfs_stat_header(int flags, in
Ivana Varekova 48dfff6
 {
Ivana Varekova 48dfff6
    printf("Filesystem:           ");
Ivana Varekova 48dfff6
    if (DISPLAY_KILOBYTES(flags)) {
Ivana Varekova 48dfff6
-      printf("    rkB_nor/s    wkB_nor/s    rkB_dir/s    wkB_dir/s    rkB_svr/s    wkB_svr/s\n");
Ivana Varekova 48dfff6
+      printf("    rkB_nor/s    wkB_nor/s    rkB_dir/s    wkB_dir/s    rkB_svr/s    wkB_svr/s    rops/s    wops/s\n");
Ivana Varekova 48dfff6
       *fctr = 1024;
Ivana Varekova 48dfff6
    }
Ivana Varekova 48dfff6
    else if (DISPLAY_MEGABYTES(flags)) {
Ivana Varekova 48dfff6
-      printf("    rMB_nor/s    wMB_nor/s    rMB_dir/s    wMB_dir/s    rMB_svr/s    wMB_svr/s\n");
Ivana Varekova 48dfff6
+      printf("    rMB_nor/s    wMB_nor/s    rMB_dir/s    wMB_dir/s    rMB_svr/s    wMB_svr/s    rops/s    wops/s\n");
Ivana Varekova 48dfff6
       *fctr = 1024 * 1024;
Ivana Varekova 48dfff6
    }
Ivana Varekova 48dfff6
    else {
Ivana Varekova 48dfff6
-      printf("   rBlk_nor/s   wBlk_nor/s   rBlk_dir/s   wBlk_dir/s   rBlk_svr/s   wBlk_svr/s\n");
Ivana Varekova 48dfff6
+      printf("   rBlk_nor/s   wBlk_nor/s   rBlk_dir/s   wBlk_dir/s   rBlk_svr/s   wBlk_svr/s    rops/s    wops/s\n");
Ivana Varekova 48dfff6
       *fctr = 512;
Ivana Varekova 48dfff6
    }
Ivana Varekova 48dfff6
 }
Ivana Varekova 48dfff6
@@ -1084,14 +1115,19 @@ void write_nfs_stat(int curr, unsigned l
Ivana Varekova 48dfff6
 		    struct io_hdr_stats *shi, struct io_nfs_stats *ioni,
Ivana Varekova 48dfff6
 		    struct io_nfs_stats *ionj)
Ivana Varekova 48dfff6
 {
Ivana Varekova 48dfff6
-   printf("%-22s %12.2f %12.2f %12.2f %12.2f %12.2f %12.2f\n",
Ivana Varekova 48dfff6
-	  shi->name,
Ivana Varekova 48dfff6
-	  S_VALUE(ionj->rd_normal_bytes, ioni->rd_normal_bytes, itv) / fctr,
Ivana Varekova 48dfff6
+   if (DISPLAY_HUMAN_READABLE(flags)) 
Ivana Varekova 48dfff6
+      printf("%-22s \n%23s", shi-> name,""); 
Ivana Varekova 48dfff6
+   else 
Ivana Varekova 48dfff6
+      printf("%-22s ", shi->name); 
Ivana Varekova 48dfff6
+      printf("%12.2f %12.2f %12.2f %12.2f %12.2f %12.2f %9.2f %9.2f \n", 
Ivana Varekova 48dfff6
+ 	  S_VALUE(ionj->rd_normal_bytes, ioni->rd_normal_bytes, itv) / fctr,
Ivana Varekova 48dfff6
 	  S_VALUE(ionj->wr_normal_bytes, ioni->wr_normal_bytes, itv) / fctr,
Ivana Varekova 48dfff6
 	  S_VALUE(ionj->rd_direct_bytes, ioni->rd_direct_bytes, itv) / fctr,
Ivana Varekova 48dfff6
 	  S_VALUE(ionj->wr_direct_bytes, ioni->wr_direct_bytes, itv) / fctr,
Ivana Varekova 48dfff6
 	  S_VALUE(ionj->rd_server_bytes, ioni->rd_server_bytes, itv) / fctr,
Ivana Varekova 48dfff6
-	  S_VALUE(ionj->wr_server_bytes, ioni->wr_server_bytes, itv) / fctr);
Ivana Varekova 48dfff6
+	  S_VALUE(ionj->wr_server_bytes, ioni->wr_server_bytes, itv) / fctr,
Ivana Varekova 48dfff6
+          S_VALUE(ionj->rpc_sends, ioni->rpc_sends, itv), 
Ivana Varekova 48dfff6
+          S_VALUE(ionj->rpc_recvs, ioni->rpc_recvs, itv));
Ivana Varekova 48dfff6
 }
Ivana Varekova 48dfff6
 
Ivana Varekova 48dfff6
 
Ivana Varekova 48dfff6
@@ -1353,6 +1389,11 @@ int main(int argc, char **argv)
Ivana Varekova 48dfff6
 	       flags |= I_D_DISK;	/* Display disk utilization */
Ivana Varekova 48dfff6
 	       break;
Ivana Varekova 48dfff6
 	
Ivana Varekova 48dfff6
+             case 'h': 
Ivana Varekova 48dfff6
+               /* Display NFS stats human readable*/ 
Ivana Varekova 48dfff6
+               flags |= I_D_HUMAN_READABLE; 
Ivana Varekova 48dfff6
+               break; 
Ivana Varekova 48dfff6
+
Ivana Varekova 48dfff6
 	     case 'k':
Ivana Varekova 48dfff6
 	       if (DISPLAY_MEGABYTES(flags))
Ivana Varekova 48dfff6
 		  usage(argv[0]);
Ivana Varekova 48dfff6
diff -up sysstat-8.0.4/iostat.h.pom sysstat-8.0.4/iostat.h
Ivana Varekova 48dfff6
--- sysstat-8.0.4/iostat.h.pom	2008-01-01 10:26:31.000000000 +0100
Ivana Varekova 48dfff6
+++ sysstat-8.0.4/iostat.h	2008-03-06 11:04:05.000000000 +0100
Ivana Varekova 48dfff6
@@ -27,6 +27,7 @@
Ivana Varekova 48dfff6
 #define I_F_HAS_NFS		0x08000
Ivana Varekova 48dfff6
 #define I_D_DEVMAP_NAME		0x10000
Ivana Varekova 48dfff6
 #define I_D_ISO			0x20000
Ivana Varekova 48dfff6
+#define I_D_HUMAN_READABLE     	0x40000 
Ivana Varekova 48dfff6
 
Ivana Varekova 48dfff6
 #define DISPLAY_CPU(m)		(((m) & I_D_CPU) == I_D_CPU)
Ivana Varekova 48dfff6
 #define DISPLAY_DISK(m)		(((m) & I_D_DISK) == I_D_DISK)
Ivana Varekova 48dfff6
@@ -46,6 +47,7 @@
Ivana Varekova 48dfff6
 #define HAS_NFS(m)		(((m) & I_F_HAS_NFS) == I_F_HAS_NFS)
Ivana Varekova 48dfff6
 #define DISPLAY_DEVMAP_NAME(m)	(((m) & I_D_DEVMAP_NAME) == I_D_DEVMAP_NAME)
Ivana Varekova 48dfff6
 #define DISPLAY_ISO(m)		(((m) & I_D_ISO) == I_D_ISO)
Ivana Varekova 48dfff6
+#define DISPLAY_HUMAN_READABLE(m)      (((m) & I_D_HUMAN_READABLE) == I_D_HUMAN_READABLE)
Ivana Varekova 48dfff6
 
Ivana Varekova 48dfff6
 #define DT_DEVICE	0
Ivana Varekova 48dfff6
 #define DT_PARTITION	1
Ivana Varekova 48dfff6
@@ -120,6 +122,9 @@ struct io_nfs_stats {
Ivana Varekova 48dfff6
    unsigned long long wr_direct_bytes		__attribute__ ((packed));
Ivana Varekova 48dfff6
    unsigned long long rd_server_bytes		__attribute__ ((packed));
Ivana Varekova 48dfff6
    unsigned long long wr_server_bytes		__attribute__ ((packed));
Ivana Varekova 48dfff6
+   unsigned long rpc_sends                 	__attribute__ ((packed)); 
Ivana Varekova 48dfff6
+   unsigned long rpc_recvs                 	__attribute__ ((packed)); 
Ivana Varekova 48dfff6
+
Ivana Varekova 48dfff6
 };
Ivana Varekova 48dfff6
 
Ivana Varekova 48dfff6
 #define IO_NFS_STATS_SIZE	(sizeof(struct io_nfs_stats))