The biggest challenge is to move away from the poll-based execution model
previously embedded in the implementation. For example, Shenango can't
afford to drive the execution of the transport by calling Transport::poll
in a busy loop. Also, Shenango needs to allow users to block on a socket
waiting for incoming messages.
Another refactoring that results in small code changes all over the place
is the Driver::Packet interface. The old interface cannot prevent the
driver from modifying the payload (e.g., prepend L3 headers). This will
lead to corrupted message when the packet needs to be retransmitted.
List of major changes:
CHoma: provide C-bindings of the Homa APIs (Shenango is written in C)
Shenango: implement Shenango Driver, MailboxDir, and Mailbox
TransportPoller: extract poll-based execution model out of the Transport
SimpleMailboxDir: a simple reference implementation for Homa::MailboxDir
Driver::Packet: a new packet interface to eliminate the awkward PacketSpec;
this is used to provide an immutable view of the packet to the transport
(driver can prepend headers to the payload w/o affecting the transport)
Sender: add a couple of user-defined callbacks (Shenango currently relies
on them to wake up blocking threads)
The biggest challenge is to move away from the poll-based execution model previously embedded in the implementation. For example, Shenango can't afford to drive the execution of the transport by calling Transport::poll in a busy loop. Also, Shenango needs to allow users to block on a socket waiting for incoming messages.
Another refactoring that results in small code changes all over the place is the Driver::Packet interface. The old interface cannot prevent the driver from modifying the payload (e.g., prepend L3 headers). This will lead to corrupted message when the packet needs to be retransmitted.
List of major changes: