Fix issue with cpu_id and numa_code captured too early 99/17099/2
authorDamjan Marion <damarion@cisco.com>
Sun, 27 Jan 2019 16:54:11 +0000 (17:54 +0100)
committerFlorin Coras <florin.coras@gmail.com>
Sun, 27 Jan 2019 20:23:17 +0000 (20:23 +0000)
Change-Id: I79b213b34c6071d14acf1922f89037a4a5a36c45
Signed-off-by: Damjan Marion <damarion@cisco.com>
src/plugins/perfmon/perfmon_periodic.c
src/vlib/main.c
src/vlib/main.h
src/vlib/threads.c
src/vlib/unix/main.c
src/vppinfra/cpu.h

index 0811439..12a1891 100644 (file)
@@ -142,7 +142,7 @@ enable_current_events (perfmon_main_t * pm)
          pe.exclude_hv = 1;
        }
 
-      cpu = vm->cpu_index;
+      cpu = vm->cpu_id;
 
       fd = perf_event_open (&pe, 0, cpu, -1, 0);
       if (fd == -1)
index 3048a0d..cfd2385 100644 (file)
@@ -1696,6 +1696,12 @@ 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 4c6d0f4..c6786d8 100644 (file)
@@ -176,7 +176,7 @@ typedef struct vlib_main_t
 
   /* thread, cpu and numa_node indices */
   u32 thread_index;
-  u32 cpu_index;
+  u32 cpu_id;
   u32 numa_node;
 
   /* List of init functions to call, setup by constructors */
index e6ac6db..6257bb6 100644 (file)
@@ -1723,8 +1723,7 @@ vlib_worker_thread_fn (void *arg)
 
   ASSERT (vm->thread_index == vlib_get_thread_index ());
 
-  vm->cpu_index = clib_get_current_cpu_index ();
-  vm->numa_node = clib_get_current_numa_node ();
+  vm->cpu_id = ~0;
 
   vlib_worker_thread_init (w);
   clib_time_init (&vm->clib_time);
index 4d6519e..ae92d93 100755 (executable)
@@ -671,8 +671,7 @@ vlib_unix_main (int argc, char *argv[])
 
   __os_thread_index = 0;
   vm->thread_index = 0;
-  vm->cpu_index = clib_get_current_cpu_index ();
-  vm->numa_node = clib_get_current_numa_node ();
+  vm->cpu_id = ~0;
 
   i = clib_calljmp (thread0, (uword) vm,
                    (void *) (vlib_thread_stacks[0] +
index 8341eaf..97e0144 100644 (file)
@@ -101,7 +101,7 @@ _ (sha512,     21) \
 _ (sve,        22)
 
 static inline u32
-clib_get_current_cpu_index ()
+clib_get_current_cpu_id ()
 {
   unsigned cpu, node;
   syscall (__NR_getcpu, &cpu, &node, 0);