Article

Benchmarking Throughput and Latency Using EMA C++ Non-Interactive Provider and Consumer Performance Tools

Author:

Jirapongse Phuriphanvichai
Developer Advocate Developer Advocate

The EMA C++ Performance Tools provide a comprehensive framework for benchmarking real-time data systems by measuring throughput, latency, and system resource usage. These tools simulate realistic workloads and embed timestamps into messages to evaluate performance under different conditions. These are the same tools the product team uses to produce the Performance Report, with a summary provided in the Real-Time SDKs Performance Test Summary article. 

This document describes how to use the following tools together:

  • EMACppNIProvPerf (Non Interactive Provider)
  • EMACppConsPerf (Consumer)

In this setup, the non-interactive provider publishes data into the LSEG Real-Time Distribution System (RTDS), and the consumer retrieves data through RTDS components.

Note: For the EMA C++ Interactive Provider and Consumer performance tools, please refer to this Benchmarking Throughput and Latency Using EMA C++ Interactive Provider and Consumer Performance Tools article. 

EMA Performance Tools

The Real-time C/C++ SDK contains the following three EMA performance tools, EMACppIProvPerf, EMACppNIProvPerf, and EMACppConsPerf.

1.     EMACppIProvPerf (Interactive Provider Performance Tool)

It is an interactive provider that accepts consumer connections—either directly or through the LSEG Real‑Time Distribution System—and supplies refresh, update, and optional generic messages. It simulates high‑volume publishing by generating data internally, handling login and directory requests, and sending configurable bursts of updates. The tool embeds timestamps in outgoing messages for latency measurement and supports multi‑threading to distribute consumer connections evenly across processing threads.

To run EmaCppIProvPerf, the user needs to provide the EMA configuration file (EmaConfig.xml), the message template file (MsgData.xml), and the data dictionary files (RDMFieldDictionary and enumtype.def). During execution, the tool produces a summary output (ProvSummary.out), a statistics file (ProvStats), and, if latency options are configured, an optional latency output file.

EMACppIProvPerf

2.     EMACppNIProvPerf (Non‑Interactive Provider Performance Tool)

It is a non‑interactive provider that publishes real‑time content directly into an LSEG Real‑Time Advanced Distribution Hub without requiring consumer requests. After logging in and publishing its service directory, it continually sends images and high‑rate updates for configured items, using timestamps to support latency measurement. The tool supports multi‑threaded publishing—where each thread opens its own ADH connection—and erecords statistics such as updates sent, CPU usage, and memory consumption to help assess system performance under sustained publishing loads.

To run EmaCppNIProvPerf, the user needs to provide the EMA configuration file (EmaConfig.xml), the message template file (MsgData.xml), the item list file (350k.xml) and the data dictionary files (RDMFieldDictionary and enumtype.def). During execution, the tool produces a summary output (NIProvSummary.out), and a statistics file (NIProvStats). EMACppNIProvPerf does not generate a latency file.

EMACppNIProvPerf

3.     EMACppConsPerf (Consumer Performance Tool)

It is a high‑performance Open Message Model (OMM) consumer that measures how efficiently a system can request, receive, and process real‑time market data. It issues large, configurable sets of item requests, processes refresh and update messages, and gathers detailed statistics such as update rates, image retrieval time, and latency. The tool embeds and detects timestamps to calculate both update and posting latency and supports multi‑threaded scaling, allowing multiple consumer connections for realistic workload simulation.

To run EmaCppConsPerf, the user needs to provide the EMA configuration file (EmaConfig.xml), the message template file (MsgData.xml) ), the item list file (350k.xml), and the data dictionary files (RDMFieldDictionary and enumtype.def). During execution, the tool produces a summary output (ConsSummary.out), a statistics file (ConsStats), and, if latency options are configured, an optional latency output file.

EMACppConsPerf

Note: The EMA configuration file (EmaConfig.xml), the message template file (MsgData.xml), the item list file (350k.xml), and the data dictionary files (RDMFieldDictionary and enumtype.def) are available in the Real-Time SDK C/C++ package.

This article will focus on the EMACppNIProvPerf and EMACppConsPerf tools. 

Architecture Overview

Unlike the interactive provider model, the non interactive provider does not accept item requests. Instead, it continuously publishes data to the Advanced Distribution Hub (ADH), which distributes the data through RTDS.

