From: Damjan Marion Date: Sat, 19 Jan 2019 22:45:36 +0000 (+0100) Subject: Store numa-noda and cpu-index in vlib_main_t X-Git-Tag: v19.04-rc1~646 X-Git-Url: https://gerrit.fd.io/r/gitweb?a=commitdiff_plain;h=0a78fa17cbbeec8137ae823d3c5da8c6bec5ac6e;p=vpp.git Store numa-noda and cpu-index in vlib_main_t Change-Id: If88ccd965122b9318a39a8d71b53334cd1fd81e4 Signed-off-by: Damjan Marion --- diff --git a/src/vlib/main.h b/src/vlib/main.h index 474756bebd6..8a25ce8b4cc 100644 --- a/src/vlib/main.h +++ b/src/vlib/main.h @@ -172,8 +172,10 @@ typedef struct vlib_main_t /* Hash table to record which init functions have been called. */ uword *init_functions_called; - /* to compare with node runtime */ + /* thread, cpu and numa_node indices */ u32 thread_index; + u32 cpu_index; + u32 numa_node; /* List of init functions to call, setup by constructors */ _vlib_init_function_list_elt_t *init_function_registrations; diff --git a/src/vlib/threads.c b/src/vlib/threads.c index 3e184e3e1cd..45e4d89b7ab 100644 --- a/src/vlib/threads.c +++ b/src/vlib/threads.c @@ -1681,6 +1681,9 @@ 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 (); + vlib_worker_thread_init (w); clib_time_init (&vm->clib_time); clib_mem_set_heap (w->thread_mheap); diff --git a/src/vlib/unix/main.c b/src/vlib/unix/main.c index 08f0506fbc2..4d6519ed857 100755 --- a/src/vlib/unix/main.c +++ b/src/vlib/unix/main.c @@ -671,6 +671,8 @@ 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 (); i = clib_calljmp (thread0, (uword) vm, (void *) (vlib_thread_stacks[0] + diff --git a/src/vppinfra/cpu.h b/src/vppinfra/cpu.h index 6dc0a23e467..8341eaf0e54 100644 --- a/src/vppinfra/cpu.h +++ b/src/vppinfra/cpu.h @@ -16,6 +16,7 @@ #ifndef included_clib_cpu_h #define included_clib_cpu_h +#include #include /* @@ -99,6 +100,22 @@ _ (asimddp, 20) \ _ (sha512, 21) \ _ (sve, 22) +static inline u32 +clib_get_current_cpu_index () +{ + unsigned cpu, node; + syscall (__NR_getcpu, &cpu, &node, 0); + return cpu; +} + +static inline u32 +clib_get_current_numa_node () +{ + unsigned cpu, node; + syscall (__NR_getcpu, &cpu, &node, 0); + return node; +} + #if defined(__x86_64__) #include "cpuid.h"