From f0b2d5b48d738dc3169aa0fc0f42aa7bf2eeb4da Mon Sep 17 00:00:00 2001 From: Bashar Abdelgafer Date: Thu, 6 Jun 2024 18:02:45 +0300 Subject: [PATCH] issue: 3925885 Adjusting XLIO default allocation logic MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Modified the default ring allocation logic from ‘ring per interface’ to ‘ring per thread’. - Adjusted the MCE_SPEC_NGINX_DPU and MCE_SPEC_NGINX by setting ring_allocation_logic_tx and ring_allocation_logic_rx to ‘ring per interface’. - Fixed a minor side-effect in the ring_allocation_logic constructor. Signed-off-by: Bashar Abdelgafer --- src/core/dev/net_device_val.cpp | 3 ++- src/core/dev/ring_allocation_logic.cpp | 4 +--- src/core/util/sys_vars.cpp | 4 ++++ src/core/util/sys_vars.h | 4 ++-- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/core/dev/net_device_val.cpp b/src/core/dev/net_device_val.cpp index d59b48a2f..f274b3f48 100644 --- a/src/core/dev/net_device_val.cpp +++ b/src/core/dev/net_device_val.cpp @@ -70,8 +70,9 @@ #define nd_logfunc __log_info_func #define nd_logfuncall __log_info_funcall +// The value assigned in this constructor is alwys overriden later ring_alloc_logic_attr::ring_alloc_logic_attr() - : m_ring_alloc_logic(RING_LOGIC_PER_INTERFACE) + : m_ring_alloc_logic(RING_LOGIC_PER_THREAD) , m_use_locks(true) , m_user_id_key(0) { diff --git a/src/core/dev/ring_allocation_logic.cpp b/src/core/dev/ring_allocation_logic.cpp index 2a5660f6c..20ca85fa8 100644 --- a/src/core/dev/ring_allocation_logic.cpp +++ b/src/core/dev/ring_allocation_logic.cpp @@ -63,9 +63,7 @@ ring_allocation_logic::ring_allocation_logic(ring_logic_t allocation_logic, , m_migration_try_count(ring_migration_ratio) , m_source(source) { - if (ring_profile.get_ring_alloc_logic() == RING_LOGIC_PER_INTERFACE) { - ring_profile.set_ring_alloc_logic(allocation_logic); - } + ring_profile.set_ring_alloc_logic(allocation_logic); m_res_key = resource_allocation_key(ring_profile); m_migration_candidate = 0; m_res_key.set_user_id_key(calc_res_key_by_logic()); diff --git a/src/core/util/sys_vars.cpp b/src/core/util/sys_vars.cpp index 3133a594b..a42e68ca8 100644 --- a/src/core/util/sys_vars.cpp +++ b/src/core/util/sys_vars.cpp @@ -1042,6 +1042,8 @@ void mce_sys_var::get_env_params() #ifdef DEFINED_NGINX case MCE_SPEC_NGINX: + ring_allocation_logic_tx = RING_LOGIC_PER_INTERFACE; + ring_allocation_logic_rx = RING_LOGIC_PER_INTERFACE; memory_limit = (app.workers_num > 16 ? 3072LU : 4096LU) * 1024 * 1024; memory_limit *= std::max(app.workers_num, 1); rx_bufs_batch = 8; // MCE_DEFAULT_RX_BUFS_BATCH (64), RX buffers batch size. @@ -1081,6 +1083,8 @@ void mce_sys_var::get_env_params() break; case MCE_SPEC_NGINX_DPU: + ring_allocation_logic_tx = RING_LOGIC_PER_INTERFACE; + ring_allocation_logic_rx = RING_LOGIC_PER_INTERFACE; // The top part is different from NGINX SPEC memory_limit = (app.workers_num == 16 ? 512LU : 1024LU) * 1024 * 1024; memory_limit *= std::max(app.workers_num, 1); diff --git a/src/core/util/sys_vars.h b/src/core/util/sys_vars.h index 9dddbce91..e8497369f 100644 --- a/src/core/util/sys_vars.h +++ b/src/core/util/sys_vars.h @@ -727,8 +727,8 @@ extern mce_sys_var &safe_mce_sys(); #define MCE_DEFAULT_HANDLE_SIGINTR (true) #define MCE_DEFAULT_HANDLE_SIGFAULT (false) #define MCE_DEFAULT_STATS_FD_NUM 0 -#define MCE_DEFAULT_RING_ALLOCATION_LOGIC_TX (RING_LOGIC_PER_INTERFACE) -#define MCE_DEFAULT_RING_ALLOCATION_LOGIC_RX (RING_LOGIC_PER_INTERFACE) +#define MCE_DEFAULT_RING_ALLOCATION_LOGIC_TX (RING_LOGIC_PER_THREAD) +#define MCE_DEFAULT_RING_ALLOCATION_LOGIC_RX (RING_LOGIC_PER_THREAD) #define MCE_DEFAULT_RING_MIGRATION_RATIO_TX (-1) #define MCE_DEFAULT_RING_MIGRATION_RATIO_RX (-1) #define MCE_DEFAULT_RING_LIMIT_PER_INTERFACE (0)