Non-Interactive Provide connects to RTDS
  • NI Provider: Publishes data directly to ADH
  • Real-Time Distribution System (RTDS): Acts as data cache and serves data to consumers
  • Consumer: Requests and processes data

The non‑interactive provider publishes content without requiring consumer requests, making RTDS a mandatory component in this setup.

API Throughput

API throughput measures how many messages a system can process per second under load. It is typically evaluated using EMA performance tools, which simulate realistic traffic by sending update, and request messages at controlled rates governed by a configurable tick rate. The tools collect metrics such as message rates, image retrieval time, and per-thread processing statistics, storing results in summary and statistics files. Throughput depends on factors including CPU and thread configuration, buffering behavior, message packing, and network tuning (such as disabling Nagle’s algorithm). Tests may be conducted on a single machine to isolate API performance or across multiple machines to include network effects.

API Latency

API latency is the time a message takes to travel from sender to receiver.  It is measured by embedding high-resolution timestamps in specific fields—TIM_TRK_1 when update messages are encoded by the non-interactive provider. Upon receipt, the application extracts the timestamp and compares it with the current time to calculate end-to-end latency. Messages are sent in bursts based on a configured tick rate, with one message per burst randomly selected for latency tracking to ensure representative sampling. Accurate one-way latency measurement requires both applications to run on the same host due to clock synchronization constraints.

Latency results typically include average, minimum, maximum, and standard deviation values, with optional logging of individual measurements for deeper analysis. Together, throughput and latency measurements provide a comprehensive view of system performance, enabling developers to identify bottlenecks and optimize real-time data delivery.

The followings are steps to run EMACppNIProvPerf and EMACppConsPerf tools. 

Run EMACppNIProvPerf Tool

The Real-Time Distribution System (RTDS) environment must be properly configured to support non‑interactive providers and the services they publish. Follow the steps below to run the EMACppNIProvPerf tool and establish a connection to RTDS.

1. Copy EmaConfig.xml, MsgData.xml, 350k.xml, RDMFieldDictionary, and enumtype.def files from the RTSDK package into the current EMACppNIProvPerf tool directory.

2. Configure the EMA configurations. The EmaConfig.xml file contains the Perf_NIProvider_1 configuration for the non-interactive provider performance tool. 

    	
            

<NiProviderGroup>

   <NiProviderList>

   …

      <NiProvider>

         <Name value="Perf_NIProvider_1"/>

         <Channel value="Perf_NIP_Channel_1"/>

         <Directory value="Perf_Directory_1"/>

         <Logger value="Logger_1"/>

         <XmlTraceToStdout value="0"/>

         <ItemCountHint value="100000"/>

         <MaxDispatchCountApiThread value="500"/>

         <MaxDispatchCountUserThread value="500"/>

      </NiProvider>

   …

   </NiProviderList>

</NiProviderGroup>

<ChannelGroup>

   <ChannelList>

   …

      <Channel>

         <Name value="Perf_NIP_Channel_1"/>

         <ChannelType value="ChannelType::RSSL_SOCKET"/>

         <GuaranteedOutputBuffers value="100000"/>

         <ConnectionPingTimeout value="30000"/>

         <TcpNodelay value="0"/>

         <Host value="<RTDS>"/>

         <Port value="14003"/>

         <InterfaceName value=""/>

         <HighWaterMark value="6144"/>

         <NumInputBuffers value="10000"/>

         <SysRecvBufSize value="0"/>

         <SysSendBufSize value="0"/>

      </Channel>

   </ChannelList>

</ChannelGroup>

<DirectoryGroup>

   <DirectoryList>

      <Directory>

         <Name value="Perf_Directory_1"/>

         <Service>

            <Name value="NI_PUB"/>

            <InfoFilter>

               <ServiceId value="1"/>

               <DictionariesProvided>

                  <DictionariesProvidedEntry value="Dictionary_3"/>

               </DictionariesProvided>

               <DictionariesUsed>

                  <DictionariesUsedEntry value="Dictionary_3"/>

               </DictionariesUsed>

               <Vendor value="LSEGDevTestLab"/>

               <IsSource value="0"/>

            …

            </InfoFilter>

            <StateFilter>

               <ServiceState value="1"/>

               <AcceptingRequests value="1"/>

            </StateFilter>

         </Service>

      </Directory>

   </DirectoryList>

