Pending connect state
While working on my thesis I came across the original proposal for the states of the Virtual Interface Architecture. See image at the bottom of this issue.
Right now we only support STARTED
and CONNECTED
which is not entirely right. In order for the Infiniband node to be able to receive data immediately after connection, we start filling the Queue Pair (Virtual Interface in this image) with Work Requests as soon as it is created. To be able to do that, at the receive side, we set the state to CONNECTED
while it should actually be PEND_CONNECT
. So:
Pseudocode of situation now:
ib_read()
{
if state == CONNECTED {
// fill receive queue if not full
// try to read from the buffers
}
}
Pseudocode of new, better situation
ib_read()
{
if state == CONNECTED || state == PEND_CONNECT
// fill receive queue if not full
if state == CONNECTED
// try to read from the buffers
}
@stvogel What do you think. I think the proper way to handle this, is to add the pending connect state. It should not influence any other code, but is actually the right way to handle Virtual Interface Architectures.