This disables sendi, since it may do 0-byte requests and it still has
another bug. This also causes 0-byte requests to be treated as a buffer error, causing the base request to be requeued. On Cray XT, it may be temporarily impossible to make allocations for buffer requests, as the default stack size is small (8 MB) and there is no true swap device. Even with the stack size increased, there will be cases in which this condition recurs. One possibility is to make the buffer allocations off of the heap; but, this does not change the fact that eventually an out-of-memory condition will occur and we need to support multiple receives in transit, a condition for which the available buffer space may change. On the other hand, if we switch to allocating the buffer space from the heap, we will need to return an error when the allocation fails and there are no other buffers in transit. This commit was SVN r19981.
Этот коммит содержится в:
родитель
e84af7920e
Коммит
07f7f00c91
@ -64,7 +64,7 @@ mca_btl_portals_module_t mca_btl_portals_module = {
|
|||||||
mca_btl_portals_prepare_src,
|
mca_btl_portals_prepare_src,
|
||||||
mca_btl_portals_prepare_dst,
|
mca_btl_portals_prepare_dst,
|
||||||
mca_btl_portals_send,
|
mca_btl_portals_send,
|
||||||
mca_btl_portals_sendi,
|
NULL, /* mca_btl_portals_sendi, */
|
||||||
mca_btl_portals_put,
|
mca_btl_portals_put,
|
||||||
mca_btl_portals_get,
|
mca_btl_portals_get,
|
||||||
mca_btl_base_dump,
|
mca_btl_base_dump,
|
||||||
|
@ -594,14 +594,19 @@ mca_btl_portals_component_progress(void)
|
|||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (ev.rlength != ev.mlength) {
|
if ((ev.rlength != ev.mlength) || (ev.rlength == 0)) {
|
||||||
/* other side received message but truncated to 0.
|
/* other side received message but truncated to 0.
|
||||||
This should only happen for unexpected
|
This should only happen for unexpected
|
||||||
messages, and only when the other side has no
|
messages, and only when the other side has no
|
||||||
buffer space available for receiving */
|
buffer space available for receiving */
|
||||||
opal_output_verbose(50,
|
|
||||||
mca_btl_portals_component.portals_output,
|
if (ev.rlength == 0)
|
||||||
"message was dropped. Trying again");
|
opal_output_verbose(10, mca_btl_portals_component.portals_output,
|
||||||
|
"PTL_EVENT_ACK: ev.rlength=%d ev.mlength=%d: requeueing request",
|
||||||
|
ev.rlength, ev.mlength);
|
||||||
|
else
|
||||||
|
opal_output_verbose(50, mca_btl_portals_component.portals_output,
|
||||||
|
"message was dropped. Trying again");
|
||||||
|
|
||||||
mca_btl_portals_send(&mca_btl_portals_module.super,
|
mca_btl_portals_send(&mca_btl_portals_module.super,
|
||||||
frag->endpoint,
|
frag->endpoint,
|
||||||
|
@ -136,6 +136,8 @@ int mca_btl_portals_sendi(struct mca_btl_base_module_t* btl_base,
|
|||||||
int ret;
|
int ret;
|
||||||
size_t max_data;
|
size_t max_data;
|
||||||
|
|
||||||
|
opal_output(0, "mca_btl_portals_sendi status is incomplete");
|
||||||
|
abort();
|
||||||
assert(&mca_btl_portals_module == (mca_btl_portals_module_t*) btl_base);
|
assert(&mca_btl_portals_module == (mca_btl_portals_module_t*) btl_base);
|
||||||
*des = NULL;
|
*des = NULL;
|
||||||
if (OPAL_THREAD_ADD32(&mca_btl_portals_module.portals_outstanding_ops, 1) >
|
if (OPAL_THREAD_ADD32(&mca_btl_portals_module.portals_outstanding_ops, 1) >
|
||||||
|
Загрузка…
Ссылка в новой задаче
Block a user