[netperf-dev] netperf4 commit notice r178 - trunk/src

burger at netperf.org burger at netperf.org
Mon May 22 18:36:29 PDT 2006


Author: burger
Date: 2006-05-22 18:36:27 -0700 (Mon, 22 May 2006)
New Revision: 178

Added:
   trunk/src/default_udp_commands.xml
   trunk/src/default_udp_config.xml
Modified:
   trunk/src/netperf.c
   trunk/src/netserver.c
   trunk/src/nettest_bsd.c
   trunk/src/nettest_bsd.h
Log:
UDP STREAM AND RR tests now work.
Added default command and configuration files for udp tests.
Fixed timing problem in netserver.c check_test_state where a quick transition
from TEST_INIT to TEST_IDLE would cause a the dependency data not to be passed
to a dependent test in resolve_dependency.

Stephen Burger




Added: trunk/src/default_udp_commands.xml
===================================================================
--- trunk/src/default_udp_commands.xml	2006-05-17 18:30:57 UTC (rev 177)
+++ trunk/src/default_udp_commands.xml	2006-05-23 01:36:27 UTC (rev 178)
@@ -0,0 +1,93 @@
+<?xml version="1.0" standalone="no" ?>
+<!DOCTYPE commands SYSTEM "http://www.netperf.org/netperf_docs.dtd/1.0" >
+<commands xmlns="http://www.netperf.org/ns/netperf">
+
+<!-- 20 second UDP_STREAM test
+  <create_test_set set_name="s0" tests_in_set="t0,t1,t2" />
+  <create_test_set set_name="s1" tests_in_set="t0,t1" />
+  <wait tid="s0" />
+  <load tid="s0" />
+  <wait tid="s0" />
+  <measure tid="s0" />
+  <wait tid="s0" seconds="20" />
+  <load tid="s0" />
+  <wait tid="s0" />
+  <get_stats tid="t0" />
+  <get_stats tid="t1" />
+  <wait tid="s0" />
+  <clear_stats tid="t0" />
+  <clear_stats tid="t1" />
+  <clear_stats tid="t2" />
+  <idle tid="s0" />
+  <wait tid="s0" />
+  <report_stats test_set="s1" 
+    library="nettest_bsd.la"
+    function="report_bsd_test_results" />
+ -->
+
+<!-- 20 second UDP_MAERTS test
+  <create_test_set set_name="s6" tests_in_set="t0,t1,t2" />
+  <create_test_set set_name="s7" tests_in_set="t0,t2" />
+  <wait tid="s6" />
+  <load tid="s6" />
+  <wait tid="s6" />
+  <measure tid="s6" />
+  <wait tid="s6" seconds="20" />
+  <load tid="s6" />
+  <wait tid="s6" />
+  <get_stats tid="s7" />
+  <wait tid="s6" />
+  <clear_stats tid="s6" />
+  <idle tid="s6" />
+  <wait tid="s6" />
+  <report_stats test_set="s7"
+    library="nettest_bsd.la"
+    function="report_bsd_test_results" />
+ -->
+
+
+<!-- 20 second UDP_RR test
+  <create_test_set set_name="s2" tests_in_set="t0,t3,t4" />
+  <create_test_set set_name="s3" tests_in_set="t0,t4" />
+  <wait tid="s2" />
+  <load tid="s2" />
+  <wait tid="s2" />
+  <measure tid="s2" />
+  <wait tid="s2" seconds="20" />
+  <load tid="s2" />
+  <wait tid="s2" />
+  <get_stats tid="s2" />
+  <wait tid="s2" />
+  <clear_stats tid="s2" />
+  <idle tid="s2" />
+  <wait tid="s2" />
+  <report_stats test_set="s3" 
+     library="nettest_bsd.la"
+     function="report_bsd_test_results" />
+ -->
+
+<!-- 20 second UDP_RR test with confidence
+ --> 
+  <create_test_set set_name="s4" tests_in_set="t0,t3,t4" />
+  <create_test_set set_name="s5" tests_in_set="t0,t3" />
+  <report_stats test_set="s5" 
+    max_count="10"
+    min_count="3"
+    library="nettest_bsd.la"
+    function="report_bsd_test_results" >
+    <wait tid="s4" />
+    <load tid="s4" />
+    <wait tid="s4" />
+    <measure tid="s4" />
+    <wait tid="s4" seconds="20" />
+    <load tid="s4" />
+    <wait tid="s4" />
+    <get_stats tid="s5" />
+    <wait tid="s4" />
+    <clear_stats tid="s4" />
+    <wait tid="s4" />
+    <idle tid="s4" />
+    <wait tid="s4" />
+  </report_stats>
+
+</commands>

