Understanding Send Latency
The overall latency of the <xref:OnixS.Cme.ILink3.Session.Send(OnixS.SimpleBinaryEncoding.IMessage)> method includes all latencies of all operations inside this method. The following sequence of operations are performed when the <xref:OnixS.Cme.ILink3.Session.Send(OnixS.SimpleBinaryEncoding.IMessage)> method is called:
- Invocation of the OutboundSessionMessage or OutboundApplicationMessage event handler.
- Writing necessary data (message content, timestamp, sequence numbers, etc.) to the session storage. For the File-Based Session Storage, it is a costly operation, and it can take tens of microseconds. For the Asynchronous File-based Session Storage, it is far cheaper because the actual writing is performed in a separate thread. And lastly, for the Memory-Based Session Storage it is a low-cost operation because data is stored in the memory, not in the file system. Please note that if the LogBeforeSending option is false, then the logging is performed after sending.
- Invocation of the system
send
function. In practice, the latency of the systemsend
function can be about 5-10 microseconds what depends on the size of send data, network workload, network software/hardware, etc. For example, you can significantly decrease this latency by using Solarflare network cards and the user-space "Onload" TCP stack implementation. - If the system
send
function fails, then the unsent message is stored in the sending queue for the subsequent sending by the sending thread.