From 8a148ade17e4c73cd768ad81b30096139898bbe7 Mon Sep 17 00:00:00 2001 From: wu-changsheng Date: Sat, 8 Oct 2022 21:03:58 +0800 Subject: [PATCH 20/21] support conf control app bind numa --- src/lstack/api/lstack_epoll.c | 9 +++++++-- src/lstack/core/lstack_cfg.c | 20 +++++++++++++++++++- src/lstack/include/lstack_cfg.h | 1 + 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/lstack/api/lstack_epoll.c b/src/lstack/api/lstack_epoll.c index cc1cbf0..bd3396a 100644 --- a/src/lstack/api/lstack_epoll.c +++ b/src/lstack/api/lstack_epoll.c @@ -343,7 +343,9 @@ static void epoll_bind_statck(struct wakeup_poll *wakeup) } if (wakeup->bind_stack != wakeup->max_stack && wakeup->max_stack) { - bind_to_stack_numa(wakeup->max_stack); + if (get_global_cfg_params()->app_bind_numa) { + bind_to_stack_numa(wakeup->max_stack); + } if (wakeup->bind_stack) { unregister_wakeup(wakeup->bind_stack, wakeup); } @@ -461,7 +463,10 @@ static void poll_bind_statck(struct wakeup_poll *wakeup, int32_t *stack_count) if (wakeup->bind_stack) { unregister_wakeup(wakeup->bind_stack, wakeup); } - bind_to_stack_numa(stack_group->stacks[bind_id]); + + if (get_global_cfg_params()->app_bind_numa) { + bind_to_stack_numa(stack_group->stacks[bind_id]); + } wakeup->bind_stack = stack_group->stacks[bind_id]; register_wakeup(wakeup->bind_stack, wakeup); } diff --git a/src/lstack/core/lstack_cfg.c b/src/lstack/core/lstack_cfg.c index 19a5b30..2cd9989 100644 --- a/src/lstack/core/lstack_cfg.c +++ b/src/lstack/core/lstack_cfg.c @@ -55,6 +55,7 @@ static int32_t parse_dpdk_args(void); static int32_t parse_gateway_addr(void); static int32_t parse_kni_switch(void); static int32_t parse_listen_shadow(void); +static int32_t parse_app_bind_numa(void); struct config_vector_t { const char *name; @@ -71,8 +72,9 @@ static struct config_vector_t g_config_tbl[] = { { "num_cpus", parse_stack_cpu_number }, { "num_wakeup", parse_wakeup_cpu_number }, { "low_power_mode", parse_low_power_mode }, - { "kni_switch", parse_kni_switch }, + { "kni_switch", parse_kni_switch }, { "listen_shadow", parse_listen_shadow }, + { "app_bind_numa", parse_app_bind_numa }, { NULL, NULL } }; @@ -710,6 +712,22 @@ static int32_t parse_listen_shadow(void) return 0; } +static int32_t parse_app_bind_numa(void) +{ + const config_setting_t *arg = NULL; + + arg = config_lookup(&g_config, "app_bind_numa"); + if (arg == NULL) { + g_config_params.app_bind_numa = true; + return 0; + } + + int32_t val = config_setting_get_int(arg); + g_config_params.app_bind_numa = (val == 0) ? false : true; + + return 0; +} + static int32_t parse_kni_switch(void) { const config_setting_t *arg = NULL; diff --git a/src/lstack/include/lstack_cfg.h b/src/lstack/include/lstack_cfg.h index 1a6ef39..80dfd24 100644 --- a/src/lstack/include/lstack_cfg.h +++ b/src/lstack/include/lstack_cfg.h @@ -76,6 +76,7 @@ struct cfg_params { bool use_ltran; // ture:lstack read from nic false:read form ltran bool kni_switch; bool listen_shadow; // true:listen in all stack thread. false:listen in one stack thread. + bool app_bind_numa; int dpdk_argc; char **dpdk_argv; struct secondary_attach_arg sec_attach_arg; -- 2.23.0