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