<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal"><span style="color:#1F497D">Andreas,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">> </span><b>Input/output error,  local protection error</b><span style="color:#1F497D"><o:p></o:p></span></p>
<p class="MsoNormal"><a name="_MailEndCompose"><span style="color:#1F497D"><o:p> </o:p></span></a></p>
<p class="MsoNormal"><span style="color:#1F497D">Are the local buffers that’s used for data transfer operations registered using fi_mr_reg? Verbs provider requires memory registration. When you specify support for FI_MR_LOCAL mode bit (required by verbs provider)
 in hints, you guarantee that any buffer used for send /recv ops would be registered.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">I think the “remote operation error” on the server side should go away if the above issue is fixed.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Thanks,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Arun.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><a name="_____replyseparator"></a><b>From:</b> Libfabric-users [mailto:libfabric-users-bounces@lists.openfabrics.org]
<b>On Behalf Of </b>Andreas<br>
<b>Sent:</b> Saturday, December 08, 2018 7:01 AM<br>
<b>To:</b> libfabric-users@lists.openfabrics.org<br>
<b>Subject:</b> Re: [libfabric-users] verbs provider completion queue: "fi_cq_sread:Resource temporarily unavailable"<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span lang="DE">Little update:<o:p></o:p></span></p>
<p class="MsoNormal">I extended the error handling for the CQ.<o:p></o:p></p>
<p class="MsoNormal">The process fails on establishing the final stage of a handshake, where the server hands its rdma keys to the client<o:p></o:p></p>
<p class="MsoNormal">On client side <o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="font-size:10.0pt">ssize_t rret;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">    rret = fi_recv(ep, ctrl_buff, sizeof(keys), fi_mr_desc(mr), 0, NULL);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">    if (rret) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">        perror("fi_recv");<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">        return (int)rret;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">    }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">    ret = fi_connect(ep, fi->dest_addr, NULL, 0);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">    if (ret) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">        perror("fi_connect");<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">        return ret;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">    }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">    struct fi_eq_cm_entry entry;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">    uint32_t event;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">    rret = fi_eq_sread(eq, &event, &entry, sizeof(entry), -1, 0);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">    if (rret > 0){<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">        if (event != FI_CONNECTED) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">            fprintf(stderr, "invalid event %u\n", event);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">            return -1;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">        }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">    }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">    else if (rret != -FI_EAGAIN) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">        struct fi_eq_err_entry err_entry;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">        fi_eq_readerr(eq, &err_entry, 0);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">        printf("[%d] %s %s \n", thread, fi_strerror(err_entry.err), fi_eq_strerror(eq, err_entry.prov_errno, err_entry.err_data, NULL, 0));<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">        return ret;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">    }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">    struct fi_cq_msg_entry comp;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">    ret = fi_cq_sread(cq, &comp, 1, NULL, -1);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">    if (ret != 1) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">                               struct fi_cq_err_entry err_entry;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">        fi_cq_readerr(cq, &err_entry, 0);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">        printf("[%d] %s %s \n", thread, fi_strerror(err_entry.err), fi_cq_strerror (cq, err_entry.prov_errno, err_entry.err_data, NULL, 0));<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">        perror("fi_cq_sread");<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">        return ret;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">    }<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">it prints<o:p></o:p></p>
<p class="MsoNormal"><b>Input/output error,  local protection error<o:p></o:p></b></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">While server side <o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="font-size:10.0pt">ret = fi_accept(ep, NULL, 0);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">        if (ret) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">            perror("fi_accept");<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">            return ret;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">        }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">        rret = fi_eq_sread(eq, &event, &entry, sizeof(entry), -1, 0);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">        if (rret > 0) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">            if (event != FI_CONNECTED) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">                fprintf(stderr, "invalid event %u\n", event);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">                return (int) rret;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">            }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">        } else if (rret != -FI_EAGAIN) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">            struct fi_eq_err_entry err_entry;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">            fi_eq_readerr(eq, &err_entry, 0);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">            printf("%s %s \n", fi_strerror(err_entry.err),<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">                   fi_eq_strerror(eq, err_entry.prov_errno, err_entry.err_data, NULL, 0));<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">            return (int) rret;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">        }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">        memcpy(ctrl_buff, &keys, sizeof(keys));<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">        rret = fi_send(ep, ctrl_buff, sizeof(keys), fi_mr_desc(mr), 0, NULL);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">        if (rret) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">            printf("fi_send: %s\n", fi_strerror((int) rret));<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">            return (int) rret;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">        }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">        struct fi_cq_msg_entry comp;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">                               ret = fi_cq_sread(cq, &comp, 1, NULL, -1);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">        if (ret < 1) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">            struct fi_cq_err_entry err_entry;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">                                               fi_cq_readerr(cq, &err_entry, 0);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">                                               printf("[%d] %s %s \n", thread, fi_strerror(err_entry.err), fi_cq_strerror(cq, err_entry.prov_errno, err_entry.err_data, NULL, 0));<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">                                               perror("fi_cq_sread");<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">                                               return ret;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt">        }<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">It prints:<o:p></o:p></p>
<p class="MsoNormal"><b>Input/output error remote operation error<o:p></o:p></b></p>
<p class="MsoNormal"><b><o:p> </o:p></b></p>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>Von: </b><a href="mailto:webmaster@i-need-change.org">Andreas</a><br>
<b>Gesendet: </b>Saturday, December 8, 2018 2:57 PM<br>
<b>An: </b><a href="mailto:libfabric-users@lists.openfabrics.org">libfabric-users@lists.openfabrics.org</a><br>
<b>Betreff: </b>[libfabric-users] verbs provider completion queue: "fi_cq_sread:Resource temporarily unavailable"<o:p></o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Hello everyone,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I could use some help with this issue. <o:p></o:p></p>
<p class="MsoNormal">That’s my little project I’m working on: <a href="https://github.com/germanafro/Libfabric_Benchmark">
https://github.com/germanafro/Libfabric_Benchmark</a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">A Benchmark one day hoping to achieve Bandwidths of up to 1TB/s though apparently I’m struggling with the basic setup still.
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I started testing and implementation from home with the sockets provider. So far everything seemed to work just fine, once I moved to my universities testcluster the sockets provider still does what it’s supposed to do but the transition
 to the verbs provider runs me into one bump after another :/ <o:p></o:p></p>