Added: trunk/src/default_udp_config.xml
===================================================================
--- trunk/src/default_udp_config.xml	2006-05-17 18:30:57 UTC (rev 177)
+++ trunk/src/default_udp_config.xml	2006-05-23 01:36:27 UTC (rev 178)
@@ -0,0 +1,38 @@
+<?xml version="1.0" standalone="no" ?>
+<!DOCTYPE netperf SYSTEM "http://www.netperf.org/netperf_docs.dtd/1.0" >        
+<netperf xmlns="http://www.netperf.org/ns/netperf">
+<!-- This is just another boring comment -->
+<netserver nid="n1" >
+  <test tid="t0"
+    test_name = "sys_stats"
+    library   = "netsysstats.la" >
+  </test>
+  <test tid="t1"
+    test_name = "send_udp_stream"
+    library   = "nettest_bsd.la" >
+    <dependson testid="t2" netserverid="n1" />
+    <socket_args
+      send_buffer_size = "128"
+      recv_buffer_size = "128"
+      send_size        = "32"  />
+  </test>
+  <test tid="t2"
+    test_name = "recv_udp_stream"
+    library = "nettest_bsd.la" >
+    <socket_args
+      send_buffer_size = "128"
+      recv_buffer_size = "128" />
+  </test>
+  <test tid="t3"
+    test_name = "send_udp_rr"
+    library   = "nettest_bsd.la" >
+    <dependson testid="t4" netserverid="n1" />
+    <socket_args />
+  </test>
+  <test tid="t4"
+    test_name = "recv_udp_rr"
+    library = "nettest_bsd.la" >
+    <socket_args />
+  </test>
+</netserver>
+</netperf>

Modified: trunk/src/netperf.c
===================================================================
--- trunk/src/netperf.c	2006-05-17 18:30:57 UTC (rev 177)
+++ trunk/src/netperf.c	2006-05-23 01:36:27 UTC (rev 178)
@@ -1071,6 +1071,13 @@
     test = test->next;
   }
   NETPERF_MUTEX_UNLOCK(test_hash[hash_value].hash_lock);
+  if (debug) {
+    fprintf(where,
+            "%s: exiting status is %d\n",
+            __func__,
+            rc);
+    fflush(where);
+  }
   return(rc);
 }
 

Modified: trunk/src/netserver.c
===================================================================
--- trunk/src/netserver.c	2006-05-17 18:30:57 UTC (rev 177)
+++ trunk/src/netserver.c	2006-05-23 01:36:27 UTC (rev 178)
@@ -572,15 +572,20 @@
         }
         switch (new) {
         case TEST_INIT:
-          /* what kind of error checking do we want to add ? */
-          msg = xmlNewNode(NULL,(xmlChar *)"initialized");
-          xmlSetProp(msg,(xmlChar *)"tid",test->id);
-          new_node = xmlCopyNode(test->dependent_data,1);
-          xmlAddChild(msg,new_node);
-          break;
         case TEST_IDLE:
-          msg = xmlNewNode(NULL,(xmlChar *)"idled");
-          xmlSetProp(msg,(xmlChar *)"tid",test->id);
+          /* remore race condition of to quickly moving through TEST_INIT */
+          if (orig == TEST_PREINIT) {
+            /* what kind of error checking do we want to add ? */
+            msg = xmlNewNode(NULL,(xmlChar *)"initialized");
+            xmlSetProp(msg,(xmlChar *)"tid",test->id);
+            new_node = xmlCopyNode(test->dependent_data,1);
+            xmlAddChild(msg,new_node);
+            new = TEST_INIT;
+          }
+          else {
+            msg = xmlNewNode(NULL,(xmlChar *)"idled");
+            xmlSetProp(msg,(xmlChar *)"tid",test->id);
+          }
           break;
         case TEST_LOADED:
           msg = xmlNewNode(NULL,(xmlChar *)"loaded");

Modified: trunk/src/nettest_bsd.c
===================================================================
--- trunk/src/nettest_bsd.c	2006-05-17 18:30:57 UTC (rev 177)
+++ trunk/src/nettest_bsd.c	2006-05-23 01:36:27 UTC (rev 178)
@@ -155,6 +155,7 @@
       if (my_data->retry_array[retry] != NULL) { \
         /* a retransmission is needed a response was not received */ \
         buffer_ptr  = my_data->retry_array[retry]; \
+        my_data->stats.named.retransmits++;
       } \
       buffer_ptr[0] = retry; \
     }
