From fca50e6d49c6574a5650e36bbaf4e431f47e0688 Mon Sep 17 00:00:00 2001 From: YuQing <384681@qq.com> Date: Mon, 11 Sep 2023 11:36:30 +0800 Subject: [PATCH] sf_load_config support fixed_buff_size --- src/sf_connection_manager.c | 16 +++++++++++--- src/sf_global.c | 42 ++++++++++++++++++------------------- src/sf_global.h | 16 ++++++++------ src/sf_types.h | 3 +-- 4 files changed, 44 insertions(+), 33 deletions(-) diff --git a/src/sf_connection_manager.c b/src/sf_connection_manager.c index 62231d3..95e121a 100644 --- a/src/sf_connection_manager.c +++ b/src/sf_connection_manager.c @@ -522,6 +522,7 @@ int sf_connection_manager_init_ex(SFConnectionManager *cm, const bool bg_thread_enabled) { const int socket_domain = AF_INET; + const int padding_size = 1024; struct { ConnectionExtraParams holder; ConnectionExtraParams *ptr; @@ -544,9 +545,18 @@ int sf_connection_manager_init_ex(SFConnectionManager *cm, if (server_group->comm_type == fc_comm_type_sock) { extra_params.ptr = NULL; } else { - //TODO: fix me!!! - extra_params.holder.buffer_size = 256 * 1024; - extra_params.holder.pd = NULL; + FCServerInfo *first_server; + + first_server = FC_SID_SERVERS(*server_cfg); + extra_params.holder.buffer_size = server_group-> + buffer_size + padding_size; + extra_params.holder.pd = fc_alloc_rdma_pd( + G_RDMA_CONNECTION_CALLBACKS.alloc_pd, + &first_server->group_addrs[server_group_index]. + address_array, &result); + if (result != 0) { + return result; + } extra_params.ptr = &extra_params.holder; } if ((result=conn_pool_init_ex1(&cm->cpool, common_cfg->connect_timeout, diff --git a/src/sf_global.c b/src/sf_global.c index 7d7a9ea..18c8a5c 100644 --- a/src/sf_global.c +++ b/src/sf_global.c @@ -62,10 +62,11 @@ static inline void set_config_str_value(const char *value, } static int load_network_parameters(IniFullContext *ini_ctx, - const char *max_pkg_size_item_nm, + const char *max_pkg_size_item_nm, const int fixed_buff_size, const int task_buffer_extra_size) { int result; + int padding_buff_size; char *pMinBuffSize; char *pMaxBuffSize; @@ -95,6 +96,14 @@ static int load_network_parameters(IniFullContext *ini_ctx, return result; } + if (fixed_buff_size > 0) { + padding_buff_size = fixed_buff_size + task_buffer_extra_size; + g_sf_global_vars.min_buff_size = padding_buff_size; + g_sf_global_vars.max_buff_size = padding_buff_size; + g_sf_global_vars.max_pkg_size = padding_buff_size; + return 0; + } + g_sf_global_vars.max_pkg_size = iniGetByteCorrectValueEx(ini_ctx, max_pkg_size_item_nm, SF_DEF_MAX_PACKAGE_SIZE, 1, 8192, SF_MAX_NETWORK_BUFF_SIZE, true); @@ -285,8 +294,8 @@ int sf_load_global_base_path(IniFullContext *ini_ctx) int sf_load_global_config_ex(const char *server_name, IniFullContext *ini_ctx, const bool load_network_params, - const char *max_pkg_size_item_nm, const int task_buffer_extra_size, - const bool need_set_run_by) + const char *max_pkg_size_item_nm, const int fixed_buff_size, + const int task_buffer_extra_size, const bool need_set_run_by) { int result; const char *old_section_name; @@ -303,7 +312,7 @@ int sf_load_global_config_ex(const char *server_name, tcp_set_quick_ack(g_sf_global_vars.tcp_quick_ack); if (load_network_params) { if ((result=load_network_parameters(ini_ctx, max_pkg_size_item_nm, - task_buffer_extra_size)) != 0) + fixed_buff_size, task_buffer_extra_size)) != 0) { return result; } @@ -401,11 +410,12 @@ int sf_load_global_config_ex(const char *server_name, } int sf_load_config_ex(const char *server_name, SFContextIniConfig *config, - const int task_buffer_extra_size, const bool need_set_run_by) + const int fixed_buff_size, const int task_buffer_extra_size, + const bool need_set_run_by) { int result; if ((result=sf_load_global_config_ex(server_name, &config->ini_ctx, - true, config->max_pkg_size_item_name, + true, config->max_pkg_size_item_name, fixed_buff_size, task_buffer_extra_size, need_set_run_by)) != 0) { return result; @@ -609,28 +619,16 @@ int sf_alloc_rdma_pd(SFContext *sf_context, FCAddressPtrArray *address_array) { SFNetworkHandler *handler; - char *ip_addrs[FC_MAX_SERVER_IP_COUNT]; - char **ip_addr; - FCAddressInfo **addr; - FCAddressInfo **end; + int result; handler = sf_context->handlers + SF_RDMACM_NETWORK_HANDLER_INDEX; if (!handler->enabled) { return 0; } - end = address_array->addrs + address_array->count; - for (addr=address_array->addrs, ip_addr=ip_addrs; addrconn.ip_addr; - } - - if ((handler->pd=handler->alloc_pd((const char **)ip_addrs, - address_array->count)) != NULL) - { - return 0; - } else { - return ENODEV; - } + handler->pd = fc_alloc_rdma_pd(handler->alloc_pd, + address_array, &result); + return result; } void sf_context_config_to_string(const SFContext *sf_context, diff --git a/src/sf_global.h b/src/sf_global.h index 90450a0..652511a 100644 --- a/src/sf_global.h +++ b/src/sf_global.h @@ -174,29 +174,33 @@ extern SFContext g_sf_context; int sf_load_global_config_ex(const char *server_name, IniFullContext *ini_ctx, const bool load_network_params, - const char *max_pkg_size_item_nm, const int task_buffer_extra_size, - const bool need_set_run_by); + const char *max_pkg_size_item_nm, const int fixed_buff_size, + const int task_buffer_extra_size, const bool need_set_run_by); static inline int sf_load_global_config(const char *server_name, IniFullContext *ini_ctx) { const bool load_network_params = true; const char *max_pkg_size_item_nm = "max_pkg_size"; + const int fixed_buff_size = 0; const int task_buffer_extra_size = 0; const bool need_set_run_by = true; return sf_load_global_config_ex(server_name, ini_ctx, load_network_params, - max_pkg_size_item_nm, task_buffer_extra_size, need_set_run_by); + max_pkg_size_item_nm, fixed_buff_size, task_buffer_extra_size, + need_set_run_by); } int sf_load_config_ex(const char *server_name, SFContextIniConfig *config, - const int task_buffer_extra_size, const bool need_set_run_by); + const int fixed_buff_size, const int task_buffer_extra_size, + const bool need_set_run_by); static inline int sf_load_config(const char *server_name, const FCCommunicationType comm_type, const char *filename, IniContext *pIniContext, const char *section_name, const int default_inner_port, - const int default_outer_port, const int task_buffer_extra_size) + const int default_outer_port, const int fixed_buff_size, + const int task_buffer_extra_size) { const bool need_set_run_by = true; SFContextIniConfig config; @@ -204,7 +208,7 @@ static inline int sf_load_config(const char *server_name, SF_SET_CONTEXT_INI_CONFIG(config, comm_type, filename, pIniContext, section_name, default_inner_port, default_outer_port, DEFAULT_WORK_THREADS); - return sf_load_config_ex(server_name, &config, + return sf_load_config_ex(server_name, &config, fixed_buff_size, task_buffer_extra_size, need_set_run_by); } diff --git a/src/sf_types.h b/src/sf_types.h index 4973631..303941a 100644 --- a/src/sf_types.h +++ b/src/sf_types.h @@ -65,8 +65,7 @@ struct sf_listener; typedef int (*sf_get_connection_size_callback)(); typedef int (*sf_init_connection_callback)( struct fast_task_info *task, void *arg); -typedef struct ibv_pd *(*sf_alloc_pd_callback)( - const char **ip_addrs, const int count); +#define sf_alloc_pd_callback fc_alloc_pd_callback typedef int (*sf_create_server_callback)(struct sf_listener *listener, int af, const char *bind_addr);