</DirectoryGroup>

<DictionaryGroup>

   <DictionaryList>

   …

      <Dictionary>

         <Name value="Dictionary_3"/>

         <DictionaryType value="DictionaryType::FileDictionary"/>

         <RdmFieldDictionaryFileName value="./RDMFieldDictionary"/>

         <EnumTypeDefFileName value="./enumtype.def"/>

         <RdmFieldDictionaryItemName value="RWFFld"/>

         <EnumTypeDefItemName value="RWFEnum"/>

      </Dictionary>

   </DictionaryList>

This non-interactive provider configuration uses the Perf_NIP_Channel_1 channel configuration to establish a connection to RTDS and uses the Perf_Directory_1 directory configurations that publish the NI_PUB service which in turn uses the Dictionary_3 configuration to load dictionaries from local files in the current directory.

Note: Change the value of the Host configuration in the Perf_NIP_Channel_1 channel to the hostname or IP address of RTDS and configure RTDS to support the NI_PUB service.

3. Run the EMACPPNIProvPerf by specifying the Perf_NIProvider_1 to the providerName parameter and the NI_PUB to the serviceName parameter.

    	
            -providerName Perf_NIProvider_1 -serviceName NI_PUB
        
        
    

The application will run using the Perf_NIProvider_1 non-provider’s configuration, with all other settings remaining at their defaults.

    	
            

--- TEST INPUTS ---

 

                Run Time (-runTime): 360

           Provider Name (-providerName): Perf_NIProvider_1

         useUserDispatch (-useUserDispatch): No

        mainThread CpuId (-mainThread): -1

             Thread List (-threads): -1

         Api thread List (-apiThreads): -1

      Worker thread List (-workerTheads): -1

            Summary File (-summaryFile): NIProvSummary.out

              Stats File (-statsFile): NIProvStats

    Write Stats Interval (-writeStatsInterval): 5

           Display Stats (-noDisplayStats): Yes

              Item Count (-itemCount): 100000

               Tick Rate (-tickRate): 1000

             Update Rate (-updateRate): 100000

     Latency Update Rate (-latencyUpdateRate): 10

      Refresh Burst Size (-refreshBurstSize): 10

               Item File (-itemFile): 350k.xml

               Data File (-msgFile): MsgData.xml

            Service Name (-serviceName): NI_PUB

     Pre-Encoded Updates (-preEnc): No

         Nanosecond Time (-nanoTime): No

          Measure Encode (-measureEncode): No

Data loaded from XML. Market Price Memory: 11380 bytes, Market By Order Memory: 0 bytes

Loaded: 100000 items.

XmlItemParser Destroyed

NIProviderThread.MainThread. run. #1 

The default settings can be changed via the corresponding application’s parameters. For more information regarding these parameters, please refer to the EMA C++ OPEN SOURCE PERFORMANCE TOOLS GUIDE in the Real-Time SDK C/C++ package. 

With these parameters and configurations, the EMACppNIProvPerf tool will connect to RTDS and publish 100,000 items to the NI_PUB service at a rate of 100,000 updates per second, with the timestamps embedded in the TIM_TRK_1 (3902) field. The tool also generates a summary file (NIProvSummary.out) and a statistics file (NIProvstats.csv).

You can check from the RTDS monitor tool that the NI_PUB service is up with the 100,000 items in its cache. 

Run EMACppConsPerf Tool

After the NI_PUB service in RTDS is up, you can configure and run the EMACppConsPerf to connect to RTDS and consume data from the NI_PUB service. 

Follow these steps to run the EMACppConsPerf tool. 

1. Copy EmaConfig.xml, MsgData.xml, 350k.xml, RDMFieldDictionary, and enumtype.def files from the RTSDK package into the current EMACppConsPerf tool directory.

2. Configure the EMA configurations. The EmaConfig.xml file contains the Perf_Consumer_2 configuration for the consumer performance tool.

    	
            

