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 acknowledgement. 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 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 the result its delay was increased in single-threaded mode. In comparison with previous release performance degradation can be observed on the above plots because 333pxbenchmark tests are running in single threaded mode. Please find parser benchmarks for different number of threads on the below chart.