- .function = stat_segment_process,
- .type = VLIB_NODE_TYPE_PROCESS,
- .name = "stat-segment-process",
-};
-/* *INDENT-ON* */
+ vlib_main_t *vm = vlib_mains[0];
+ f64 vector_rate;
+ u64 input_packets, last_input_packets;
+ f64 dt, now;
+ vlib_main_t *this_vlib_main;
+ int i, start;
+
+ /*
+ * Compute the average vector rate across all workers
+ */
+ vector_rate = 0.0;
+
+ start = vec_len (vlib_mains) > 1 ? 1 : 0;
+
+ for (i = start; i < vec_len (vlib_mains); i++)
+ {
+ this_vlib_main = vlib_mains[i];
+ vector_rate += vlib_last_vector_length_per_node (this_vlib_main);
+ }
+ vector_rate /= (f64) (i - start);
+
+ *sm->vector_rate_ptr = vector_rate / ((f64) (vec_len (vlib_mains) - start));
+
+ /*
+ * Compute the aggregate input rate
+ */
+ now = vlib_time_now (vm);
+ dt = now - sm->last_runtime_ptr[0];
+ input_packets = vnet_get_aggregate_rx_packets ();
+ *sm->input_rate_ptr = (f64) (input_packets - sm->last_input_packets) / dt;
+ sm->last_runtime_ptr[0] = now;
+ sm->last_input_packets = input_packets;
+ sm->last_runtime_stats_clear_ptr[0] =
+ vm->node_main.time_last_runtime_stats_clear;
+
+ update_serialized_nodes (sm);
+}