<ConsumerGroup>

   <ConsumerList>

   …

      <Consumer>

         <Name value="Perf_Consumer_2"/>

         <Channel value="Perf_Channel_1"/>

         <Logger value="Logger_1"/>

         <Dictionary value="Dictionary_2"/>

         <MaxDispatchCountApiThread value="6500"/>

         <MaxDispatchCountUserThread value="6500"/>

      </Consumer>

   …

   </ConsumerList>

</ConsumerGroup>

<ChannelGroup>

   <ChannelList>

   …

      <Channel>

         <Name value="Perf_Channel_1"/>

         <ChannelType value="ChannelType::RSSL_SOCKET"/>

         <CompressionType value="CompressionType::None"/>

         <GuaranteedOutputBuffers value="5000"/>

         <NumInputBuffers value="2048"/>

         <ConnectionPingTimeout value="30000"/>

         <TcpNodelay value="1"/>

         <Host value="<RTDS>"/>

         <Port value="14002"/>

      </Channel>

   …

   </ChannelList>

</ChannelGroup>

<DictionaryGroup>

   <DictionaryList>

   …

      <Dictionary>

         <Name value="Dictionary_2"/>

         <DictionaryType value="DictionaryType::FileDictionary"/>

         <RdmFieldDictionaryFileName value="./RDMFieldDictionary"/>

         <EnumTypeDefFileName value="./enumtype.def"/>

      </Dictionary>

   …

   </DictionaryList>

</DictionaryGroup>

This consumer configuration uses the Perf_Channel_1 channel, which connects to RTDS on TCP port 14002. It also uses Dictionary_2, which loads dictionary files from the current directory. If required, you can modify the Host setting in the Perf_Channel_1 channel to specify the IP address or hostname of the RTDS.

3. Run the EMACPPConsPerf by specifying the Perf_Consumer_2 to the consumerName parameter and the NI_PUB to the serviceName parameter

    	
            -consumerName Perf_Consumer_2 -serviceName NI_PUB
        
        
    

The application will run using the Perf_Consumer_2 consumer’s configuration, with all other settings remaining at their defaults.

    	
            

--- TEST INPUTS ---

       Steady State Time (-steadyStateTime): 300

 Delay Steady State Time (-delaySteadyStateCalc): 0

                 Service (-serviceName): NI_PUB

         useUserDispatch (-useUserDispatch): 0

              mainThread (-mainThread): -1

             Thread List (-threads): -1

          ApiThread List (-apiThreads): -1

       WorkerThread List (-workerTheads): -1

                Username (-uname): (use system login name)

              Item Count (-itemCount): 100000

       Common Item Count (-commonItemCount): 0

            Request Rate (-requestRate): 35000

       Request Snapshots (-snapshot): No

            Posting Rate (-postRate): 0

    Latency Posting Rate (-postingLatencyRate): 0

        Generic Msg Rate (-genericMsgRate): 0

Latency Generic Msg Rate (-genericMsgLatencyRate): 0

               Item File (-itemFile): 350k.xml

               Data File (-msgFile): MsgData.xml

            Summary File (-summaryFile): ConsSummary.out

              Stats File (-statsFile): ConsStats

        Latency Log File (-latencyFile): (none)

               Tick Rate (-tickRate): 1000

       Security Protocol (-spTLSv1.2, -spTLSV1.3): NONE (default)

With these parameters and configurations, the application will connect to RTDS, subscribe to 100,000 items from the NI_PIB service, compute statistical data, and write the results to a statistics file (ConsStats.csv).

The default settings can be changed via the corresponding application’s parameters. For more information regarding these parameters, please refer to the EMA C++ OPEN SOURCE PERFORMANCE TOOLS GUIDE in the Real-Time SDK C/C++ package. 

API Performance Benchmark

The performance results can be determined from the statistic files.

Throughput

The thoughput can be determined from the messages sent and received per interval (-writeStatsInterval).

For the EMACppNIProvPerf tool, the following fields can be used to determine the API throughput.

Field Name

Description

Requests received

The number of item request messages received per interval

Images sent

The number of item refresh messages sent per interval

Updates sent

The number of item update messages sent per interval

 

For the EMACppConsPerf tool, the following fields can be used to determine the API throughput.

Field Name

Description

Images

The number of item refresh messages received per interval

Update rate (msg/sec)

The number of item update messages received per second

 

Latency

Latency values are derived from the timestamps embedded in the retrieved messages.

