diff mbox series

[v2,1/2] odp-generator: Use clock related functions less when printing

Message ID 1504184408-15360-2-git-send-email-odpbot@yandex.ru
State Superseded
Headers show
Series [v2,1/2] odp-generator: Use clock related functions less when printing | expand

Commit Message

Github ODP bot Aug. 31, 2017, 1 p.m. UTC
From: Ilias Apalodimas <ilias.apalodimas@linaro.org>


Using odp_time_local() on each iteration consumes too much cpu for no reason
Netmap pktio reported ~550kpps prior to this and ~1.2Mpps after the patch, when
odp_generator was used as a receiver.
Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>

---
/** Email created from pull request 157 (apalos:gen_cpu_fix)
 ** https://github.com/Linaro/odp/pull/157
 ** Patch: https://github.com/Linaro/odp/pull/157.patch
 ** Base sha: 7508c5ac906bb7cb1d339b4c5e924f3a18e504ca
 ** Merge commit sha: 97c6454f7e6815bb0ef487892e3cfad99ca08c46
 **/
 example/generator/odp_generator.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)
diff mbox series

Patch

diff --git a/example/generator/odp_generator.c b/example/generator/odp_generator.c
index f3ec43be..fad83db5 100644
--- a/example/generator/odp_generator.c
+++ b/example/generator/odp_generator.c
@@ -765,11 +765,12 @@  static int gen_recv_thread(void *arg)
  */
 static void print_global_stats(int num_workers)
 {
-	odp_time_t cur, wait, next;
+	odp_time_t cur, wait, next, left;
 	uint64_t pkts_snd = 0, pkts_snd_prev = 0;
 	uint64_t pps_snd = 0, maximum_pps_snd = 0;
 	uint64_t pkts_rcv = 0, pkts_rcv_prev = 0;
 	uint64_t pps_rcv = 0, maximum_pps_rcv = 0;
+	uint64_t stall = 0;
 	int verbose_interval = 20;
 	odp_thrmask_t thrd_mask;
 
@@ -786,8 +787,14 @@  static void print_global_stats(int num_workers)
 		}
 
 		cur = odp_time_local();
-		if (odp_time_cmp(next, cur) > 0)
+		if (odp_time_cmp(next, cur) > 0) {
+			left = odp_time_diff(next, cur);
+			stall = odp_time_to_ns(left);
+			stall = (stall / 1000000000) + 1;
+			stall &= 0xFFFFFFFF;
+			sleep((unsigned int) stall);
 			continue;
+		}
 
 		next = odp_time_sum(cur, wait);
 		switch (args->appl.mode) {