1
1

Add MCA parameter to enable/disable Nagle's algorithm on the TCP BTL.

This commit was SVN r15606.
Этот коммит содержится в:
Jeff Squyres 2007-07-25 12:21:00 +00:00
родитель 71d6c5b811
Коммит f4b117957d
3 изменённых файлов: 34 добавлений и 25 удалений

Просмотреть файл

@ -90,6 +90,9 @@ struct mca_btl_tcp_component_t {
ompi_free_list_t tcp_frag_eager; ompi_free_list_t tcp_frag_eager;
ompi_free_list_t tcp_frag_max; ompi_free_list_t tcp_frag_max;
ompi_free_list_t tcp_frag_user; ompi_free_list_t tcp_frag_user;
/* Do we want to use TCP_NODELAY? */
int tcp_use_nodelay;
}; };
typedef struct mca_btl_tcp_component_t mca_btl_tcp_component_t; typedef struct mca_btl_tcp_component_t mca_btl_tcp_component_t;

Просмотреть файл

@ -105,22 +105,26 @@ mca_btl_tcp_component_t mca_btl_tcp_component = {
static inline char* mca_btl_tcp_param_register_string( static inline char* mca_btl_tcp_param_register_string(
const char* param_name, const char* param_name,
const char* help_string,
const char* default_value) const char* default_value)
{ {
char *param_value; char *value;
int id = mca_base_param_register_string("btl","tcp",param_name,NULL,default_value); mca_base_param_reg_string(&mca_btl_tcp_component.super.btl_version,
mca_base_param_lookup_string(id, &param_value); param_name, help_string, false, false,
return param_value; default_value, &value);
return value;
} }
static inline int mca_btl_tcp_param_register_int( static inline int mca_btl_tcp_param_register_int(
const char* param_name, const char* param_name,
const char* help_string,
int default_value) int default_value)
{ {
int id = mca_base_param_register_int("btl","tcp",param_name,NULL,default_value); int value;
int param_value = default_value; mca_base_param_reg_int(&mca_btl_tcp_component.super.btl_version,
mca_base_param_lookup_int(id,&param_value); param_name, help_string, false, false,
return param_value; default_value, &value);
return value;
} }
@ -197,23 +201,25 @@ int mca_btl_tcp_component_open(void)
/* register TCP component parameters */ /* register TCP component parameters */
mca_btl_tcp_component.tcp_num_links = mca_btl_tcp_component.tcp_num_links =
mca_btl_tcp_param_register_int("links", 1); mca_btl_tcp_param_register_int("links", NULL, 1);
mca_btl_tcp_component.tcp_if_include = mca_btl_tcp_component.tcp_if_include =
mca_btl_tcp_param_register_string("if_include", ""); mca_btl_tcp_param_register_string("if_include", NULL, "");
mca_btl_tcp_component.tcp_if_exclude = mca_btl_tcp_component.tcp_if_exclude =
mca_btl_tcp_param_register_string("if_exclude", "lo"); mca_btl_tcp_param_register_string("if_exclude", NULL, "lo");
mca_btl_tcp_component.tcp_free_list_num = mca_btl_tcp_component.tcp_free_list_num =
mca_btl_tcp_param_register_int ("free_list_num", 8); mca_btl_tcp_param_register_int ("free_list_num", NULL, 8);
mca_btl_tcp_component.tcp_free_list_max = mca_btl_tcp_component.tcp_free_list_max =
mca_btl_tcp_param_register_int ("free_list_max", -1); mca_btl_tcp_param_register_int ("free_list_max", NULL, -1);
mca_btl_tcp_component.tcp_free_list_inc = mca_btl_tcp_component.tcp_free_list_inc =
mca_btl_tcp_param_register_int ("free_list_inc", 32); mca_btl_tcp_param_register_int ("free_list_inc", NULL, 32);
mca_btl_tcp_component.tcp_sndbuf = mca_btl_tcp_component.tcp_sndbuf =
mca_btl_tcp_param_register_int ("sndbuf", 128*1024); mca_btl_tcp_param_register_int ("sndbuf", NULL, 128*1024);
mca_btl_tcp_component.tcp_rcvbuf = mca_btl_tcp_component.tcp_rcvbuf =
mca_btl_tcp_param_register_int ("rcvbuf", 128*1024); mca_btl_tcp_param_register_int ("rcvbuf", NULL, 128*1024);
mca_btl_tcp_component.tcp_endpoint_cache = mca_btl_tcp_component.tcp_endpoint_cache =
mca_btl_tcp_param_register_int ("endpoint_cache", 30*1024); mca_btl_tcp_param_register_int ("endpoint_cache", NULL, 30*1024);
mca_btl_tcp_component.tcp_use_nodelay =
!mca_btl_tcp_param_register_int ("use_nagle", "Whether to use Nagle's algorithm or not (using Nagle's algorithm may increase short message latency)", 0);
mca_btl_tcp_module.super.btl_exclusivity = MCA_BTL_EXCLUSIVITY_LOW; mca_btl_tcp_module.super.btl_exclusivity = MCA_BTL_EXCLUSIVITY_LOW;
mca_btl_tcp_module.super.btl_eager_limit = 64*1024; mca_btl_tcp_module.super.btl_eager_limit = 64*1024;
@ -232,7 +238,7 @@ int mca_btl_tcp_component_open(void)
&mca_btl_tcp_module.super); &mca_btl_tcp_module.super);
mca_btl_tcp_component.tcp_disable_family = mca_btl_tcp_component.tcp_disable_family =
mca_btl_tcp_param_register_int ("disable_family", 0); mca_btl_tcp_param_register_int ("disable_family", NULL, 0);
return OMPI_SUCCESS; return OMPI_SUCCESS;
} }
@ -320,11 +326,11 @@ static int mca_btl_tcp_create(int if_kindex, const char* if_name)
/* allow user to specify interface bandwidth */ /* allow user to specify interface bandwidth */
sprintf(param, "bandwidth_%s", if_name); sprintf(param, "bandwidth_%s", if_name);
btl->super.btl_bandwidth = mca_btl_tcp_param_register_int(param, btl->super.btl_bandwidth); btl->super.btl_bandwidth = mca_btl_tcp_param_register_int(param, NULL, btl->super.btl_bandwidth);
/* allow user to override/specify latency ranking */ /* allow user to override/specify latency ranking */
sprintf(param, "latency_%s", if_name); sprintf(param, "latency_%s", if_name);
btl->super.btl_latency = mca_btl_tcp_param_register_int(param, btl->super.btl_latency); btl->super.btl_latency = mca_btl_tcp_param_register_int(param, NULL, btl->super.btl_latency);
if( i > 0 ) { if( i > 0 ) {
btl->super.btl_bandwidth >>= 1; btl->super.btl_bandwidth >>= 1;
btl->super.btl_latency <<= 1; btl->super.btl_latency <<= 1;
@ -332,11 +338,11 @@ static int mca_btl_tcp_create(int if_kindex, const char* if_name)
/* allow user to specify interface bandwidth */ /* allow user to specify interface bandwidth */
sprintf(param, "bandwidth_%s:%d", if_name, i); sprintf(param, "bandwidth_%s:%d", if_name, i);
btl->super.btl_bandwidth = mca_btl_tcp_param_register_int(param, btl->super.btl_bandwidth); btl->super.btl_bandwidth = mca_btl_tcp_param_register_int(param, NULL, btl->super.btl_bandwidth);
/* allow user to override/specify latency ranking */ /* allow user to override/specify latency ranking */
sprintf(param, "latency_%s:%d", if_name, i); sprintf(param, "latency_%s:%d", if_name, i);
btl->super.btl_latency = mca_btl_tcp_param_register_int(param, btl->super.btl_latency); btl->super.btl_latency = mca_btl_tcp_param_register_int(param, NULL, btl->super.btl_latency);
#if 0 && OMPI_ENABLE_DEBUG #if 0 && OMPI_ENABLE_DEBUG
BTL_OUTPUT(("interface %s instance %i: bandwidth %d latency %d\n", if_name, i, BTL_OUTPUT(("interface %s instance %i: bandwidth %d latency %d\n", if_name, i,
btl->super.btl_bandwidth, btl->super.btl_latency)); btl->super.btl_bandwidth, btl->super.btl_latency));

Просмотреть файл

@ -489,7 +489,7 @@ void mca_btl_tcp_set_socket_options(int sd)
{ {
int optval; int optval;
#if defined(TCP_NODELAY) #if defined(TCP_NODELAY)
optval = 1; optval = mca_btl_tcp_component.tcp_use_nodelay;
if(setsockopt(sd, IPPROTO_TCP, TCP_NODELAY, (char *)&optval, sizeof(optval)) < 0) { if(setsockopt(sd, IPPROTO_TCP, TCP_NODELAY, (char *)&optval, sizeof(optval)) < 0) {
BTL_ERROR(("setsockopt(TCP_NODELAY) failed: %s (%d)", BTL_ERROR(("setsockopt(TCP_NODELAY) failed: %s (%d)",
strerror(opal_socket_errno), opal_socket_errno)); strerror(opal_socket_errno), opal_socket_errno));