The EMACppNIProvPerf tool only publishes item refresh and update messages to the Real-Time Distribution System and does not receive any messages from other components. Therefore, it does not generate latency statistics data.

For the EMACppConsPerf tool, the following fields can be used to determine the API latency.

Field Name

Description

Latency updates

The number of update messages containing timestamps received per interval.

Latency avg (usec)

The average latency, in microseconds, calculated from update messages containing timestamps received during each interval.

Latency std dev (usec)

The standard deviation of latency, in microseconds, calculated from update messages containing timestamps received during each interval.

Latency max (usec)

The maximum latency, in microseconds, observed from update messages containing timestamps during each interval.

Latency min (usec)

The minimum latency, in microseconds, observed from update messages containing timestamps during each interval.

 

Latency File

The latency file is an output file generated by the EMACppConsPerf tool that record individual latency measurements for messages processed during a performance test. It stores per-message latency values rather than aggregated statistics. It is primarily used for detailed analysis, troubleshooting, and visualization.

To create this latency file, the -latencyFile parameter must be specified with a latency file name.

Note: The EMACppNIProvPerf tool does not produce a latency file.

Sample Output

EMACppNIProvPerf Statistics File

    	
            

UTC, Images sent, Updates sent, CPU usage (%), Memory (MB)

2026-05-29 08:04:19, 0, 0, 5.61, 770.61

2026-05-29 08:04:24, 92527, 0, 50.97, 792.46

2026-05-29 08:04:29, 7473, 211172, 55.07, 793.88

2026-05-29 08:04:34, 0, 309960, 70.59, 793.88

2026-05-29 08:04:39, 0, 226836, 76.79, 793.89

2026-05-29 08:04:44, 0, 232605, 72.39, 793.93

2026-05-29 08:04:49, 0, 238343, 72.49, 793.93

2026-05-29 08:04:54, 0, 178108, 60.84, 793.93

2026-05-29 08:04:59, 0, 325566, 63.72, 793.93

2026-05-29 08:05:04, 0, 408551, 75.50, 793.93

2026-05-29 08:05:09, 0, 242368, 75.29, 793.93

2026-05-29 08:05:14, 0, 269073, 55.19, 793.87

2026-05-29 08:05:19, 0, 389889, 66.69, 793.87

2026-05-29 08:05:24, 0, 182435, 63.74, 793.87

2026-05-29 08:05:29, 0, 33606, 46.28, 793.87

2026-05-29 08:05:34, 0, 30288, 50.78, 793.87

2026-05-29 08:05:39, 0, 224523, 57.04, 793.87

2026-05-29 08:05:44, 0, 355718, 53.30, 793.87

EMACppConsPerf Statistic File

    	
            

UTC, Latency updates, Latency avg (usec), Latency std dev (usec), Latency max (usec), Latency min (usec), Images, Update rate (msg/sec), Posting Latency updates, Posting Latency avg (usec), Posting Latency std dev (usec), Posting Latency max (usec), Posting Latency min (usec), GenMsgs sent, GenMsgs received, GenMsg Latencies sent, GenMsg latencies received, GenMsg Latency avg (usec), GenMsg Latency std dev (usec), GenMsg Latency max (usec), GenMsg Latency min (usec), CPU usage (%), Memory (MB)

2026-05-29 08:04:38, 12, 1315.7, 514.9, 2090.0, 462.0, 100000, 19021, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0, 108.32, 462.99

2026-05-29 08:04:43, 25, 1137.8, 703.0, 3196.0, 404.0, 0, 51738, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0, 49.92, 463.07

2026-05-29 08:04:48, 22, 2436.0, 1981.0, 9495.0, 744.0, 0, 45655, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0, 69.11, 463.07

2026-05-29 08:04:53, 23, 1353.4, 650.7, 3387.0, 544.0, 0, 45057, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0, 48.75, 463.07

2026-05-29 08:04:58, 25, 823.2, 834.2, 3755.0, 431.0, 0, 51895, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0, 22.52, 463.07

2026-05-29 08:05:03, 37, 843.0, 529.4, 2755.0, 425.0, 0, 71121, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0, 42.76, 463.07

2026-05-29 08:05:08, 33, 847.3, 543.4, 2295.0, 447.0, 0, 62994, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0, 33.99, 463.07

