Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

Overview

FIX Antenna C++ performance was measured using the sample from the FA package (samples\Benchmark\Latency2). Configuration properties can also be found in the package.

You can reproduce the measurement on your hardware by compiling and executing the sample described above using the following instruction:

How to measure FA performance using the FA package sample

The following instruction provides the steps to measure the FIX Antenna C++ performance using the Benchmark samples on the FA package.

...

  1. Run the makefile.ind to compile all samples.
  2. Go to the \Samples\Benchmark\Latency2\bin folder.
    Open the settings.sh script and change the IP address from the localhost to the IP of the Server Host in the ServerAdress parameter.

    On the Server side run the run.Server.<configuration_name>.sh script and on the Client side - the run.Client.<configuration_name>.sh script. As soon as both of them are executed, the RTT is automatically measured. The latency.csv file with results will appear in the same folder.

    Note

    In the optimized.hard configuration the number of cores used by the FIX sessions is directly written in the configuration. Please change it according to your machines. It should be changed in the settings.sh file both in the TasksetServerCores and TasksetClientCores (please see the picture above) parameters. 

    Note

    In the optimized.balanced.onload configuration the Solarflare OpenOnload profile is specified. Please specify your existing configuration or set up the new one in the OpenOnload. It should be changed in the settings.sh file both in the OnloadServerProfile and OnloadClientProfile (please see the picture above) parameters. 

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

...

  • 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:

...

During the test Round-trip time (RTT) 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
DefaultAggressiveBalancedOptimized.hard.spinBalanced.onloadOptimized.hard
Prepared messages1
NoNoNoYesNoYes
Affinity
NoNoYesNoYesYes
Thread Pool or Aggressive Mode
Thread Pool
(10 Threads)
Aggressive Mode2Aggressive ModeAggressive ModeAggressive ModeAggressive Mode
Message validation parametersIgnoreUnknownFields





ProhibitUnknownTags
CheckDuplicateTags
MessageMustBeValidated



VerifyRepeatingGroupBounds



Validation.CheckRequiredGroupFields



Validation.VerifyTagsValues



Validation.ProhibitTagsWithoutValue



Storage type
PersistentMM3PersistentMMPersistentMMPersistentMMPersistentMMPersistentMM
Solarflare OpenOnload4
NoNoNoNoYesYes

...

  • Default. It is the good quick start variant with balanced performance and security. The configuration may be effectively applied both to the Sender Host and the Receiver Host.
  • Aggressive. It is the optimized version of the default configuration. The aggressive mode is used, so that there are allocated two dedicated threads for each FIX session. The configuration is advised to be used for limited amount of sessions (say, tens or hundreds sessions) and may be effectively applied both to the Sender Host and the Receiver Host.
  • Balanced. Most validation parameters are switched off to improve performance. The configuration is advised to be used in the controlled environment and is preferable for the Sender Host.
  • Optimized.hard.spin. The spinning mode is activated in the configuration by the following setting: Session.Default.AggressiveReceiveDelay = 0, it forces threads to spin. It is not recommended to use the configuration if the number of threads is significant as it is highly consumable for the CPU. It is advised to be used for the Sender Host.
  • Balanced.onload. The Solarflare OpenOnload technique activated within the configuration optimizes the TCP stack. However, the configuration may be applied only if there is a Solarflare Network interface controller installed on the machine. It is advised to be used for the Sender Host.
  • Optimized.hard. For the RTT reduction, the affinity masks are used in the configuration. Also few validation parameters, which are not necessary in the fully controlled environment, were switched off. It is advised to be used for the Sender Host.

Results

FIX Antenna C++ configurations comparison

Configuration

DefaultAggressiveBalancedOptimized.hard.spinBalanced.onloadOptimized.hard
RTT (microseconds)

Min

47,146,127,319,011,38,3
Max190,7218,0217,5223,7199,513,2
Average51,651,131,521,613,28,7
RTT distribution (percentiles)
50%49,848,829,921,011,88,5
95%59,959,038,924,018,69,3
99%67,190,445,825,324,610,4

FIX Antenna C++ 2.19.0 vs QuickFIX C++ 1.14.3

The benchmark code was ported to QuickFIX:

...