Another question, what would be the use case of disabling the Nagle algorithm? If you don't have one I am not sure we should do the change... Thanks, Hans
> -----Original Message----- > From: A V Mahesh [mailto:[email protected]] > Sent: den 29 april 2014 09:06 > To: Hans Feldt > Cc: [email protected]; [email protected] > Subject: Re: [PATCH 1 of 1] mds: TCP performance improvements [#654] > > > Ok I will split and publish again with specific Commit Message. > > -AVM > > > On 4/29/2014 12:19 PM, Hans Feldt wrote: > > Hi, > > > > This seems like 3 different logical changes thus should be 3 different > > patches. You should not change the MDS library in the same > patch as the dtm infrastructure service (unless the changes are very tightly > coupled). > > > > What is the actual MDS/TCP performance improvement here and what change is > > bringing it? > > I think it would be the increased fragmentation limit but let's be explicit > > about it in the commit message. > > > > Thanks, > > Hans > > > >> -----Original Message----- > >> From: [email protected] [mailto:[email protected]] > >> Sent: den 29 april 2014 08:20 > >> To: [email protected]; Hans Feldt; > >> [email protected] > >> Cc: [email protected] > >> Subject: [PATCH 1 of 1] mds: TCP performance improvements [#654] > >> > >> osaf/libs/core/mds/include/mds_dt_tcp_disc.h | 1 - > >> osaf/libs/core/mds/mds_dt_tcp.c | 20 +++++- > >> osaf/libs/core/mds/mds_dt_trans.c | 12 +- > >> osaf/services/infrastructure/dtms/config/dtmd.conf | 23 +++++++ > >> osaf/services/infrastructure/dtms/dtm/dtm_intra.c | 13 +-- > >> osaf/services/infrastructure/dtms/dtm/dtm_node_sockets.c | 44 > >> ++++++------- > >> osaf/services/infrastructure/dtms/dtm/dtm_read_config.c | 30 > >> +++++++++ > >> osaf/services/infrastructure/dtms/include/dtm.h | 2 + > >> osaf/services/infrastructure/dtms/include/dtm_cb.h | 3 + > >> osaf/services/infrastructure/dtms/include/dtm_intra_disc.h | 2 - > >> 10 files changed, 109 insertions(+), 41 deletions(-) > >> > >> > >> This path is on top of Hans Feldt published on > >> 4/29/2014 10:58 AM > >> > >> 1) Their is NO issue with MDS TCP in-service Upgrade ,The value of > >> SO_RCVBUF & SO_SNDBUF of TCP sockets was set to 64000 > >> (MDS_SND_RCV_SIZE) > >> using setsockopt() ,the kernel doubles this value ,and this doubled > >> value is returned by getsockopt(). So MDS_DIRECT_BUF_MAXSIZE size is > >> used to send for for both > >> previous & current versions of Opensaf nodes which are using MDS TCP > >> as transport > >> > >> 2) Made DTM-TCP inter-node & intra-node socket SO_SNDBUF and > >> SO_RCVBUF buffer in bytes configurable . The kernel doubles this value > >> (to > >> allow space for bookkeeping over-head) when it is set using > >> setsockopt(),and > >> this doubled value is returned by getsockopt(). The default value is > >> set to DTM_SOCK_SND_RCV_BUF_SIZE=126976 > >> > >> 3) Made TCP_NODELAY configurable to specifi whether MDS TCP > >> transport should follow the Nagle algorithm for deciding when to send > >> data.By > >> default, TCP will follow the Nagle algorithm is disable this behavior > >> , can be > >> configured to TRUE(1) or FALSE(0) > >> > >> diff --git a/osaf/libs/core/mds/include/mds_dt_tcp_disc.h > >> b/osaf/libs/core/mds/include/mds_dt_tcp_disc.h > >> --- a/osaf/libs/core/mds/include/mds_dt_tcp_disc.h > >> +++ b/osaf/libs/core/mds/include/mds_dt_tcp_disc.h > >> @@ -70,7 +70,6 @@ server_instance_upper + sub_ref_val + su > >> #define MDS_SND_VERSION 1 > >> #define MDS_RCV_IDENTIFIRE 0x56123456 > >> #define MDS_RCV_VERSION 1 > >> -#define DTM_INTRANODE_MSG_SIZE 1500 > >> #define DTM_INTRANODE_UNSENT_MSG 200 > >> > >> #define MDS_MDTM_LOWER_INSTANCE 0x00000000 > >> diff --git a/osaf/libs/core/mds/mds_dt_tcp.c > >> b/osaf/libs/core/mds/mds_dt_tcp.c > >> --- a/osaf/libs/core/mds/mds_dt_tcp.c > >> +++ b/osaf/libs/core/mds/mds_dt_tcp.c > >> @@ -38,7 +38,6 @@ > >> #include <configmake.h> > >> > >> #define MDS_MDTM_SUN_PATH 255 > >> -#define MDS_SND_RCV_SIZE 64000 > >> #define MDS_MDTM_CONNECT_PATH PKGLOCALSTATEDIR "/osaf_dtm_intra_server" > >> > >> #ifndef MDS_PORT_NUMBER > >> @@ -53,6 +52,9 @@ > >> /* Send_buffer_size + MDS_MDTM_DTM_PID_BUFFER_SIZE */ > >> #define MDS_MDTM_DTM_PID_BUFFER_SIZE (2 + MDS_MDTM_DTM_PID_SIZE) > >> > >> +/* The default value is set by the rmem_default/wmem_default */ > >> +#define MDS_SOCK_SND_RCV_BUF_SIZE 126976 > >> + > >> extern uint32_t mdtm_num_subscriptions; > >> extern MDS_SUBTN_REF_VAL mdtm_handle; > >> extern uint32_t mdtm_global_frag_num_tcp; > >> @@ -79,11 +81,12 @@ uint32_t mdtm_process_recv_events_tcp(vo > >> uint32_t mds_mdtm_init_tcp(NODE_ID nodeid, uint32_t *mds_tcp_ref) > >> { > >> uint32_t flags; > >> - uint32_t size = MDS_SND_RCV_SIZE; > >> + uint32_t size = MDS_SOCK_SND_RCV_BUF_SIZE; > >> struct sockaddr_un server_addr_un, dhserver_addr_un; > >> struct sockaddr_in server_addr_in; > >> struct sockaddr_in6 server_addr_in6; > >> uint8_t buffer[MDS_MDTM_DTM_PID_BUFFER_SIZE]; > >> + char *ptr; > >> > >> mdtm_pid = getpid(); > >> > >> @@ -116,6 +119,19 @@ uint32_t mds_mdtm_init_tcp(NODE_ID nodei > >> syslog(LOG_ERR, "MDS:MDTM:TCP ncs_patricia_tree_init failed > >> MDTM_INIT\n"); > >> return NCSCC_RC_FAILURE; > >> } > >> + > >> + /* setting MDS_SOCK_SND_RCV_BUF_SIZE from environment variable if > >> given. > >> + The default value is set to MDS_SOCK_SND_RCV_BUF_SIZE (126976). > >> + based on application requirements user need to export > >> MDS_SOCK_SND_RCV_BUF_SIZE > >> + varible. > >> + > >> + If MDS_SOCK_SND_RCV_BUF_SIZE exported to new value > >> + it is also mandatory to change `DTM_SOCK_SND_RCV_BUF_SIZE=` with > >> the same value of > >> + for example if we export MDS_SOCK_SND_RCV_BUF_SIZE=16777216 > >> + DTM_SOCK_SND_RCV_BUF_SIZE=16777216 also need to be changed in > >> /etc/opensaf/dtm.conf */ > >> + if ((ptr = getenv("MDS_SOCK_SND_RCV_BUF_SIZE")) != NULL) { > >> + size = atoi(ptr); > >> + } > >> > >> /* Create the sockets required for Binding, Send, receive and Discovery > >> */ > >> > >> diff --git a/osaf/libs/core/mds/mds_dt_trans.c > >> b/osaf/libs/core/mds/mds_dt_trans.c > >> --- a/osaf/libs/core/mds/mds_dt_trans.c > >> +++ b/osaf/libs/core/mds/mds_dt_trans.c > >> @@ -41,7 +41,7 @@ > >> > >> #define SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN_TCP ((2 + > >> MDS_SEND_ADDRINFO_TCP + MDTM_FRAG_HDR_LEN_TCP + > >> MDS_HDR_LEN_TCP)) > >> > >> -#define MDTM_MAX_SEND_PKT_SIZE_TCP > >> (MDTM_NORMAL_MSG_FRAG_SIZE+SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN_TCP) /* > >> Includes the 30 header > >> bytes(2+8+20) */ > >> +#define MDTM_MAX_SEND_PKT_SIZE_TCP > (MDS_DIRECT_BUF_MAXSIZE+SUM_MDS_HDR_PLUS_MDTM_HDR_PLUS_LEN_TCP) > >> /* Includes the 30 header bytes(2+8+20) */ > >> > >> uint32_t mdtm_global_frag_num_tcp; > >> extern struct pollfd pfd[2]; > >> @@ -363,16 +363,16 @@ static uint32_t mdtm_frag_and_send_tcp(M > >> > >> len = m_MMGR_LINK_DATA_LEN(usrbuf); /* Getting total len */ > >> > >> - if (len > (32767 * MDTM_NORMAL_MSG_FRAG_SIZE)) { /* We have 15 > >> bits for frag number so 2( pow 15) -1=32767 */ > >> + if (len > (32767 * MDS_DIRECT_BUF_MAXSIZE)) { /* We have 15 bits for > >> frag number so 2( pow 15) -1=32767 */ > >> m_MDS_LOG_CRITICAL > >> ("MDTM: App. is trying to send data more than MDTM Can > >> fragment and send, Max size is =%d\n", > >> - 32767 * MDTM_NORMAL_MSG_FRAG_SIZE); > >> + 32767 * MDS_DIRECT_BUF_MAXSIZE); > >> m_MMGR_FREE_BUFR_LIST(usrbuf); > >> return NCSCC_RC_FAILURE; > >> } > >> > >> while (len != 0) { > >> - if (len > MDTM_NORMAL_MSG_FRAG_SIZE) { > >> + if (len > MDS_DIRECT_BUF_MAXSIZE) { > >> if (i == 1) { > >> len_buf = MDTM_MAX_SEND_PKT_SIZE_TCP; > >> frag_val = MORE_FRAG_BIT | i; > >> @@ -552,7 +552,7 @@ uint32_t mds_mdtm_send_tcp(MDTM_SEND_REQ > >> m_MDS_LOG_INFO("MDTM: User Sending Data > >> lenght=%d Fr_svc=%d to_svc=%d\n", len, > >> req->src_svc_id, > >> req->dest_svc_id); > >> > >> - if (len > MDTM_NORMAL_MSG_FRAG_SIZE) { > >> + if (len > MDS_DIRECT_BUF_MAXSIZE) { > >> /* Packet needs to be fragmented and > >> send */ > >> status = mdtm_frag_and_send_tcp(req, > >> frag_seq_num, id); > >> return status; > >> @@ -678,7 +678,7 @@ void mdtm_process_poll_recv_data_tcp(voi > >> /* Receive all incoming data on this socket */ > >> > >> /*******************************************************/ > >> > >> - recd_bytes = recv(tcp_cb->DBSRsock, tcp_cb->len_buff, > >> 2, 0); > >> + recd_bytes = recv(tcp_cb->DBSRsock, tcp_cb->len_buff, > >> 2, MSG_NOSIGNAL); > >> if (0 == recd_bytes) { > >> LOG_ER("MDTM:socket_recv() = %d, conn lost with > >> dh server, exiting library err :%s", recd_bytes, > >> strerror(errno)); > >> close(tcp_cb->DBSRsock); > >> diff --git a/osaf/services/infrastructure/dtms/config/dtmd.conf > >> b/osaf/services/infrastructure/dtms/config/dtmd.conf > >> --- a/osaf/services/infrastructure/dtms/config/dtmd.conf > >> +++ b/osaf/services/infrastructure/dtms/config/dtmd.conf > >> @@ -72,4 +72,27 @@ DTM_TCP_KEEPALIVE_INTVL=1 > >> # Optional > >> DTM_TCP_KEEPALIVE_PROBES=2 > >> > >> +# > >> +#Used to Set the dtm internode & intranode socket SO_SNDBUF/SO_RCVBUF > >> buffer in bytes. > >> +#The kernel doubles this value (to allow space for bookkeeping over-head) > >> +#when it is set using setsockopt(),and this doubled value is returned by > >> +#getsockopt(). The default value is set by the rmem_default/wmem_default > >> +#sysctl and the maximum allowed value is set by the rmem_max/wmem_max > >> sysctl. > >> +# > >> +# IMP NOTE : If DTM_SOCK_SND_RCV_BUF_SIZE is configured according to > >> application requirements , > >> +#it is also mandatory to export `MDS_SOCK_SND_RCV_BUF_SIZE=` with the > >> same value of > >> +#for example if set as DTM_SOCK_SND_RCV_BUF_SIZE=16777216 need to do : > >> +#export MDS_SOCK_SND_RCV_BUF_SIZE=16777216 > >> +DTM_SOCK_SND_RCV_BUF_SIZE=126976 > >> > >> +# > >> +#Specifies whether MDS TCP transport should follow the Nagle algorithm for > >> +#deciding when to send data.By default, TCP will follow the Nagle > >> algorithm is disable > >> +#this behavior,MDS TCP transport can enable TCP_NODELAY to force > >> +#TCP to always send data immediately.For example,TCP_NODELAY should be > >> used > >> +#when there is an application using TCP for a request/response. > >> +#This option is only supported for sockets with an address family > >> +#of AF_INET or AF_INET6 (internode )and type of SOCK_STREAM > >> +# TRUE(1) or FALSE(0) > >> +DTM_TCP_NODELAY_FLAG=1 > >> + > >> diff --git a/osaf/services/infrastructure/dtms/dtm/dtm_intra.c > >> b/osaf/services/infrastructure/dtms/dtm/dtm_intra.c > >> --- a/osaf/services/infrastructure/dtms/dtm/dtm_intra.c > >> +++ b/osaf/services/infrastructure/dtms/dtm/dtm_intra.c > >> @@ -42,7 +42,6 @@ DTM_INTRANODE_CB *dtm_intranode_cb = NUL > >> > >> #define DTM_INTRANODE_MAX_PROCESSES 100 > >> #define DTM_INTRANODE_POLL_TIMEOUT 20000 > >> -#define DTM_RECV_BUFFER_SIZE 1500 > >> #define DTM_INTRANODE_TASKNAME "DTM_INTRANODE" > >> #define DTM_INTRANODE_STACKSIZE NCS_STACKSIZE_HUGE > >> > >> @@ -58,7 +57,7 @@ static struct pollfd pfd_list[DTM_INTRAN > >> > >> static int dtm_intranode_max_fd; > >> > >> -static uint32_t dtm_intra_processing_init(char *node_ip, DTM_IP_ADDR_TYPE > >> i_addr_family); > >> +static uint32_t dtm_intra_processing_init(char *node_ip, DTM_IP_ADDR_TYPE > >> i_addr_family, int32_t sock_snd_rcv_buf_size); > >> static void dtm_intranode_processing(void); > >> static uint32_t dtm_intranode_add_poll_fdlist(int fd, uint16_t event); > >> static uint32_t dtm_intranode_create_rcv_task(int task_hdl); > >> @@ -79,10 +78,9 @@ uint32_t dtm_socket_domain = AF_UNIX; > >> */ > >> uint32_t dtm_service_discovery_init(DTM_INTERNODE_CB *dtms_cb) > >> { > >> - return dtm_intra_processing_init(dtms_cb->ip_addr, > >> dtms_cb->i_addr_family); > >> + return dtm_intra_processing_init(dtms_cb->ip_addr, > >> dtms_cb->i_addr_family, dtms_cb->sock_snd_rcv_buf_size); > >> } > >> > >> -#define DTM_INTRANODE_SOCK_SIZE 64000 > >> > >> /** > >> * Function to init the intranode processing > >> @@ -92,10 +90,10 @@ uint32_t dtm_service_discovery_init(DTM_ > >> * @return NCSCC_RC_FAILURE > >> * > >> */ > >> -uint32_t dtm_intra_processing_init(char *node_ip, DTM_IP_ADDR_TYPE > >> i_addr_family) > >> +uint32_t dtm_intra_processing_init(char *node_ip, DTM_IP_ADDR_TYPE > >> i_addr_family, int32_t sock_snd_rcv_buf_size) > >> { > >> > >> - int servlen, size = DTM_INTRANODE_SOCK_SIZE; /* For socket fd and > >> server len */ > >> + int servlen, size = sock_snd_rcv_buf_size; /* For socket fd and > >> server len */ > >> struct sockaddr_un serv_addr; /* For Unix Sock address */ > >> char server_ux_name[255]; > >> NCS_PATRICIA_PARAMS pat_tree_params; > >> @@ -112,6 +110,7 @@ uint32_t dtm_intra_processing_init(char > >> return NCSCC_RC_FAILURE; > >> } > >> dtm_intranode_cb->sock_domain = dtm_socket_domain; > >> + dtm_intranode_cb->sock_snd_rcv_buf_size = sock_snd_rcv_buf_size; > >> > >> /* Open a socket, If socket opens to fail return Error */ > >> dtm_intranode_cb->server_sockfd = socket(dtm_socket_domain, > >> SOCK_STREAM, 0); > >> @@ -894,7 +893,7 @@ static uint32_t dtm_intranode_process_in > >> { > >> int flags; > >> /* Accept processing */ > >> - int accept_fd = 0, retry_count = 0, size = DTM_INTRANODE_SOCK_SIZE; > >> + int accept_fd = 0, retry_count = 0, size = > >> dtm_intranode_cb->sock_snd_rcv_buf_size; > >> socklen_t len = sizeof(struct sockaddr_un); > >> struct sockaddr_un cli_addr; > >> /* Accept should be non_block */ > >> diff --git a/osaf/services/infrastructure/dtms/dtm/dtm_node_sockets.c > >> b/osaf/services/infrastructure/dtms/dtm/dtm_node_sockets.c > >> --- a/osaf/services/infrastructure/dtms/dtm/dtm_node_sockets.c > >> +++ b/osaf/services/infrastructure/dtms/dtm/dtm_node_sockets.c > >> @@ -26,7 +26,6 @@ > >> > >> #define MYPORT "6900" > >> #define MAXBUFLEN 100 > >> -#define DTM_INTERNODE_SOCK_SIZE 64000 > >> > >> struct addrinfo *mcast_sender_addr; /* Holder for mcast_sender_addr > >> address */ > >> > >> @@ -431,7 +430,7 @@ uint32_t dtm_comm_socket_send(int sock_d > >> int rtn = 0; > >> int err = 0; > >> int rc = NCSCC_RC_SUCCESS; > >> - rtn = send(sock_desc, (raw_type *) buffer, buffer_len, 0); > >> + rtn = send(sock_desc, (raw_type *) buffer, buffer_len, MSG_NOSIGNAL); > >> err = errno; > >> if (rtn < 0) { > >> if (!IS_BLOCKIN_ERROR(err)) { > >> @@ -508,7 +507,7 @@ static char *comm_get_foreign_address(in > >> int comm_socket_setup_new(DTM_INTERNODE_CB * dtms_cb, const char > >> *foreign_address, in_port_t foreign_port, > >> DTM_IP_ADDR_TYPE ip_addr_type) > >> { > >> - int sock_desc = -1, size = DTM_INTERNODE_SOCK_SIZE; > >> + int sock_desc = -1, size = dtms_cb->sock_snd_rcv_buf_size; > >> int err = 0, rv; > >> char local_port_str[INET6_ADDRSTRLEN]; > >> struct addrinfo *addr_list; > >> @@ -578,12 +577,12 @@ int comm_socket_setup_new(DTM_INTERNODE_ > >> goto done; > >> } > >> > >> - int flag = 1; > >> - if (setsockopt(sock_desc, IPPROTO_TCP, TCP_NODELAY, (void > >> *)&flag, sizeof(flag)) != 0) { > >> - LOG_ER("DTM:Socket TCP_NODELAY set failed err :%s", > >> strerror(errno)); > >> - dtm_comm_socket_close(&sock_desc); > >> - goto done; > >> - } > >> + int flag = dtms_cb->tcp_nodelay_flag; > >> + if (setsockopt(sock_desc, IPPROTO_TCP, TCP_NODELAY, (void *)&flag, > >> sizeof(flag)) != 0) { > >> + LOG_ER("DTM:Socket TCP_NODELAY set failed err :%s", > >> strerror(errno)); > >> + dtm_comm_socket_close(&sock_desc); > >> + goto done; > >> + } > >> > >> if (NCSCC_RC_SUCCESS != set_keepalive(dtms_cb, sock_desc)) { > >> LOG_ER("DTM :set_keepalive failed "); > >> @@ -660,7 +659,7 @@ uint32_t dtm_stream_nonblocking_listener > >> struct addrinfo addr_criteria; /* Criteria for address match */ > >> char local_port_str[6]; > >> struct addrinfo *addr_list = NULL, *p;; /* List of serv addresses */ > >> - int size = DTM_INTERNODE_SOCK_SIZE; > >> + int size = dtms_cb->sock_snd_rcv_buf_size; > >> int rv; > >> char ip_addr_eth[INET6_ADDRSTRLEN + IFNAMSIZ]; > >> dtms_cb->stream_sock = -1; > >> @@ -728,11 +727,11 @@ uint32_t dtm_stream_nonblocking_listener > >> LOG_ER("DTM:Socket snd buf size set failed err :%s", > >> strerror(errno)); > >> } > >> > >> - int flag = 1; > >> - if (setsockopt(dtms_cb->stream_sock, IPPROTO_TCP, TCP_NODELAY, > >> (void *)&flag, sizeof(flag)) != 0) { > >> - LOG_ER("DTM:Socket TCP_NODELAY set failed err :%s", > >> strerror(errno)); > >> - dtm_sockdesc_close(dtms_cb->stream_sock); > >> - return NCSCC_RC_FAILURE; > >> + int flag = dtms_cb->tcp_nodelay_flag; > >> + if (setsockopt(dtms_cb->stream_sock, IPPROTO_TCP, TCP_NODELAY, (void > >> *)&flag, sizeof(flag)) != 0) { > >> + LOG_ER("DTM:Socket TCP_NODELAY set failed err :%s", > >> strerror(errno)); > >> + dtm_sockdesc_close(dtms_cb->stream_sock); > >> + return NCSCC_RC_FAILURE; > >> } > >> > >> if (set_keepalive(dtms_cb, dtms_cb->stream_sock) != NCSCC_RC_SUCCESS) { > >> @@ -1249,7 +1248,6 @@ int dtm_process_connect(DTM_INTERNODE_CB > >> > >> } > >> > >> -#define DTM_INTERNODE_SOCK_SIZE 64000 > >> > >> /** > >> * Function for dtm accept the connection > >> @@ -1270,7 +1268,7 @@ int dtm_process_accept(DTM_INTERNODE_CB > >> int err = 0; > >> DTM_NODE_DB node; > >> DTM_NODE_DB *new_node; > >> - int new_conn_sd, size = DTM_INTERNODE_SOCK_SIZE; > >> + int new_conn_sd, size = dtms_cb->sock_snd_rcv_buf_size; > >> const struct sockaddr *clnt_addr1 = (struct sockaddr *)&clnt_addr; > >> TRACE_ENTER(); > >> > >> @@ -1298,12 +1296,12 @@ int dtm_process_accept(DTM_INTERNODE_CB > >> goto done; > >> } > >> > >> - int flag = 1; > >> - if (setsockopt(new_conn_sd, IPPROTO_TCP, TCP_NODELAY, (void > >> *)&flag, sizeof(flag)) != 0) { > >> - LOG_ER("DTM:Socket TCP_NODELAY set failed err :%s", > >> strerror(errno)); > >> - dtm_comm_socket_close(&new_conn_sd); > >> - goto done; > >> - } > >> + int flag = dtms_cb->tcp_nodelay_flag; > >> + if (setsockopt(new_conn_sd, IPPROTO_TCP, TCP_NODELAY, (void *)&flag, > >> sizeof(flag)) != 0) { > >> + LOG_ER("DTM:Socket TCP_NODELAY set failed err :%s", > >> strerror(errno)); > >> + dtm_comm_socket_close(&new_conn_sd); > >> + goto done; > >> + } > >> > >> if (NCSCC_RC_SUCCESS != set_keepalive(dtms_cb, new_conn_sd)) { > >> LOG_ER("DTM:set_keepalive failed "); > >> diff --git a/osaf/services/infrastructure/dtms/dtm/dtm_read_config.c > b/osaf/services/infrastructure/dtms/dtm/dtm_read_config.c > >> --- a/osaf/services/infrastructure/dtms/dtm/dtm_read_config.c > >> +++ b/osaf/services/infrastructure/dtms/dtm/dtm_read_config.c > >> @@ -94,6 +94,10 @@ void dtm_print_config(DTM_INTERNODE_CB * > >> TRACE(" %d", config->initial_dis_timeout); > >> TRACE(" DTM_BCAST_FRE_MSECS: "); > >> TRACE(" %d", config->bcast_msg_freq); > >> + TRACE(" DTM_SOCK_SND_RCV_BUF_SIZE: "); > >> + TRACE(" %d", config->sock_snd_rcv_buf_size); > >> + TRACE(" DTM_TCP_NODELAY_FLAG: "); > >> + TRACE(" %d", config->tcp_nodelay_flag); > >> TRACE("DTM : "); > >> } > >> > >> @@ -220,6 +224,8 @@ int dtm_read_config(DTM_INTERNODE_CB * c > >> config->i_addr_family = DTM_IP_ADDR_TYPE_IPV4; > >> config->bcast_msg_freq = BCAST_FRE; > >> config->initial_dis_timeout = DIS_TIME_OUT; > >> + config->sock_snd_rcv_buf_size = DTM_SOCK_SND_RCV_BUF_SIZE; > >> + config->tcp_nodelay_flag = true; > >> config->mcast_flag = false; > >> config->scope_link = false; > >> config->node_id = m_NCS_GET_NODE_ID; > >> @@ -424,6 +430,30 @@ int dtm_read_config(DTM_INTERNODE_CB * c > >> tag_len = 0; > >> > >> } > >> + if (strncmp(line, "DTM_SOCK_SND_RCV_BUF_SIZE=", > >> strlen("DTM_SOCK_SND_RCV_BUF_SIZE=")) == 0) { > >> + tag_len = strlen("DTM_SOCK_SND_RCV_BUF_SIZE="); > >> + config->sock_snd_rcv_buf_size = > >> atoi(&line[tag_len]); > >> + if (config->sock_snd_rcv_buf_size < 126976) { > >> + LOG_ER("DTM: DTM_SOCK_SND_RCV_BUF_SIZE > >> must be greater than > >> rmem_default/wmem_default sysctl of dtmd.conf"); > >> + return -1; > >> + } > >> + > >> + tag = 0; > >> + tag_len = 0; > >> + > >> + } > >> + > >> + if (strncmp(line, "DTM_TCP_NODELAY_FLAG=", > >> strlen("DTM_TCP_NODELAY_FLAG=")) == 0) { > >> + tag_len = strlen("DTM_TCP_NODELAY_FLAG="); > >> + config->tcp_nodelay_flag = atoi(&line[tag_len]); > >> + if (config->tcp_nodelay_flag < 0 || > >> config->tcp_nodelay_flag > 1) { > >> + LOG_ER("DTM: DTM_TCP_NODELAY_FLAG > >> needs to be 0 or 1 of dtmd.conf "); > >> + return -1; > >> + } > >> + tag = 0; > >> + tag_len = 0; > >> + > >> + } > >> } > >> > >> memset(line, 0, DTM_MAX_TAG_LEN); > >> diff --git a/osaf/services/infrastructure/dtms/include/dtm.h > >> b/osaf/services/infrastructure/dtms/include/dtm.h > >> --- a/osaf/services/infrastructure/dtms/include/dtm.h > >> +++ b/osaf/services/infrastructure/dtms/include/dtm.h > >> @@ -37,6 +37,8 @@ extern uint8_t initial_discovery_phase; > >> #define m_NODE_DISCOVERY_TASKNAME "NODE_DISCOVERY" > >> #define m_NODE_DISCOVERY_STACKSIZE NCS_STACKSIZE_HUGE > >> > >> +/* The default value of SO_RCVBUF & SO_SNDBUF , it is set by the > >> rmem_default/wmem_default */ > >> +#define DTM_SOCK_SND_RCV_BUF_SIZE 126976 > >> #define DTM_MAX_TAG_LEN 256 > >> > >> typedef enum { > >> diff --git a/osaf/services/infrastructure/dtms/include/dtm_cb.h > >> b/osaf/services/infrastructure/dtms/include/dtm_cb.h > >> --- a/osaf/services/infrastructure/dtms/include/dtm_cb.h > >> +++ b/osaf/services/infrastructure/dtms/include/dtm_cb.h > >> @@ -90,6 +90,8 @@ typedef struct dtm_internode_cb { > >> int comm_keepidle_time; > >> int comm_keepalive_intvl; > >> int comm_keepalive_probes; > >> + int32_t sock_snd_rcv_buf_size; /* The value of SO_RCVBUF & SO_SNDBUF */ > >> + uint32_t tcp_nodelay_flag; /* The value of TCP_NODELAY Flag */ > >> SYSF_MBX mbx; > >> int mbx_fd; > >> } DTM_INTERNODE_CB; > >> @@ -116,6 +118,7 @@ typedef struct dtm_intranode_cb { > >> SYSF_MBX mbx; > >> int mbx_fd; > >> int sock_domain; > >> + int32_t sock_snd_rcv_buf_size; /* The value of SO_RCVBUF & SO_SNDBUF */ > >> } DTM_INTRANODE_CB; > >> > >> extern DTM_INTRANODE_CB *dtm_intranode_cb; > >> diff --git a/osaf/services/infrastructure/dtms/include/dtm_intra_disc.h > >> b/osaf/services/infrastructure/dtms/include/dtm_intra_disc.h > >> --- a/osaf/services/infrastructure/dtms/include/dtm_intra_disc.h > >> +++ b/osaf/services/infrastructure/dtms/include/dtm_intra_disc.h > >> @@ -17,8 +17,6 @@ > >> #ifndef DTM_INTRA_DISC_H > >> #define DTM_INTRA_DISC_H > >> > >> -#define DTM_INTRANODE_MSG_SIZE 1400 > >> -#define DTM_INTERNODE_MSG_SIZE DTM_INTRANODE_MSG_SIZE > >> > >> /* 2 -len(0), 4 - iden(2), 1- ver(6), 1-msg type(7), 4- server_type (8), > >> 4 -server lower(12), 4 -server lower(16), 8 -ref(20), 4 > >> - nodeid(28), ------------------------------------------------------------------------------ "Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE Instantly run your Selenium tests across 300+ browser/OS combos. Get unparalleled scalability from the best Selenium testing platform available. Simple to use. Nothing to install. Get started now for free." http://p.sf.net/sfu/SauceLabs _______________________________________________ Opensaf-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/opensaf-devel
