Explorar o código

cpghum: Add min rtt and print stats every alarm

Signed-off-by: Christine Caulfield <ccaulfie@redhat.com>
Christine Caulfield %!s(int64=9) %!d(string=hai) anos
pai
achega
16a865e573
Modificáronse 1 ficheiros con 20 adicións e 8 borrados
  1. 20 8
      test/cpghum.c

+ 20 - 8
test/cpghum.c

@@ -39,6 +39,7 @@
 #include <unistd.h>
 #include <unistd.h>
 #include <errno.h>
 #include <errno.h>
 #include <time.h>
 #include <time.h>
+#include <limits.h>
 #include <sys/time.h>
 #include <sys/time.h>
 #include <sys/types.h>
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/socket.h>
@@ -94,6 +95,7 @@ static unsigned int send_retries=0;
 static unsigned int send_fails=0;
 static unsigned int send_fails=0;
 static unsigned long avg_rtt=0;
 static unsigned long avg_rtt=0;
 static unsigned long max_rtt=0;
 static unsigned long max_rtt=0;
+static unsigned long min_rtt=LONG_MAX;
 
 
 struct cpghum_header {
 struct cpghum_header {
 	unsigned int counter;
 	unsigned int counter;
@@ -166,7 +168,7 @@ static void cpg_bm_deliver_fn (
 	}
 	}
 
 
 	// Report RTT
 	// Report RTT
-	if (nodeid == g_our_nodeid && report_rtt) {
+	if (nodeid == g_our_nodeid) {
 		struct timeval tv1;
 		struct timeval tv1;
 		struct timeval rtt;
 		struct timeval rtt;
 		unsigned long rtt_usecs = rtt.tv_usec + rtt.tv_sec*1000000;
 		unsigned long rtt_usecs = rtt.tv_usec + rtt.tv_sec*1000000;
@@ -178,11 +180,16 @@ static void cpg_bm_deliver_fn (
 		if (rtt_usecs > max_rtt) {
 		if (rtt_usecs > max_rtt) {
 			max_rtt = rtt_usecs;
 			max_rtt = rtt_usecs;
 		}
 		}
+		if (rtt_usecs < min_rtt) {
+			min_rtt = rtt_usecs;
+		}
 		avg_rtt = ((avg_rtt * (g_recv_counter-1)) + rtt_usecs) / g_recv_counter;
 		avg_rtt = ((avg_rtt * (g_recv_counter-1)) + rtt_usecs) / g_recv_counter;
 
 
-		fprintf(stderr, "%s: RTT %ld uS (avg: %ld)\n", group_name->value, rtt_usecs, avg_rtt);
-		if (do_syslog) {
-			syslog(LOG_ERR, "%s: RTT %ld uS (avg: %ld)\n", group_name->value, rtt_usecs, avg_rtt);
+		if (report_rtt) {
+			fprintf(stderr, "%s: RTT %ld uS (min/avg/max): %ld/%ld/%ld\n", group_name->value, rtt_usecs, min_rtt, avg_rtt, max_rtt);
+			if (do_syslog) {
+				syslog(LOG_ERR, "%s: RTT %ld uS (min/avg/max): %ld/%ld/%ld\n", group_name->value, rtt_usecs, min_rtt, avg_rtt, max_rtt);
+			}
 		}
 		}
 	}
 	}
 
 
@@ -258,7 +265,8 @@ static void cpg_test (
 
 
 	if (!quiet) {
 	if (!quiet) {
 		printf ("%s: %5d message%s received, ", group_name.value, g_recv_count, g_recv_count==1?"":"s");
 		printf ("%s: %5d message%s received, ", group_name.value, g_recv_count, g_recv_count==1?"":"s");
-		printf ("%5d bytes per write\n", write_size);
+		printf ("%5d bytes per write. ", write_size);
+		printf ("RTT min/avg/max: %ld/%ld/%ld\n", min_rtt, avg_rtt, max_rtt);
 	}
 	}
 
 
 }
 }
@@ -437,7 +445,9 @@ int main (int argc, char *argv[]) {
 		while (!stopped) {
 		while (!stopped) {
 			sleep(1);
 			sleep(1);
 			if (++secs > print_time && !quiet) {
 			if (++secs > print_time && !quiet) {
-				printf ("%s: %5d message%s received. %d bytes\n", group_name.value, g_recv_count, g_recv_count==1?"":"s", g_recv_length);
+				printf ("%s: %5d message%s received. %d bytes. RTT min/avg/max: %ld/%ld/%ld\n",
+					group_name.value, g_recv_count, g_recv_count==1?"":"s", g_recv_length,
+					min_rtt, avg_rtt, max_rtt);
 				secs = 0;
 				secs = 0;
 				g_recv_count = 0;
 				g_recv_count = 0;
 			}
 			}
@@ -467,8 +477,6 @@ int main (int argc, char *argv[]) {
 		printf("   packets sent:    %d\n", packets_sent);
 		printf("   packets sent:    %d\n", packets_sent);
 		printf("   send failures:   %d\n", send_fails);
 		printf("   send failures:   %d\n", send_fails);
 		printf("   send retries:    %d\n", send_retries);
 		printf("   send retries:    %d\n", send_retries);
-		printf("   max RTT:         %ld\n", max_rtt);
-		printf("   avg RTT:         %ld\n", avg_rtt);
 	}
 	}
 	if (have_size) {
 	if (have_size) {
 		printf("   length errors:   %d\n", length_errors);
 		printf("   length errors:   %d\n", length_errors);
@@ -476,6 +484,10 @@ int main (int argc, char *argv[]) {
 	printf("   packets recvd:   %d\n", packets_recvd);
 	printf("   packets recvd:   %d\n", packets_recvd);
 	printf("   sequence errors: %d\n", sequence_errors);
 	printf("   sequence errors: %d\n", sequence_errors);
 	printf("   crc errors:	    %d\n", crc_errors);
 	printf("   crc errors:	    %d\n", crc_errors);
+	if (!listen_only) {
+		printf("   max RTT:         %ld\n", max_rtt);
+		printf("   avg RTT:         %ld\n", avg_rtt);
+	}
 	printf("\n");
 	printf("\n");
 	return (0);
 	return (0);
 }
 }