<div dir="ltr">Good afternoon everyone!<div><br></div><div>My group works on implementing of new libfabric provider for our HPC interconnect. Our current main goal is to run MPICH and OpenMPI over this provider.</div><div><br></div><div>The problem is, that this NIC haven't any software and hardware rx/tx queues for send/recv operations. We're decided to implement it on libfabric provider-level. So, I'm looking for data structure for queue store and processing.</div><div><br></div><div>I took a look in sockets provider code. As far as I understand, tx_ctx stores pointers to all information (flags, data, src_address and etc.) about every message to send in ring buffer, but rx_ctx stores every rx_entry in double-linked list. What was the motivation for choosing such data structures when implementing these queues are different used to process tx and rx? </div><div><br></div><div>Maybe you can give advice on the implementation of queues or give some useful information on this topic?<br></div><div><br></div><div>The second problem is about suitable way for progress model. For CPU performance reasons I want to choose FI_PROGRESS_MANUAL as primary mode for the processing of an asynchronous requests, but I do not quite understand how an application thread provides data progress. For example, is it enough to call fi_cq_read() from MPI implementation always when it wants to make a progress?</div><div><br></div><div>I will be extremely grateful for any help and advice on these issues!<br></div><div><br></div><div>BR,</div><div>Mikhail Khalilov</div></div>