Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 27 Dec 2012 09:15:22 +0000 (UTC)
From:      Luigi Rizzo <luigi@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r244731 - head/tools/tools/netrate/netsend
Message-ID:  <201212270915.qBR9FMDa048640@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: luigi
Date: Thu Dec 27 09:15:21 2012
New Revision: 244731
URL: http://svnweb.freebsd.org/changeset/base/244731

Log:
  use nanosecond resolution, make sure gettimeofday
  is called at most every 100 packets.

Modified:
  head/tools/tools/netrate/netsend/netsend.c

Modified: head/tools/tools/netrate/netsend/netsend.c
==============================================================================
--- head/tools/tools/netrate/netsend/netsend.c	Thu Dec 27 08:10:58 2012	(r244730)
+++ head/tools/tools/netrate/netsend/netsend.c	Thu Dec 27 09:15:21 2012	(r244731)
@@ -144,7 +144,7 @@ timing_loop(struct _a *a)
 	long finishtime;
 	long send_errors, send_calls;
 	/* do not call gettimeofday more than every 20us */
-	long minres_ns = 20000;
+	long minres_ns = 200000;
 	int ic, gettimeofday_cycles;
 	int cur_port;
 	uint64_t n, ns;
@@ -154,17 +154,22 @@ timing_loop(struct _a *a)
 		return (-1);
 	}
 
+	ns = a->interval.tv_nsec;
 	if (timespec_ge(&tmptime, &a->interval))
 		fprintf(stderr,
 		    "warning: interval (%jd.%09ld) less than resolution (%jd.%09ld)\n",
 		    (intmax_t)a->interval.tv_sec, a->interval.tv_nsec,
 		    (intmax_t)tmptime.tv_sec, tmptime.tv_nsec);
-	if (a->interval.tv_nsec < minres_ns) {
-		gettimeofday_cycles = minres_ns/(tmptime.tv_nsec + 1);
-		fprintf(stderr,
-		    "calling time every %d cycles\n", gettimeofday_cycles);
-	} else
-		gettimeofday_cycles = 0;
+		/* interval too short, limit the number of gettimeofday()
+		 * calls, but also make sure there is at least one every
+		 * some 100 packets.
+		 */
+	if ((long)ns < minres_ns/100)
+		gettimeofday_cycles = 100;
+	else
+		gettimeofday_cycles = minres_ns/ns;
+	fprintf(stderr,
+	    "calling time every %d cycles\n", gettimeofday_cycles);
 
 	if (clock_gettime(CLOCK_REALTIME, &starttime) == -1) {
 		perror("clock_gettime");



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201212270915.qBR9FMDa048640>