<html 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;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style></head><body lang=EN-US link=blue vlink="#954F72"><div class=WordSection1><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.</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</p><p class=MsoNormal>On client side </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</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 </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:</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='mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal style='border:none;padding:0in'><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"</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;text-justify:inter-ideograph'><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;text-justify:inter-ideograph'><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>