1
1

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.
Этот коммит содержится в:
Kenneth Matney 2008-11-12 16:04:14 +00:00
родитель e84af7920e
Коммит 07f7f00c91
3 изменённых файлов: 12 добавлений и 5 удалений

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

@ -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) >