Don't use foreach_vlib_main macro w/out barrier sync 74/12974/2
authorDave Barach <dave@barachs.net>
Sat, 9 Jun 2018 18:49:00 +0000 (14:49 -0400)
committerDamjan Marion <dmarion@me.com>
Sun, 10 Jun 2018 09:21:20 +0000 (09:21 +0000)
It should be OK to scrape dispatch stats without forcing a barrier
sync. Scrape the stats manually. We'll see what happens.

Change-Id: Ia20b51ea12ed81cce76e1801401bad0edd0645bb
Signed-off-by: Dave Barach <dave@barachs.net>
src/vpp/stats/stat_segment.c

index 795e347..f1db684 100644 (file)
@@ -371,6 +371,7 @@ stat_segment_process (vlib_main_t * vm, vlib_node_runtime_t * rt,
   f64 last_runtime, dt, now;
   vlib_main_t *this_vlib_main;
   stats_main_t *sm = &stats_main;
+  int i;
 
   last_runtime = 0.0;
   last_input_packets = 0;
@@ -388,10 +389,13 @@ stat_segment_process (vlib_main_t * vm, vlib_node_runtime_t * rt,
       vector_rate = 0.0;
 
       /* *INDENT-OFF* */
-      foreach_vlib_main
-      ({
-        vector_rate += vlib_last_vector_length_per_node (vm);
-      });
+      for (i = 0; i < vec_len (vlib_mains); i++)
+        {
+          this_vlib_main = vlib_mains[i];
+          vector_rate += vlib_last_vector_length_per_node (vm);
+        }
+      vector_rate /= (f64) i;
+
       /* *INDENT-ON* */
 
       *sm->vector_rate_ptr = vector_rate / ((f64) vec_len (vlib_mains));