Hi, On 5/20/2014 4:21 PM, Hans Feldt wrote: > But if you have strong requirement for this fine. But you must describe why > anyone ever wanted to enable Nagle Their no strong requirement , for now I will withdraw this if a practical use-case requirements comes I will re-consider it.
-AVM On 5/20/2014 4:21 PM, Hans Feldt wrote: > >> -----Original Message----- >> From: A V Mahesh [mailto:[email protected]] >> Sent: den 20 maj 2014 09:02 >> To: Hans Feldt >> Cc: [email protected]; [email protected] >> Subject: Re: [PATCH 3 of 3] dtm: make TCP_NODELAY set socket option >> configurable [#654] >> >> Hi Hans, >> >> On 5/20/2014 1:03 AM, Hans Feldt wrote: >>> Not sure I understand the use case for setting NODELAY to false. In the >>> code you have a comment about setting it to true which >> anyway is the default. So what is the benefit of setting it to false? >> [AVM] I came across one requirement where ,user don't want much >> frequent traffic in network , and doesn't bother about performance . > [Hans] Nagle is at core about tradeoffs between network utilization and > latency. In my opinion the MW should have as predictable latencies as > possible. Can we take responsibility for MW characteristics with > NODELAY=False? > >>> Since dtm is a system wide messaging service it will affect all services >>> for example AMFs healtchecks can be delayed sitting in a >> queue somewhere... >> [AVM] Opnesaf was working NODELAY to false previously , we have >> introduced NODELAY to true recently , so their wont be any problem. > [Hans] I doubt it was properly tested in production > > But if you have strong requirement for this fine. But you must describe why > anyone ever wanted to enable Nagle > > Thanks, > Hans > >> -AVM >> >>> Thanks, >>> Hans >>> >>>> -----Original Message----- >>>> From: [email protected] [mailto:[email protected]] >>>> Sent: den 19 maj 2014 06:41 >>>> To: [email protected]; Hans Feldt >>>> Cc: [email protected] >>>> Subject: [PATCH 3 of 3] dtm: make TCP_NODELAY set socket option >>>> configurable [#654] >>>> >>>> osaf/services/infrastructure/dtms/config/dtmd.conf | 11 ++++ >>>> osaf/services/infrastructure/dtms/dtm/dtm_node_sockets.c | 36 >>>> ++++++++-------- >>>> osaf/services/infrastructure/dtms/dtm/dtm_read_config.c | 15 ++++++ >>>> osaf/services/infrastructure/dtms/include/dtm_cb.h | 1 + >>>> 4 files changed, 45 insertions(+), 18 deletions(-) >>>> >>>> >>>> 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) >>>> >>>> Note :This path is on top of Hans Feldt published on 4-29-2014 10:58 AM. >>>> >>>> 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 >>>> @@ -85,3 +85,14 @@ DTM_TCP_KEEPALIVE_PROBES=2 >>>> #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_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 >>>> @@ -577,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 "); >>>> @@ -727,12 +727,12 @@ 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) { >>>> LOG_ER("DTM : set_keepalive() failed"); >>>> @@ -1296,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 >>>> @@ -96,6 +96,8 @@ void dtm_print_config(DTM_INTERNODE_CB * >>>> 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 : "); >>>> } >>>> >>>> @@ -223,6 +225,7 @@ int dtm_read_config(DTM_INTERNODE_CB * c >>>> 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; >>>> @@ -439,6 +442,18 @@ int dtm_read_config(DTM_INTERNODE_CB * c >>>> 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_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 >>>> @@ -91,6 +91,7 @@ typedef struct dtm_internode_cb { >>>> 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; ------------------------------------------------------------------------------ "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
