US 9,811,500 B2
Low latency device interconnect using remote memory access with segmented queues
Gregory Arthur Allen, Oakville (CA); and Tudor Morosan, Toronto (CA)
Assigned to TSX INC., Toronto (CA)
Appl. No. 14/891,809
Filed by TSX INC., Toronto (CA)
PCT Filed Jun. 12, 2014, PCT No. PCT/CA2014/000495
§ 371(c)(1), (2) Date Nov. 17, 2015,
PCT Pub. No. WO2014/197974, PCT Pub. Date Dec. 18, 2014.
Claims priority of provisional application 61/834,615, filed on Jun. 13, 2013.
Prior Publication US 2016/0103783 A1, Apr. 14, 2016
Int. Cl. G06F 15/167 (2006.01); H04L 12/64 (2006.01); H04L 12/06 (2006.01); H04L 12/879 (2013.01); H04L 29/08 (2006.01); H04L 12/863 (2013.01)
CPC G06F 15/167 (2013.01) [H04L 12/06 (2013.01); H04L 12/6418 (2013.01); H04L 47/6295 (2013.01); H04L 49/901 (2013.01); H04L 67/104 (2013.01)] 26 Claims
OG exemplary drawing
1. A method for low-latency data communication, the method comprising:
writing messages at a first computing device to message buffers in a circular message queue as indicated by an advancing tail pointer, the circular message queue mapped to remote memory in a second computing device using a remote peer-to-peer data link, the message buffers divided into at least two queue segments, each queue segment having two or more message buffers, wherein an advancing head pointer indicates a message buffer of one of the queue segments;
reading messages at the second computing device from the message buffers of the circular message queue as indicated by the advancing head pointer, including reading a message from a next message buffer when determining that the next message buffer has been newly written to since the head pointer last indicated the next message buffer;
advancing the tail pointer at the first computing device from one message buffer to another message buffer within a same queue segment after writing a message to the one message buffer; and
advancing the tail pointer at the first computing device from a message buffer of a current queue segment to a message buffer of a next queue segment when determining that the head pointer does not indicate any of the message buffers of the next queue segment.