2026-05-29 08:05:13, 22, 821.3, 667.1, 2868.0, 422.0, 0, 47581, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0, 25.35, 463.07

2026-05-29 08:05:18, 47, 768.2, 527.0, 2392.0, 410.0, 0, 88208, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0, 38.05, 463.07

2026-05-29 08:05:23, 19, 1082.4, 686.7, 2405.0, 457.0, 0, 41855, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0, 31.55, 463.07

2026-05-29 08:05:29, 2, 3980.0, 893.8, 4612.0, 3348.0, 0, 6773, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0, 10.87, 463.07

2026-05-29 08:05:34, 2, 2123.0, 1333.6, 3066.0, 1180.0, 0, 6116, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0, 12.67, 463.07

2026-05-29 08:05:39, 18, 800.2, 826.9, 3827.0, 377.0, 0, 29430, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0, 18.89, 463.07

2026-05-29 08:05:44, 41, 558.8, 152.4, 1032.0, 402.0, 0, 86671, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0, 34.03, 463.07

2026-05-29 08:05:49, 2, 2861.5, 951.1, 3534.0, 2189.0, 0, 5085, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0, 10.49, 463.07

2026-05-29 08:05:54, 31, 864.8, 503.3, 2588.0, 453.0, 0, 58058, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0, 28.15, 463.07

2026-05-29 08:05:59, 6, 1653.8, 1139.3, 3584.0, 543.0, 0, 12995, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0, 13.97, 463.07

2026-05-29 08:06:04, 5, 2386.4, 700.9, 3135.0, 1373.0, 0, 6695, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0, 13.66, 463.07

2026-05-29 08:06:09, 49, 559.3, 148.1, 963.0, 392.0, 0, 99965, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0, 37.75, 463.07

2026-05-29 08:06:14, 37, 878.3, 701.4, 3451.0, 377.0, 0, 71929, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0, 42.69, 463.07

2026-05-29 08:06:19, 1, 2743.0, 0.0, 2743.0, 2743.0, 0, 4437, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0, 9.57, 463.07

2026-05-29 08:06:24, 37, 725.7, 300.3, 1603.0, 411.0, 0, 73127, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0, 32.69, 463.07

EMACppConsPerf Latency File

    	
            

Message type, Send time, Receive time, Latency (usec)

Upd, 164562493009, 164562494732, 1723

Upd, 164562501767, 164562503571, 1804

Upd, 164562623936, 164562624772, 836

Upd, 164564641501, 164564643012, 1511

Upd, 164564644130, 164564645430, 1300

Upd, 164564748069, 164564748795, 726

Upd, 164564749449, 164564750296, 847

Upd, 164564775060, 164564776179, 1119

Upd, 164565311564, 164565313383, 1819

Upd, 164565361909, 164565363460, 1551

Upd, 164565691771, 164565692233, 462

Upd, 164566026982, 164566029072, 2090

Upd, 164566481976, 164566484311, 2335

Upd, 164567054204, 164567055953, 1749

Upd, 164567084305, 164567085536, 1231

Upd, 164567152234, 164567153516, 1282

Upd, 164567587779, 164567588255, 476

Upd, 164567649063, 164567649551, 488

Upd, 164567953068, 164567956264, 3196

Upd, 164568053521, 164568054719, 1198

Upd, 164568173430, 164568174874, 1444

Upd, 164568464418, 164568465386, 968

Summary

The EMA C++ Performance Tools provide a comprehensive framework for benchmarking real-time data systems by measuring key metrics such as throughput, latency, and resource utilization. By simulating realistic workloads and embedding timestamps into messages, the tools enable accurate evaluation of system performance and help identify bottlenecks under various operating conditions.

This document focuses specifically on the EMACppNIProvPerf (Non-Interactive Provider) and EMACppConsPerf (Consumer) tools, which are commonly used together to measure end-to-end performance. These tools support configurable message rates, burst-based processing via tick rates, and multi-threaded scaling.

Through detailed outputs such as summary, statistics, and optional latency files, developers can analyze both aggregated metrics and individual message timings. This enables informed optimization of applications to achieve low latency, high throughput, and efficient resource usage in real-time data delivery systems.

Request Free Trial

Help & Support

Already a customer?

Office locations

Contact LSEG near you