static int mix_inline_threshold = 256;
static int mix_eager_completion = 1;
static int mcm_ib_inline = 128;
-static int mcm_ib_signal_rate = 20;
+static int mcm_ib_signal_rate = 10;
static int mcm_counters = 0;
/* cm parameters */
else if (!strcasecmp("scif_listen_qlen", opt))
scif_listen_qlen = atoi(value);
else if (!strcasecmp("mcm_signal_rate", opt))
- mcm_signal = atoi(value);
+ mcm_ib_signal_rate = atoi(value);
else if (!strcasecmp("mcm_req_timeout_ms", opt))
mcm_rep_ms = atoi(value);
else if (!strcasecmp("mcm_rep_timeout_ms", opt))
mlog(0, "RDMA SCIF inline threshold %d\n", mix_inline_threshold);
mlog(0, "RDMA IB inline threshold %d\n", mcm_ib_inline);
mlog(0, "RDMA eager completion %d\n", mix_eager_completion);
+ mlog(0, "RDMA proxy signal rate %d\n", mcm_ib_signal_rate);
mlog(0, "Maximum message size %d MB\n", mix_max_msg_mb);
mlog(0, "CM msg queue depth %d\n", mcm_depth);
mlog(0, "CM msg completion signal rate %d\n", mcm_signal);
/* create new proxy CQ */
static int mix_cq_create(mcm_scif_dev_t *smd, dat_mix_cq_t *pmsg)
{
- int len, ret;
+ int len, ret, cq_len;
struct mcm_cq *new_mcq;
/* hdr already read, get operation data */
mlog(0, " ERR: ret %d, exp %d\n", ret, len);
return ret;
}
- mlog(8, " MIX_CQ_CREATE: cq_len = %d, mic_ctx = %Lx\n", pmsg->cq_len, pmsg->cq_ctx);
- if (m_cq_create(smd, pmsg->cq_len, &new_mcq))
+ cq_len = max(pmsg->cq_len, DAT_MIX_WR_MAX);
+ mlog(8, " MIX_CQ_CREATE: cq_len = %d,%d mic_ctx = %Lx\n", pmsg->cq_len, cq_len, pmsg->cq_ctx);
+
+ if (m_cq_create(smd, cq_len, &new_mcq))
goto err;
new_mcq->cq_ctx = pmsg->cq_ctx;
+ pmsg->cq_len = cq_len;
pmsg->cq_id = new_mcq->cq_id = new_mcq->entry.tid;
pmsg->cq_ctx = (uint64_t)new_mcq;
pmsg->hdr.status = MIX_SUCCESS;
if (l_start < smd->m_tl && l_end > smd->m_tl) {
MCNTR(smd->md, MCM_MX_MR_STALL);
- if (++retries == 1)
+ if (++retries == 1) {
write(smd->md->mc->tx_pipe[1], "w", sizeof("w")); /* signal tx_thread */
- mlog(0, " ERR: stalled, insufficient proxy memory, hd 0x%x, tl 0x%x, len %d, retries %d\n",
- smd->m_hd, smd->m_tl, seg_len, retries);
+ mlog(0, " Warning: stalled, low proxy memory, %x hd 0x%x tl 0x%x %x,"
+ " need 0x%x-0x%x ln %d, retrying %d\n",
+ smd->m_buf, smd->m_hd, smd->m_tl, smd->m_buf + smd->m_len,
+ l_start, l_end, seg_len, retries);
+ }
+ if (retries > 500) {
+ mlog(0, " ERROR: retries exhuasted, no proxy memory, %x hd 0x%x tl 0x%x %x,"
+ " need 0x%x-0x%x ln %d, retries = %d\n",
+ smd->m_buf, smd->m_hd, smd->m_tl, smd->m_buf + smd->m_len,
+ l_start, l_end, seg_len, retries);
+ ret = ENOMEM;
+ goto bail;
+ }
pthread_mutex_unlock(&smd->qplock);
sleep_usec(500);
pthread_mutex_lock(&smd->qplock);
MCNTR(smd->md, MCM_MX_MR_STALL);
if (++retries == 1)
write(smd->md->mc->tx_pipe[1], "w", sizeof("w")); /* signal tx_thread */
- mlog(0, " ERR: stalled, insufficient proxy memory, hd 0x%x, tl 0x%x, len %d retries %d\n",
+ mlog(0, " ERR: stalled, low proxy memory, hd 0x%x, tl 0x%x, len %d retries %d\n",
m_qp->m_hd, m_qp->m_tl, seg_len, retries);
pthread_mutex_unlock(&smd->qplock);
sleep_usec(500);