<p class="MsoNormal">The testcluster itself consist of ~40 linux nodes connected through ethernet and Infiniband switches.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">With the most recent issue of:  <b>fi_cq_sread: Resource temporarily unavailable</b><o:p></o:p></p>
<p class="MsoNormal" style="text-align:justify"><b>fi_cq_open(…) </b>and <b>fi_ep_bind(…)
</b>seem to be fine.<o:p></o:p></p>
<p class="MsoNormal" style="text-align:justify"><o:p> </o:p></p>
<p class="MsoNormal">Could it be my config or is this actually a temporary network issue? I tested several clusters.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">//Completion queue config<o:p></o:p></p>
<p class="MsoNormal">                cq_attr.size = 0;<o:p></o:p></p>
<p class="MsoNormal">                cq_attr.flags = 0;<o:p></o:p></p>
<p class="MsoNormal">                cq_attr.format = FI_CQ_FORMAT_MSG;<o:p></o:p></p>
<p class="MsoNormal">                cq_attr.wait_obj = FI_WAIT_UNSPEC;<o:p></o:p></p>
<p class="MsoNormal">                cq_attr.signaling_vector = 0;<o:p></o:p></p>
<p class="MsoNormal">                cq_attr.wait_cond = FI_CQ_COND_NONE;<o:p></o:p></p>
<p class="MsoNormal">                cq_attr.wait_set = NULL;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I appreciate the help and time,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Andreas<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>