For performance, try to send the oob/tcp message a few times before dropping back into the event library
Signed-off-by: Ralph Castain <rhc@open-mpi.org>
Этот коммит содержится в:
родитель
e879d2910a
Коммит
b661275dba
@ -75,6 +75,8 @@
|
|||||||
#include "orte/mca/oob/tcp/oob_tcp_common.h"
|
#include "orte/mca/oob/tcp/oob_tcp_common.h"
|
||||||
#include "orte/mca/oob/tcp/oob_tcp_connection.h"
|
#include "orte/mca/oob/tcp/oob_tcp_connection.h"
|
||||||
|
|
||||||
|
#define OOB_SEND_MAX_RETRIES 3
|
||||||
|
|
||||||
void mca_oob_tcp_queue_msg(int sd, short args, void *cbdata)
|
void mca_oob_tcp_queue_msg(int sd, short args, void *cbdata)
|
||||||
{
|
{
|
||||||
mca_oob_tcp_send_t *snd = (mca_oob_tcp_send_t*)cbdata;
|
mca_oob_tcp_send_t *snd = (mca_oob_tcp_send_t*)cbdata;
|
||||||
@ -105,7 +107,7 @@ void mca_oob_tcp_queue_msg(int sd, short args, void *cbdata)
|
|||||||
static int send_msg(mca_oob_tcp_peer_t* peer, mca_oob_tcp_send_t* msg)
|
static int send_msg(mca_oob_tcp_peer_t* peer, mca_oob_tcp_send_t* msg)
|
||||||
{
|
{
|
||||||
struct iovec iov[2];
|
struct iovec iov[2];
|
||||||
int iov_count;
|
int iov_count, retries = 0;
|
||||||
ssize_t remain = msg->sdbytes, rc;
|
ssize_t remain = msg->sdbytes, rc;
|
||||||
|
|
||||||
OPAL_TIMING_EVENT((&tm_oob, "to %s %d bytes",
|
OPAL_TIMING_EVENT((&tm_oob, "to %s %d bytes",
|
||||||
@ -146,12 +148,20 @@ static int send_msg(mca_oob_tcp_peer_t* peer, mca_oob_tcp_send_t* msg)
|
|||||||
* but let the event lib cycle so other messages
|
* but let the event lib cycle so other messages
|
||||||
* can progress while this socket is busy
|
* can progress while this socket is busy
|
||||||
*/
|
*/
|
||||||
|
++retries;
|
||||||
|
if (retries < OOB_SEND_MAX_RETRIES) {
|
||||||
|
goto retry;
|
||||||
|
}
|
||||||
return ORTE_ERR_RESOURCE_BUSY;
|
return ORTE_ERR_RESOURCE_BUSY;
|
||||||
} else if (opal_socket_errno == EWOULDBLOCK) {
|
} else if (opal_socket_errno == EWOULDBLOCK) {
|
||||||
/* tell the caller to keep this message on active,
|
/* tell the caller to keep this message on active,
|
||||||
* but let the event lib cycle so other messages
|
* but let the event lib cycle so other messages
|
||||||
* can progress while this socket is busy
|
* can progress while this socket is busy
|
||||||
*/
|
*/
|
||||||
|
++retries;
|
||||||
|
if (retries < OOB_SEND_MAX_RETRIES) {
|
||||||
|
goto retry;
|
||||||
|
}
|
||||||
return ORTE_ERR_WOULD_BLOCK;
|
return ORTE_ERR_WOULD_BLOCK;
|
||||||
} else {
|
} else {
|
||||||
/* we hit an error and cannot progress this message */
|
/* we hit an error and cannot progress this message */
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user