• Version 1.7.1
Show / Hide Table of Contents

Understanding Send Latency

The overall latency of the Send(IMessage) method includes all latencies of all operations inside this method. The following sequence of operations are performed when the Send(IMessage) method is called:

  • 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 system send 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.

The latency of Send(IMessage) method (as any other function) depends on the frequency with which you call it. When you call a function infrequently, the function path and associated data structures will not be in a processor cache, and this can increase the function latency. However, if you call a function frequently, then you can avoid cache misses and keep the function path fast. For this purpose, there is the WarmUp(IMessage, SocketFlags) method.

In this article
Back to top Copyright © Onix Solutions.
Generated by DocFX