Approach
Benchmarks were run against two different versions of FIXEdge Java (1.10.2 and 1.9.0), and the results were compared in order to detect possible regressions.
Hardware
FIXEdge Machine
- 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
...
- One acceptor session is configured on the FIXEdge Java side.
- One initiator session is configured on the client application side.
The process:
- The client application connects to the FIXEdge Java instance and sends 1000000 FIX 4.2 messages at a rate of 50000 messages per second.
- FIXEdge Java receives the messages and matches them to the same session using business layer logic.
- FIXEdge Java responds to the client application with the same message via the same TCP/IP connection (the same session).
- The client application collects the response time histogram.
- The process is repeated 5 times for each FIXEdge Java release version.
The response time measured by the client application is the difference between timestamps:
- t1 - timestamp is taken right before sending a message to the socket
- t2 - timestamp is taken right after receiving the same message from the socket (from FIXEdge)
So the round-trip time formula is: RTT = t2 - t1 and the measurement unit is microseconds.
The test scenario diagram:
Drawio border false diagramName FIXEdge Java Test Scenario simpleViewer false width 600 links auto tbstyle hidden diagramDisplayName lbox false diagramWidth 540 revision 1
Results
The performance of the FIXEdge Java 1.10.2 version is almost the same as the performance of the FIXEdge 1.9.0 version. There is no performance degradation.
FEJ 1.9.0, usec | FEJ 1.10.2, usec | |
---|---|---|
Min | 9.064 | 9.112 |
Max | 205.183 | 209.663 |
Median | 9.495 | 9.671 |
Average | 9.7413 | 9.97869 |
50% | 9.495 | 9.671 |
75% | 9.575 | 9.815 |
90% | 9.671 | 10.039 |
95% | 9.743 | 10.183 |
99% | 11.087 | 11.399 |
99.9% | 113.215 | 136.959 |
99.99% | 190.207 | 195.071 |