@@ -2544,14 +2545,13 @@
                             (char *)__func__,
                             BSDE_DATA_RECV_ERROR,
                             "data_recv_error");
-      } else {
-        my_data->stats.named.bytes_received += len;
-        my_data->stats.named.recv_calls++;
-        /* code to timestamp enabled by WANT_HISTOGRAM */
-        HIST_TIMESTAMP(&time_two);
-        HIST_ADD(my_data->time_hist,&time_one,&time_two);
       }
     }
+    my_data->stats.named.bytes_received += len;
+    my_data->stats.named.recv_calls++;
+    /* code to timestamp enabled by WANT_HISTOGRAM */
+    HIST_TIMESTAMP(&time_two);
+    HIST_ADD(my_data->time_hist,&time_one,&time_two);
     my_data->recv_ring = my_data->recv_ring->next;
   }
   new_state = CHECK_REQ_STATE;
@@ -2600,10 +2600,9 @@
                               (char *)__func__,
                               BSDE_DATA_RECV_ERROR,
                               "data_recv_error");
-        } else {
-          my_data->recv_ring = my_data->recv_ring->next;
         }
       }
+      my_data->recv_ring = my_data->recv_ring->next;
     }
   }
   /* check for state transition */
@@ -2900,7 +2899,7 @@
 recv_udp_rr_preinit(test_t *test)
 {
   int               rc;
-  int               s_listen;
+  int               s_data;
   bsd_data_t       *my_data;
   struct sockaddr   myaddr;
   netperf_socklen_t mylen;
@@ -2918,17 +2917,17 @@
                                             my_data->send_align,
                                             my_data->send_offset,
                                             my_data->fill_source);
-  s_listen = create_data_socket(test);
-  my_data->s_listen = s_listen;
+  s_data = create_data_socket(test);
+  my_data->s_data = s_data;
   if (test->debug) {
     dump_addrinfo(test->where, my_data->locaddr,
                   (xmlChar *)NULL, (xmlChar *)NULL, -1);
     fprintf(test->where, 
             "%s:create_data_socket returned %d\n", 
-            __func__, s_listen);
+            __func__, s_data);
     fflush(test->where);
   }
-  rc = bind(s_listen, my_data->locaddr->ai_addr, my_data->locaddr->ai_addrlen);
+  rc = bind(s_data, my_data->locaddr->ai_addr, my_data->locaddr->ai_addrlen);
   if (test->debug) {
     fprintf(test->where, 
             "%s:bind returned %d  errno=%d\n", 
@@ -2940,7 +2939,7 @@
                         (char *)__func__,
                         BSDE_BIND_FAILED,
                         "data socket bind failed");
-  } else if (getsockname(s_listen,&myaddr,&mylen) == -1) {
+  } else if (getsockname(s_data,&myaddr,&mylen) == -1) {
     report_test_failure(test,
                         (char *)__func__,
                         BSDE_GETSOCKNAME_FAILED,
@@ -3008,6 +3007,7 @@
     /* code to timestamp enabled by WANT_HISTOGRAM */
     HIST_TIMESTAMP(&time_one);
     /* recv the request for the test */
+    peerlen = sizeof(struct sockaddr);
     if ((len=recvfrom(my_data->s_data,
                       my_data->recv_ring->buffer_ptr,
                       my_data->req_size,
@@ -3022,9 +3022,9 @@
                             "data_recv_error");
         break;
       }
-      my_data->stats.named.trans_received++;
-      my_data->stats.named.bytes_received += len;
     }
+    my_data->stats.named.trans_received++;
+    my_data->stats.named.bytes_received += len;
     if ((len=sendto(my_data->s_data,
                     my_data->send_ring->buffer_ptr,
                     my_data->rsp_size,
@@ -3039,8 +3039,8 @@
                             "data_send_error");
         break;
       }
-      my_data->stats.named.bytes_sent += len;
     }
+    my_data->stats.named.bytes_sent += len;
     /* code to timestamp enabled by WANT_HISTOGRAM */
     HIST_TIMESTAMP(&time_two);
     HIST_ADD(my_data->time_hist,&time_one,&time_two);
@@ -3082,6 +3082,7 @@
     FD_SET(my_data->s_data, &readfds);
     ready = select(my_data->s_data+1, &readfds, NULL, NULL, &timeout);
     if (ready > 0) {
+      peerlen = sizeof(struct sockaddr);
       if ((len=recvfrom(my_data->s_data,
                         my_data->recv_ring->buffer_ptr,
                         my_data->req_size,
@@ -3110,8 +3111,8 @@
                               (char *)__func__,
                               BSDE_DATA_SEND_ERROR,
                               "data_send_error");
+          break;
         }
-        break;
       }
       my_data->recv_ring = my_data->recv_ring->next;
       my_data->send_ring = my_data->send_ring->next;
@@ -3165,8 +3166,8 @@
     fflush(test->where);
   }
   rc = bind(my_data->s_data,
-            my_data->remaddr->ai_addr,
-            my_data->remaddr->ai_addrlen);
+            my_data->locaddr->ai_addr,
+            my_data->locaddr->ai_addrlen);
   if (test->debug) {
     fprintf(test->where, 
             "%s:bind returned %d  errno=%d\n", 
@@ -3177,7 +3178,7 @@
     report_test_failure(test,
                         (char *)__func__,
                         BSDE_CONNECT_FAILED,
-                        "data socket connect failed");
+                        "data socket bind failed");
   }
   /* should we add a connect here ?? */
   return(TEST_IDLE);
@@ -3229,6 +3230,7 @@
   char             *buffer_ptr;
 
 
+  NETPERF_DEBUG_ENTRY(test->debug, test->where);
   my_data   = GET_TEST_DATA(test);
 
   while (NO_STATE_CHANGE(test)) {
@@ -3288,6 +3290,7 @@
     gettimeofday(&(my_data->curr_time), NULL);
     update_elapsed_time(my_data);
   }
+  NETPERF_DEBUG_EXIT(test->debug, test->where);
   return(new_state);
 }
 
