[netperf-dev] netperf2 commit notice r433 - trunk/src

raj at netperf.org raj at netperf.org
Thu Jul 14 12:08:48 PDT 2011


Author: raj
Date: 2011-07-14 12:08:48 -0700 (Thu, 14 Jul 2011)
New Revision: 433

Modified:
   trunk/src/netlib.c
   trunk/src/netserver.c
   trunk/src/nettest_omni.c
Log:
some platforms cannot assign to stdin stdout and stderr directly and light up the stats keeping when someone asks for any of their output selectors even if they do not use a global j option

Modified: trunk/src/netlib.c
===================================================================
--- trunk/src/netlib.c	2011-07-13 22:16:01 UTC (rev 432)
+++ trunk/src/netlib.c	2011-07-14 19:08:48 UTC (rev 433)
@@ -166,6 +166,7 @@
 #include "netlib.h"
 #include "netsh.h"
 #include "netcpu.h"
+#include "netperf_version.h"
 
 /****************************************************************/
 /*                                                              */
@@ -246,6 +247,8 @@
 int local_data_family=AF_UNSPEC;
 int remote_data_family=AF_UNSPEC;
 
+char *netperf_version;
+
 /* in the past, I was overlaying a structure on an array of ints. now
    I am going to have a "real" structure, and point an array of ints
    at it. the real structure will be forced to the same alignment as
@@ -1312,6 +1315,8 @@
   lib_remote_peak_cpu_id = -1;
   lib_remote_peak_cpu_util = -1.0;
 
+  netperf_version = strdup(NETPERF_VERSION);
+
   /* retrieve the local system information */
   get_local_system_info();
 

Modified: trunk/src/netserver.c
===================================================================
--- trunk/src/netserver.c	2011-07-13 22:16:01 UTC (rev 432)
+++ trunk/src/netserver.c	2011-07-14 19:08:48 UTC (rev 433)
@@ -230,6 +230,7 @@
 #define NETPERF_NULL "nul"
 #endif
 
+  FILE *rd_null_fp;
   char FileName[PATH_MAX];   /* for opening the debug log file */
   int  fp;
 
@@ -244,22 +245,16 @@
     perror("netserver: debug file");
     exit(1);
   }
-#ifndef WIN32
+
+#if !defined(WIN32)
+
   chmod(FileName,0644);
-#endif
 
