EMA C++ Performace Tools Guide : 6 Non-Interactive Provider Performance Tool : 6.5 EmaCppNIProvPerf Configuration Options
 
6.5 EmaCppNIProvPerf Configuration Options
EmaCppNIProvPerf uses EmaConfig.xml configuration file to setup an Enterprise Message API Non-Interactive provider and set of command line options to configure specific behavior of performance tool.
EmaConfig.xml must have NiProvider section in the NiProviderGroup group and appropriate Channel section in Channel group for correct configuration of the EMA Non-Interactive provider. For details on how to setup NiProvider and Channel sections, refer to the Enterprise Message API Configuration Guide. For examples of configuration, refer to Section 6.6.1.
EmaCppNIProvPerf uses the command line option -providerName to specify name of NiProvider section.
EmaCppNIProvPerf uses the following command line options:
 
Table 4: EmaCppNIProvPerf Configuration Options  
COMMAND-LINE OPTION
DEFAULT
DESCRIPTION
-cert
 
Specifies the file containing the server certificate for encryption.
-commonItemCount
0
If multiple consumer threads are created (see -threads), each thread normally requests a unique set of items on its connection. This option specifies the number of common items to be requested by all connection.
-apiThreads
-1
Specifies the CPU core(s) to bind the internal EMA API thread(s) to dispatch received messages. The parameter is used when the application configures EMA to work in API dispatch mode (see -useUserDispatch). By default, EmaCppNIProvPerf does not bind the internal EMA API thread(s) to specific CPU core(s). For details on the internal EMA API thread, refer to the Enterprise Message API Developers Guide, 2.4 Product Architecture.
Specifies the CPU physical mapping in format P:X C:Y T:Z, logical core ID (number), or no binding (-1).
Specifies the physical mapping which binds the thread to the specified physical processor, core, and thread (P:X C:Y T:Z). This syntax specifies a physical CPU to bind to. P refers to processor, C refers to core, and T refers to thread. If T is not specified (or T:#), the thread will be bound to all threads on the specified processor. If C is not specified (or C:#), the thread will be bound to all cores and threads on that processor. 
Specifying only one number causes a logical core ID to be bound instead of a physical one. -1 means no bind. 
For example, when specified as "1,3", the internal EMA API threads will be bound to logical CPU cores 1 and 3. 
The number of threads set by the parameter -threads should be matched. 
For details on rsslBindThread, refer to the Transport API C++ Edition Developers Guide.
-itemCount
100000
Sets the total number of items that the provider will publish.
-itemFile
350k.xml
Specifies the file that contains a list of items the provider will publish. For more details on input file information, refer to Section 8.2.
-key
 
Specifies the file containing the server private key for encryption.
-latencyUpdateRate
10
Sets the number of updates with latency information sent per second.
NOTE:  
This number must be less than or equal to the total update rate (see -updateRate).
When you set the value “all” then the latency data is added to each update message.
-mainThread
-1
Specifies the CPU core to bind the main application thread that controls working threads, collects and prints statistics. By default, EmaCppNIProvPerf does not bind the main thread to specific CPU core.
Specifies the CPU physical mapping in format P:X C:Y T:Z, logical core ID (number), or no binding (-1).
Specifies the physical mapping which binds the thread to the specified physical processor, core, and thread (P:X C:Y T:Z). This syntax specifies a physical CPU to bind to. P refers to processor, C refers to core, and T refers to thread. If T is not specified (or T:#), the thread will be bound to all threads on the specified processor. If C is not specified (or C:#), the thread will be bound to all cores and threads on that processor. 
Specifying only one number causes a logical core ID to be bound instead of a physical one. -1 means no bind. 
For example, when specified "3", the main thread will be bound to logical CPU core 3. 
For details on rsslBindThread, refer to the Transport API C++ Edition Developers Guide.
-maxPackCount
1
Specifies maximum number of messages packed in a buffer. When count is > 1, packing is enabled.
-measureDecode
(no argument)
Configures EmaCppNIProvPerf to measure decoding time of messages. By default, the measurement is not produced.
-measureEncode
(no argument)
Configures EmaCppNIProvPerf to measure encoding time of messages. By default, the measurement is not produced.
-msgFile
MsgData.xml
Specifies the file that determines the provider’s message content. For more details on input file information, refer to Section 8.1.
-nanoTime
(no argument)
Specifies nanosecond precision for latency information instead of microsecond.
-noDisplayStats
(no argument)
Turns off printing statistics to the screen.
-packBufSize
6000
If message packing is enabled (i.e. maxPackCount > 1), sets the size of buffer to use.
-preEnc
(no argument)
Specifies pre-encoding for update messages. All the template message (see MsgData.xml) will be encoded before real sending. It decreases the time required for message preparation. By default, EmaCppNIProvPerf encodes messages each time.
NOTE: When a latency data is required then the messages that contain latency is encoded each time (see -latencyUpdateRate).
-providerName
Perf_NIProvider_
Specifies the name of provider in XML configuration file (EmaConfig.xml).
-refreshBurstSize
10
After the provider completes an update burst, it uses the time before the next burst to send any needed refreshes, monitoring the time to see whether it is time for the next tick time.
This option configures how often the provider checks the time (in case checking is expensive for the system).
-runTime
360
Sets the length of time for which EmaCppNIProvPerf runs, in seconds.
-serviceId
1
Specifies the provider’s service ID.
-serviceName
DIRECT_FEED
Specifies the provider’s service name.
-statsFile
NIProvStats
Specifies the base filename used to write the provider's test statistics.
-summaryFile
NIProvSummary.out
Specifies the base filename used to write the provider's test summary.
-threads
 
The value of "-threads" serves two purposes: It defines the number of parallel threads/connections to be created AND where to bind each thread. For example, if an application wants to horizontally scale and open two connections, there should be two values for -threads: 0,1 OR P:0 C:0 T:0, P:0 C:0 T:1 OR -1, -1. The number of values specified indicates the number of threads to start (comma separated). The thread binding may be formatted or specified as follows: physical binding (P:X C:Y T:Z) OR logical binding (X) or -1 (no binding). 
Physical binding: specify physical CPU to bind to: P refers to processor, C refers to core, and T refers to thread. If T is not specified (or T:#), the thread will be bound to all threads on the specified processor. If C is not specified (or C:#), the thread will be bound to all cores and threads on that processor. 
Specifying only one number causes a logical core ID to be bound instead of a physical one. -1 means no bind. 
For example, when specified as "1,3", it creates two threads to publish items respectively, and they are bound to CPU cores 1 and 3. 
In conjunction with -threads, one may specify -apiThreads and -workerThreads. For details on rsslBindThread, refer to the Transport API C++ Edition Developers Guide.
-tickRate
1000
Sets the number of ticks per second (the number of cycles per second made by the provider’s main loop). Adjusting the tick rate changes the size of update bursts; higher tick rates result in smaller individual bursts and smoother traffic.
-updateRate
100000
Sets the total number of updates sent per second, per connection.
NOTE: This cannot be less than the tick rate, unless it is 0 (see -tickRate).
-useServiceId
(no argument)
Turns on the usage of the service ID. See the -serviceId option.
-useUserDispatch
0
Configures how EmaCppNIProvPerf and Enterprise Message API dispatch receive messages. When you select 0 (API dispatch model), then EmaCppNIProvPerf configures the Enterprise Message API to create an additional internal thread to dispatch received messages. When you select 1 (user dispatch model), the Enterprise Message API does not run a second thread and the EmaCppNIProvPerf is responsible for dispatching all received messages. By default, EmaCppNIProvPerf uses the API dispatch model.
For details on how an Enterprise Message API application dispatches received messages, refer to the Enterprise Message API Developers Guide.
-workerThreads
None
Specifies the CPU core(s) to bind the Reactor worker thread(s). By default, EmaCppNIProvPerf does not bind the Reactor worker thread(s) to specific CPU core(s). For details on Value Added Components, refer to the Transport API Value Added Components Developers Guide.
Specifies the CPU physical mapping in format P:X C:Y T:Z, logical core ID (number), or no binding (-1).
Specifies the physical mapping which binds the thread to the specified physical processor, core, and thread (P:X C:Y T:Z). This syntax specifies a physical CPU to bind to. P refers to processor, C refers to core, and T refers to thread. If T is not specified (or T:#), the thread will be bound to all threads on the specified processor. If C is not specified (or C:#), the thread will be bound to all cores and threads on that processor. 
Specifying only one number causes a logical core ID to be bound instead of a physical one. -1 means no bind. 
For example, when specified as "1,3", the Reactor worker threads will be bound to logical CPU cores 1 and 3. 
The number of threads set by the parameter -threads should be matched. 
For details on rsslBindThread, refer to the Transport API C++ Edition Developers Guide.
-writeStatsInterval
5
Sets how often statistics are printed to the screen and statistics file (in seconds).