diff options
author | Damjan Marion <damarion@cisco.com> | 2018-07-03 17:24:45 +0200 |
---|---|---|
committer | Dave Barach <openvpp@barachs.net> | 2018-07-03 18:41:57 +0000 |
commit | 7752b39af3b4d99e6ff649ec7c294ad56665b1f9 (patch) | |
tree | 0e01a568f7ac1161c8ae28fde90e7bb4fadab647 /src/vpp | |
parent | 6b1cdd3a2050ed9eb79817a01ca311915edf5d9e (diff) |
Set main thread affinity before main heap is allocated
Change-Id: I524909570fc1736f51fd437d6d30566c461139bd
Signed-off-by: Damjan Marion <damarion@cisco.com>
Diffstat (limited to 'src/vpp')
-rw-r--r-- | src/vpp/vnet/main.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/vpp/vnet/main.c b/src/vpp/vnet/main.c index 6e136e19201..9a804eb3641 100644 --- a/src/vpp/vnet/main.c +++ b/src/vpp/vnet/main.c @@ -13,6 +13,10 @@ * limitations under the License. */ +#define _GNU_SOURCE +#include <pthread.h> +#include <sched.h> + #include <vppinfra/cpu.h> #include <vlib/vlib.h> #include <vlib/unix/unix.h> @@ -103,6 +107,8 @@ main (int argc, char *argv[]) uword main_heap_size = (1ULL << 30); u8 *sizep; u32 size; + int main_core = 1; + cpu_set_t cpuset; #if __x86_64__ CLIB_UNUSED (const char *msg) @@ -234,10 +240,25 @@ main (int argc, char *argv[]) else if (*sizep == 'm' || *sizep == 'M') main_heap_size <<= 20; } + else if (!strncmp (argv[i], "main-core", 9)) + { + if (i < (argc - 1)) + { + errno = 0; + unsigned long x = strtol (argv[++i], 0, 0); + if (errno == 0) + main_core = x; + } + } } defaulted: + /* set process affinity for main thread */ + CPU_ZERO (&cpuset); + CPU_SET (main_core, &cpuset); + pthread_setaffinity_np (pthread_self (), sizeof (cpu_set_t), &cpuset); + /* Set up the plugin message ID allocator right now... */ vl_msg_api_set_first_available_msg_id (VL_MSG_FIRST_AVAILABLE); |