-  /* we want to redirect the io streams accordingly and we certainly
-     rely on file descriptors ending-up in the correct place. this
-     may look a little odd, but I believe it is the amalgam of what
-     was being done under both *nix and Windows and I am looking to
-     minimize the #ifdefs. raj 2011-07-11 */
-
-  fp = fileno(stdin);
-  fclose(stdin);
-  close(fp);
-  if ((stdin = fopen(NETPERF_NULL,"r")) == NULL) {
+  /* redirect stdin to "/dev/null" */
+  rd_null_fp = fopen(NETPERF_NULL,"r");
+  if (NULL == rd_null_fp) {
     fprintf(where,
-	    "%s: reopening of stdin pointed at %s failed: %s (errno %d)\n",
+	    "%s: opening of %s failed: %s (errno %d)\n",
 	    __FUNCTION__,
 	    NETPERF_NULL,
 	    strerror(errno),
@@ -268,34 +263,88 @@
     exit(1);
   }
 
-  fp = fileno(stdout);
-  fclose(stdout);
-  close(fp);
-  if ((stdin = fopen(FileName, "w")) == NULL) {
+  if (close(STDIN_FILENO) == -1) {
     fprintf(where,
-	    "%s: redirecting stdout to %s failed: %s (errno %d)\n",
+	    "%s: close of STDIN_FILENO failed: %s (errno %d)\n",
 	    __FUNCTION__,
-	    FileName,
 	    strerror(errno),
 	    errno);
     fflush(where);
     exit(1);
   }
 
+  if (dup(fileno(rd_null_fp)) == -1) {
+    fprintf(where,
+	    "%s: dup of rd_null_fp to stdin failed: %s (errno %d)\n",
+	    __FUNCTION__,
+	    strerror(errno),
+	    errno);
+    fflush(where);
+    exit(1);
+  }
 
-  fp = fileno(stderr);
-  fclose(stderr);
-  close(fp);
-  if ((stdin = fopen(FileName, "w")) == NULL) {
+  /* redirect stdout to "where" */
+  if (close(STDOUT_FILENO) == -1) {
     fprintf(where,
-	    "%s: redirecting stderr to %s failed: %s (errno %d)\n",
+	    "%s: close of STDOUT_FILENO failed: %s (errno %d)\n",
 	    __FUNCTION__,
-	    FileName,
 	    strerror(errno),
 	    errno);
     fflush(where);
     exit(1);
   }
+
+  if (dup(fileno(where)) == -1) {
+    fprintf(where,
+	    "%s: dup of where to stdout failed: %s (errno %d)\n",
+	    __FUNCTION__,
+	    strerror(errno),
+	    errno);
+    fflush(where);
+    exit(1);
+  }
+
+  /* redirect stderr to "where" */
+  if (close(STDERR_FILENO) == -1) {
+    fprintf(where,
+	    "%s: close of STDERR_FILENO failed: %s (errno %d)\n",
+	    __FUNCTION__,
+	    strerror(errno),
+	    errno);
+    fflush(where);
+    exit(1);
+  }
+
+  if (dup(fileno(where)) == -1) {
+    fprintf(where,
+	    "%s: dup of where to stderr failed: %s (errno %d)\n",
+	    __FUNCTION__,
+	    strerror(errno),
+	    errno);
+    fflush(where);
+    exit(1);
+  }
+
+#else
+
+  /* Hopefully, by closing stdout & stderr, the subsequent fopen calls
+     will get mapped to the correct std handles. */
+  fclose(stdout);
+  
+  if ((where = fopen(FileName, "w")) == NULL) {
+    perror("netserver: fopen of debug file as new stdout failed!");
+    exit(1);
+  }
+  
+  fclose(stderr);
+  
+  if ((where = fopen(FileName, "w")) == NULL) {
+    fprintf(stdout, "fopen of debug file as new stderr failed!\n");
+    exit(1);
+  }
+  
+#endif
+
 }
 
 /* so, either we are a child of inetd in which case server_sock should

Modified: trunk/src/nettest_omni.c
===================================================================
--- trunk/src/nettest_omni.c	2011-07-13 22:16:01 UTC (rev 432)
+++ trunk/src/nettest_omni.c	2011-07-14 19:08:48 UTC (rev 433)
@@ -688,6 +688,7 @@
 #define OMNI_WANT_LOC_IFIDS   0X00040000
 #define OMNI_WANT_REM_DRVINFO 0X00000008
 #define OMNI_WANT_LOC_DRVINFO 0X00080000
+#define OMNI_WANT_STATS       0X00100010
 
 unsigned int desired_output_groups = 0;
 
@@ -3637,103 +3638,96 @@
   netperf_output_source[LOCAL_CPU_FREQUENCY].tot_line_len = 
     NETPERF_LINE_TOT(LOCAL_CPU_FREQUENCY);
 
-  netperf_output_source[MIN_LATENCY].output_name = MIN_LATENCY;
-  netperf_output_source[MIN_LATENCY].line[0] = "Minimum";
-  netperf_output_source[MIN_LATENCY].line[1] = "Latency";
-  netperf_output_source[MIN_LATENCY].line[2] = "Microseconds";
-  netperf_output_source[MIN_LATENCY].line[3] = "";
-  netperf_output_source[MIN_LATENCY].format = "%d";
-  netperf_output_source[MIN_LATENCY].display_value =
-    &min_latency;
-  netperf_output_source[MIN_LATENCY].max_line_len = 
-    NETPERF_LINE_MAX(MIN_LATENCY);
-  netperf_output_source[MIN_LATENCY].tot_line_len = 
-    NETPERF_LINE_TOT(MIN_LATENCY);
-  netperf_output_source[MIN_LATENCY].output_default = 0;
+  i = MIN_LATENCY;
+  netperf_output_source[i].output_name = MIN_LATENCY;
+  netperf_output_source[i].line[0] = "Minimum";
+  netperf_output_source[i].line[1] = "Latency";
+  netperf_output_source[i].line[2] = "Microseconds";
+  netperf_output_source[i].line[3] = "";
+  netperf_output_source[i].format = "%d";
+  netperf_output_source[i].display_value = &min_latency;
+  netperf_output_source[i].max_line_len =  NETPERF_LINE_MAX(i);
+  netperf_output_source[i].tot_line_len =  NETPERF_LINE_TOT(i);
+  netperf_output_source[i].output_default = 0;
+  netperf_output_source[i].output_group = OMNI_WANT_STATS;
 
-  netperf_output_source[MAX_LATENCY].output_name = MAX_LATENCY;
-  netperf_output_source[MAX_LATENCY].line[0] = "Maximum";
-  netperf_output_source[MAX_LATENCY].line[1] = "Latency";
-  netperf_output_source[MAX_LATENCY].line[2] = "Microseconds";
-  netperf_output_source[MAX_LATENCY].line[3] = "";
-  netperf_output_source[MAX_LATENCY].format = "%d";
-  netperf_output_source[MAX_LATENCY].display_value =
-    &max_latency;
-  netperf_output_source[MAX_LATENCY].max_line_len = 
-    NETPERF_LINE_MAX(MAX_LATENCY);
-  netperf_output_source[MAX_LATENCY].tot_line_len = 
-    NETPERF_LINE_TOT(MAX_LATENCY);
-  netperf_output_source[MAX_LATENCY].output_default = 0;
+  i = MAX_LATENCY;
+  netperf_output_source[i].output_name = MAX_LATENCY;
+  netperf_output_source[i].line[0] = "Maximum";
+  netperf_output_source[i].line[1] = "Latency";
+  netperf_output_source[i].line[2] = "Microseconds";
+  netperf_output_source[i].line[3] = "";
+  netperf_output_source[i].format = "%d";
+  netperf_output_source[i].display_value = &max_latency;
+  netperf_output_source[i].max_line_len = NETPERF_LINE_MAX(i);
+  netperf_output_source[i].tot_line_len = NETPERF_LINE_TOT(i);
+  netperf_output_source[i].output_default = 0;
+  netperf_output_source[i].output_group = OMNI_WANT_STATS;
 
-  netperf_output_source[P50_LATENCY].output_name = P50_LATENCY;
-  netperf_output_source[P50_LATENCY].line[0] = "50th";
-  netperf_output_source[P50_LATENCY].line[1] = "Percentile";
-  netperf_output_source[P50_LATENCY].line[2] = "Latency";
-  netperf_output_source[P50_LATENCY].line[3] = "Microseconds";
-  netperf_output_source[P50_LATENCY].format = "%d";
-  netperf_output_source[P50_LATENCY].display_value =
-    &p50_latency;
-  netperf_output_source[P50_LATENCY].max_line_len = 
-    NETPERF_LINE_MAX(P50_LATENCY);
-  netperf_output_source[P50_LATENCY].tot_line_len = 
-    NETPERF_LINE_TOT(P50_LATENCY);
-  netperf_output_source[P50_LATENCY].output_default = 0;
+  i = P50_LATENCY;
+  netperf_output_source[i].output_name = P50_LATENCY;
+  netperf_output_source[i].line[0] = "50th";
+  netperf_output_source[i].line[1] = "Percentile";
+  netperf_output_source[i].line[2] = "Latency";
+  netperf_output_source[i].line[3] = "Microseconds";
+  netperf_output_source[i].format = "%d";
+  netperf_output_source[i].display_value = &p50_latency;
+  netperf_output_source[i].max_line_len = NETPERF_LINE_MAX(i);
+  netperf_output_source[i].tot_line_len = NETPERF_LINE_TOT(i);
+  netperf_output_source[i].output_default = 0;
+  netperf_output_source[i].output_group = OMNI_WANT_STATS;
 
-  netperf_output_source[P90_LATENCY].output_name = P90_LATENCY;
-  netperf_output_source[P90_LATENCY].line[0] = "90th";
-  netperf_output_source[P90_LATENCY].line[1] = "Percentile";
-  netperf_output_source[P90_LATENCY].line[2] = "Latency";
-  netperf_output_source[P90_LATENCY].line[3] = "Microseconds";
-  netperf_output_source[P90_LATENCY].format = "%d";
-  netperf_output_source[P90_LATENCY].display_value =
-    &p90_latency;
-  netperf_output_source[P90_LATENCY].max_line_len = 
-    NETPERF_LINE_MAX(P90_LATENCY);
-  netperf_output_source[P90_LATENCY].tot_line_len = 
-    NETPERF_LINE_TOT(P90_LATENCY);
-  netperf_output_source[P90_LATENCY].output_default = 0;
+  i = P90_LATENCY;
+  netperf_output_source[i].output_name = P90_LATENCY;
+  netperf_output_source[i].line[0] = "90th";
+  netperf_output_source[i].line[1] = "Percentile";
+  netperf_output_source[i].line[2] = "Latency";
+  netperf_output_source[i].line[3] = "Microseconds";
+  netperf_output_source[i].format = "%d";
+  netperf_output_source[i].display_value = &p90_latency;
+  netperf_output_source[i].max_line_len = NETPERF_LINE_MAX(i);
+  netperf_output_source[i].tot_line_len = NETPERF_LINE_TOT(i);
+  netperf_output_source[i].output_default = 0;
+  netperf_output_source[i].output_group = OMNI_WANT_STATS;
 
-  netperf_output_source[P99_LATENCY].output_name = P99_LATENCY;
-  netperf_output_source[P99_LATENCY].line[0] = "99th";
-  netperf_output_source[P99_LATENCY].line[1] = "Percentile";
-  netperf_output_source[P99_LATENCY].line[2] = "Latency";
-  netperf_output_source[P99_LATENCY].line[3] = "Microseconds";
-  netperf_output_source[P99_LATENCY].format = "%d";
-  netperf_output_source[P99_LATENCY].display_value =
-    &p99_latency;
-  netperf_output_source[P99_LATENCY].max_line_len = 
-    NETPERF_LINE_MAX(P99_LATENCY);
-  netperf_output_source[P99_LATENCY].tot_line_len = 
-    NETPERF_LINE_TOT(P99_LATENCY);
-  netperf_output_source[P99_LATENCY].output_default = 0;
+  i = P99_LATENCY;
+  netperf_output_source[i].output_name = P99_LATENCY;
+  netperf_output_source[i].line[0] = "99th";
+  netperf_output_source[i].line[1] = "Percentile";
+  netperf_output_source[i].line[2] = "Latency";
+  netperf_output_source[i].line[3] = "Microseconds";
+  netperf_output_source[i].format = "%d";
+  netperf_output_source[i].display_value = &p99_latency;
+  netperf_output_source[i].max_line_len = NETPERF_LINE_MAX(i);
+  netperf_output_source[i].tot_line_len = NETPERF_LINE_TOT(i);
+  netperf_output_source[i].output_default = 0;
+  netperf_output_source[i].output_group = OMNI_WANT_STATS;
 
-  netperf_output_source[MEAN_LATENCY].output_name = MEAN_LATENCY;
-  netperf_output_source[MEAN_LATENCY].line[0] = "Mean";
-  netperf_output_source[MEAN_LATENCY].line[1] = "Latency";
-  netperf_output_source[MEAN_LATENCY].line[2] = "Microseconds";
-  netperf_output_source[MEAN_LATENCY].line[3] = "";
-  netperf_output_source[MEAN_LATENCY].format = "%.2f";
-  netperf_output_source[MEAN_LATENCY].display_value =
-    &mean_latency;
-  netperf_output_source[MEAN_LATENCY].max_line_len = 
-    NETPERF_LINE_MAX(MEAN_LATENCY);
-  netperf_output_source[MEAN_LATENCY].tot_line_len = 
-    NETPERF_LINE_TOT(MEAN_LATENCY);
-  netperf_output_source[MEAN_LATENCY].output_default = 0;
+  i = MEAN_LATENCY;
+  netperf_output_source[i].output_name = MEAN_LATENCY;
+  netperf_output_source[i].line[0] = "Mean";
+  netperf_output_source[i].line[1] = "Latency";
+  netperf_output_source[i].line[2] = "Microseconds";
+  netperf_output_source[i].line[3] = "";
+  netperf_output_source[i].format = "%.2f";
+  netperf_output_source[i].display_value = &mean_latency;
+  netperf_output_source[i].max_line_len = NETPERF_LINE_MAX(i);
+  netperf_output_source[i].tot_line_len = NETPERF_LINE_TOT(i);
+  netperf_output_source[i].output_default = 0;
+  netperf_output_source[i].output_group = OMNI_WANT_STATS;
 
-  netperf_output_source[STDDEV_LATENCY].output_name = STDDEV_LATENCY;
-  netperf_output_source[STDDEV_LATENCY].line[0] = "Stddev";
-  netperf_output_source[STDDEV_LATENCY].line[1] = "Latency";
-  netperf_output_source[STDDEV_LATENCY].line[2] = "Microseconds";
-  netperf_output_source[STDDEV_LATENCY].line[3] = "";
-  netperf_output_source[STDDEV_LATENCY].format = "%.2f";
-  netperf_output_source[STDDEV_LATENCY].display_value =
-    &stddev_latency;
-  netperf_output_source[STDDEV_LATENCY].max_line_len = 
-    NETPERF_LINE_MAX(STDDEV_LATENCY);
-  netperf_output_source[STDDEV_LATENCY].tot_line_len = 
-    NETPERF_LINE_TOT(STDDEV_LATENCY);
-  netperf_output_source[STDDEV_LATENCY].output_default = 0;
+  i = STDDEV_LATENCY;
+  netperf_output_source[i].output_name = STDDEV_LATENCY;
+  netperf_output_source[i].line[0] = "Stddev";
+  netperf_output_source[i].line[1] = "Latency";
+  netperf_output_source[i].line[2] = "Microseconds";
+  netperf_output_source[i].line[3] = "";
+  netperf_output_source[i].format = "%.2f";
+  netperf_output_source[i].display_value = &stddev_latency;
+  netperf_output_source[i].max_line_len = NETPERF_LINE_MAX(i);
+  netperf_output_source[i].tot_line_len = NETPERF_LINE_TOT(i);
+  netperf_output_source[i].output_default = 0;
+  netperf_output_source[i].output_group = OMNI_WANT_STATS;
 
   netperf_output_source[OUTPUT_END].output_name = OUTPUT_END;
   netperf_output_source[OUTPUT_END].line[0] = "This";
@@ -8340,9 +8334,15 @@
     rem_nodelay = -1;
 
   }
+  /* so, did the user request a few things implicitly via output selection? */
   if (!legacy) 
     print_omni_init();
 
+  if (desired_output_groups & OMNI_WANT_STATS) {
+    keep_statistics = 1;
+    keep_histogram = 1;
+  }
+
 }
 
 #endif /* WANT_OMNI */



More information about the netperf-dev mailing list