[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