1
1

set socket options to improve oob performance

This commit was SVN r7934.
Этот коммит содержится в:
Tim Woodall 2005-10-31 16:21:11 +00:00
родитель 2ec5fa5d24
Коммит a891db81e9
4 изменённых файлов: 52 добавлений и 1 удалений

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

@ -200,6 +200,10 @@ int mca_oob_tcp_component_open(void)
mca_oob_tcp_param_register_str("include", NULL);
mca_oob_tcp_component.tcp_exclude =
mca_oob_tcp_param_register_str("exclude", NULL);
mca_oob_tcp_component.tcp_sndbuf =
mca_oob_tcp_param_register_int("sndbuf", 128*1024);
mca_oob_tcp_component.tcp_rcvbuf =
mca_oob_tcp_param_register_int("rcvbuf", 128*1024);
/* initialize state */
mca_oob_tcp_component.tcp_listen_sd = -1;
@ -260,6 +264,9 @@ static void mca_oob_tcp_accept(void)
return;
}
/* setup socket options */
mca_oob_tcp_set_socket_options(sd);
/* log the accept */
if(mca_oob_tcp_component.tcp_debug) {
opal_output(0, "[%lu,%lu,%lu] mca_oob_tcp_accept: %s:%d\n",
@ -291,6 +298,11 @@ static int mca_oob_tcp_create_listen(void)
opal_output(0,"mca_oob_tcp_component_init: socket() failed with errno=%d", ompi_socket_errno);
return OMPI_ERROR;
}
/* setup socket options */
mca_oob_tcp_set_socket_options(mca_oob_tcp_component.tcp_listen_sd);
/* bind address */
memset(&inaddr, 0, sizeof(inaddr));
inaddr.sin_family = AF_INET;
inaddr.sin_addr.s_addr = INADDR_ANY;

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

@ -299,6 +299,11 @@ void mca_oob_tcp_registry_callback(
orte_gpr_notify_data_t* data,
void* cbdata);
/**
* Setup socket options
*/
void mca_oob_tcp_set_socket_options(int sd);
/**
* OOB TCP Component
@ -316,6 +321,8 @@ struct mca_oob_tcp_component_t {
opal_free_list_t tcp_peer_free; /**< free list of peers */
int tcp_peer_limit; /**< max size of tcp peer cache */
int tcp_peer_retries; /**< max number of retries before declaring peer gone */
int tcp_sndbuf; /**< socket send buffer size */
int tcp_rcvbuf; /**< socket recv buffer size */
opal_free_list_t tcp_msgs; /**< free list of messages */
opal_event_t tcp_send_event; /**< event structure for sends */
opal_event_t tcp_recv_event; /**< event structure for recvs */

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

@ -180,8 +180,8 @@ int mca_oob_tcp_msg_complete(mca_oob_tcp_msg_t* msg, orte_process_name_t * peer)
msg->msg_ucnt,
msg->msg_hdr.msg_tag,
msg->msg_cbdata);
MCA_OOB_TCP_MSG_RETURN(msg);
OPAL_THREAD_LOCK(&mca_oob_tcp_component.tcp_lock);
MCA_OOB_TCP_MSG_RETURN(msg);
}
OPAL_THREAD_UNLOCK(&mca_oob_tcp_component.tcp_lock);

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

@ -292,6 +292,9 @@ static int mca_oob_tcp_peer_start_connect(mca_oob_tcp_peer_t* peer)
return OMPI_ERR_UNREACH;
}
/* setup socket options */
mca_oob_tcp_set_socket_options(peer->peer_sd);
/* setup event callbacks */
mca_oob_tcp_peer_event_init(peer);
@ -943,3 +946,32 @@ void mca_oob_tcp_peer_dequeue_msg(mca_oob_tcp_peer_t* peer, mca_oob_tcp_msg_t* m
}
/**
* Set socket buffering
*/
void mca_oob_tcp_set_socket_options(int sd)
{
int optval;
#if defined(TCP_NODELAY)
optval = 1;
if(setsockopt(sd, IPPROTO_TCP, TCP_NODELAY, (char *)&optval, sizeof(optval)) < 0) {
opal_output(0, "[%s:%d] setsockopt(TCP_NODELAY) failed with errno=%d", __FILE__, __LINE__, ompi_socket_errno);
}
#endif
#if defined(SO_SNDBUF)
if(mca_oob_tcp_component.tcp_sndbuf > 0 &&
setsockopt(sd, SOL_SOCKET, SO_SNDBUF, (char *)&mca_oob_tcp_component.tcp_sndbuf, sizeof(int)) < 0) {
opal_output(0, "[%s:%d] setsockopt(SO_SNDBUF) failed with errno %d", __FILE__, __LINE__, ompi_socket_errno);
}
#endif
#if defined(SO_RCVBUF)
if(mca_oob_tcp_component.tcp_rcvbuf > 0 &&
setsockopt(sd, SOL_SOCKET, SO_RCVBUF, (char *)&mca_oob_tcp_component.tcp_rcvbuf, sizeof(int)) < 0) {
opal_output(0, "[%s:%d] setsockopt(SO_RCVBUF) failed with errno %d", __FILE__, __LINE__, ompi_socket_errno);
}
#endif
}