One of the important metrics of a FIX engine is the tick-to-trade latency. In order to estimate the tick-to-trade latency we use a ping-pong benchmark and measure the response time distribution. That is, the client sends NewOrderSingle messages at an approximately constant rate, and the server sends an acknowledgment. We collect the response time, that is is the time interval between sending the message and receiving the reply measured on the client-side. Both the client and the server used in the benchmark are FIX Antenna based applications with engine configurations tuned for minimizing delays both in the TCP/IP stack and FIX Antenna itself. Also, we use kernel bypass TCP/IP stack with an appropriate network card.
Benchmark results (FIX Antenna C++ 2.27.1_421)
- The response time is extremely sensitive to the hardware used, operating system configuration, background load.
In particular, the median response time varies from run to run by approximately +/- 1.4% (even when running on a carefully tuned system), as the above plot illustrates.
- Also, FIX Antenna runs on general-purpose operating systems with common/default C++ runtimes, thus the arbitrary large response times are possible. However such delays are very rare, as the following plot illustrates (for convenience log-log scale is used). For instance, response time longer than 140 microseconds happen once per 1000 messages, and response time longer than 247 microseconds happen once per 10000 messages.
- FIX message parser scalability was improved in a multi-threaded environment, but as a result, its delay was increased in single-threaded mode. In comparison with the previous release, performance degradation can be observed on the above plots because benchmark tests are running in single-threaded mode. Please find parser benchmarks for different numbers of threads on the below chart.