Less intrusive way to capture numa_node and cpu_id changes 14/17114/2
authorDamjan Marion <damarion@cisco.com>
Mon, 28 Jan 2019 12:41:27 +0000 (13:41 +0100)
committerDamjan Marion <damarion@cisco.com>
Mon, 28 Jan 2019 12:44:37 +0000 (13:44 +0100)
Change-Id: I3a33fb81f31ed473811e9e7a6197b81135913865
Signed-off-by: Damjan Marion <damarion@cisco.com>
src/vlib/main.c
src/vlib/threads.c
src/vlib/unix/input.c
src/vlib/unix/main.c

index cfd2385..a64a991 100644 (file)
@@ -1682,6 +1682,9 @@ vlib_main_or_worker_loop (vlib_main_t * vm, int is_main)
   if (!nm->interrupt_threshold_vector_length)
     nm->interrupt_threshold_vector_length = 5;
 
+  vm->cpu_id = clib_get_current_cpu_id ();
+  vm->numa_node = clib_get_current_numa_node ();
+
   /* Start all processes. */
   if (is_main)
     {
@@ -1696,12 +1699,6 @@ vlib_main_or_worker_loop (vlib_main_t * vm, int is_main)
     {
       vlib_node_runtime_t *n;
 
-      if (PREDICT_FALSE (vm->cpu_id != clib_get_current_cpu_id ()))
-       {
-         vm->cpu_id = clib_get_current_cpu_id ();
-         vm->numa_node = clib_get_current_numa_node ();
-       }
-
       if (PREDICT_FALSE (_vec_len (vm->pending_rpc_requests) > 0))
        {
          if (!is_main)
index 6257bb6..ed1ba61 100644 (file)
@@ -1723,8 +1723,6 @@ vlib_worker_thread_fn (void *arg)
 
   ASSERT (vm->thread_index == vlib_get_thread_index ());
 
-  vm->cpu_id = ~0;
-
   vlib_worker_thread_init (w);
   clib_time_init (&vm->clib_time);
   clib_mem_set_heap (w->thread_mheap);
index 8be0770..6b519e5 100644 (file)
@@ -223,12 +223,13 @@ linux_epoll_input_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
                                      em->epoll_events,
                                      vec_len (em->epoll_events), timeout_ms);
          }
+
       }
     else
       {
        if (timeout_ms)
          usleep (timeout_ms * 1000);
-       return 0;
+       goto done;
       }
   }
 
@@ -238,7 +239,7 @@ linux_epoll_input_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
        vlib_panic_with_error (vm, clib_error_return_unix (0, "epoll_wait"));
 
       /* non fatal error (e.g. EINTR). */
-      return 0;
+      goto done;
     }
 
   em->epoll_waits += 1;
@@ -314,6 +315,13 @@ linux_epoll_input_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
        }
     }
 
+done:
+  if (PREDICT_FALSE (vm->cpu_id != clib_get_current_cpu_id ()))
+    {
+      vm->cpu_id = clib_get_current_cpu_id ();
+      vm->numa_node = clib_get_current_numa_node ();
+    }
+
   return 0;
 }
 
index ae92d93..08f0506 100755 (executable)
@@ -671,7 +671,6 @@ vlib_unix_main (int argc, char *argv[])
 
   __os_thread_index = 0;
   vm->thread_index = 0;
-  vm->cpu_id = ~0;
 
   i = clib_calljmp (thread0, (uword) vm,
                    (void *) (vlib_thread_stacks[0] +