@@ -3300,6 +3303,7 @@
   char             *buffer_ptr;
 
 
+  NETPERF_DEBUG_ENTRY(test->debug, test->where);
   my_data   = GET_TEST_DATA(test);
 
   while (NO_STATE_CHANGE(test)) {
@@ -3308,10 +3312,12 @@
     /* send data for the test */
     buffer_ptr  = my_data->send_ring->buffer_ptr;
     UDP_CHECK_FOR_RETRANS;
-    if((len=send(my_data->s_data,
+    if((len=sendto(my_data->s_data,
                  buffer_ptr,
                  my_data->req_size,
-                 0)) != my_data->req_size) {
+                 0,
+                 my_data->remaddr->ai_addr,
+                 my_data->remaddr->ai_addrlen)) != my_data->req_size) {
       /* this macro hides windows differences */
       if (CHECK_FOR_SEND_ERROR(len)) {
         report_test_failure(test,
@@ -3350,6 +3356,7 @@
   if (new_state == TEST_IDLE) {
     send_udp_rr_idle_link(test);
   }
+  NETPERF_DEBUG_EXIT(test->debug, test->where);
   return(new_state);
 }
 
@@ -3656,10 +3663,10 @@
     fflush(test_set->where);
   }
   if (rd->sd_denominator == 0.0) {
-    if (xmit_rate > 0.0 || recv_rate > 0.0) {
+    if (xmit_trans_rate > 0.0 || recv_trans_rate > 0.0) {
+      rd->sd_denominator = 1.0;
+    } else {
       rd->sd_denominator = 1000000.0/(8.0*1024.0);
-    } else {
-      rd->sd_denominator = 1.0;
     }
   }
   if (test_set->debug) {

Modified: trunk/src/nettest_bsd.h
===================================================================
--- trunk/src/nettest_bsd.h	2006-05-17 18:30:57 UTC (rev 177)
+++ trunk/src/nettest_bsd.h	2006-05-23 01:36:27 UTC (rev 178)
@@ -51,6 +51,7 @@
   TRANS_RECEIVED,
   CONNECT_CALLS,
   ACCEPT_CALLS,
+  RETRANSMITS,
   BSD_MAX_COUNTERS
 };
 
@@ -119,6 +120,7 @@
       uint64_t  trans_received;
       uint64_t  connect_calls;
       uint64_t  accepts;
+      uint64_t  retransmits;
     } named;
   } stats;
   struct timeval  elapsed_time;



More information about the netperf-dev mailing list