Environment
Sender Host:
- Intel(R) Xeon(R) CPU E5-2643 v3 @ 3.40GHz (2 CPU Hyper-Trading Enabled, 24 Cores)
- RAM 128 GB, 2133 MHz
- NIC Solarflare Communications SFC9120 (Firmware-version: 4.2.2.1003 rx1 tx1)
- Linux (CentOS 7.0.1406 kernel 3.10.0-123.el7.x86_64)
- SolarFlare driver version: 4.1.0.6734a
Receiver Host:
- Intel(R) Xeon(R) CPU E5-2687W v3 @ 3.10GHz (2 CPU Hyper-Trading Enabled, 20 Cores)
- RAM 128 GB, 2133 MHz
- NIC Solarflare Communications SFC9120 (Firmware-version: 4.2.2.1003 rx1 tx1)
- Linux (CentOS 7.0.1406 kernel 3.10.0-123.el7.x86_64)
- SolarFlare driver version: 4.1.0.6734a
Test scenario
The test scenario is the following:
- Two test servers are connected via 10GB link.
- An Initiator FIX session is established on the Sender Host , an Acceptor FIX session is established on the Receiver Host.
- The Initiator sends the New Order Single (35=D) message to the Acceptor; the Acceptor receives, validates and parses the message and sends the Execution report (35=8) message back to the Initiator.
During the test Round-trip time (RTT) latency is measured. The first measurement, t1, is made before the message is sent by the Initiator, the second, t2, is made after the received message is parsed by the Initiator.
RTT=t2-t1.
Test configurations
Properties | Balanced | Optimized | |
---|---|---|---|
Nagle's algorithm1 | ✔ | ||
Message validation parameters | validateCheckSum | ✔ | |
validateGarbledMessage | ✔ | ||
Storage type | Persistent | In memory | |
Queue type | Persistent | In memory |
Nagle's algorithm1 - the algorithm aimed at reducing the number of packets that need to be sent over the network. Nagle's algorithm works by combining a number of small outgoing messages and sending them all at once.
The following description will help to choose the most relevant FIX Antenna Java configuration:
- Balanced. It is the good starting point with balanced performance and security. Basic validation options are enabled to prevent corrupted message processing.
- Optimized. It is the configuration aimed at maximum performance. All validation options as well as message persistence are disabled, so it has to be used only in the fully controlled environment.
Results
FIX Antenna Java configurations comparison
Configuration | Balanced | Optimized |
---|---|---|
Latency values (microseconds) | ||
Min | 39,9 | 27,2 |
Max | 1442,3 | 1200,7 |
Average | 45,8 | 31,1 |
Latency distribution (percentiles) | ||
50% | 43 | 29,5 |
95% | 62,6 | 39,3 |
99% | 74,8 | 57,6 |
FIX Antenna Java 2.15.27 vs QuickFIX Java 1.6.3
The benchmark code was ported to QuickFIXJ:
Results can be compared in the following table:
Configuration | FIXAntenna Java balanced | FIXAntenna Java optimized | QuickFIXJ default | QuickFIXJ optimized |
---|---|---|---|---|
Latency values (microseconds) | ||||
Min | 39,9 | 27,2 | 85,7 | 70,0 |
Max | 1442,3 | 1200,7 | 3891,8 | 43565,9 |
Average | 45,8 | 31,1 | 258,0 | 258,0 |
Latency distribution (Percentiles) | ||||
50% | 43,0 | 29,5 | 113,5 | 114,3 |
95% | 62,6 | 39,3 | 182,1 | 165,0 |
99% | 74,8 | 57,6 | 2107,0 | 1336,4 |