Open topic with navigation

# Performance Measurement (Peer to Peer)

FTL has sample applications to measure:

- Latency: The time delay between message generation and delivery

- Throughput: The number of messages processed in a given time

The samples can be run with any of the transports including shared memory, TCP, multicast, RUDP, and so on. By default, they run using the shared memory transport for best performance and least configuration. For more details, see the FTL Administration guide, Transport Protocol Types.

## CPU Affinity Considerations

The applications discussed below may be run without considering CPU affinity. However, for best performance, the sender and receiver applications can be assigned to specific processors to improve cache performance and limit context switching.

To minimize latency, the latency sender and receiver are designed to receive messages from the transport and dispatch message callbacks from a single thread. This is accomplished through the use of inline event queues and publishers. For more information, see the FTL Development guide, Inline Mode. As a rough rule of thumb, the latency sender and receiver may be assigned to one processor each.

To maximize throughput, the throughput receiver is designed to receive messages from the transport on one thread, and dispatch message callbacks from a second thread. (This is accomplished through the use of a non-inline event queue.) The sender application has a dedicated sending thread. As a rough rule of thumb, the throughput sender and receiver may be assigned to two processors each.

In addition, when using the shared memory transport (which is the default in the sample realm configuration, `tibrealm.json`), the sender and receiver applications should be assigned to processors in a way that maximizes sharing of cache memory.

The following is just one example on Linux. Some experimentation will be required to achieve the best performance on a specific system.

    taskset -c 1 ./tiblatrecvtaskset -c 2 ./tiblatsend  taskset -c 1,2 ./tibthrurecvtaskset -c 3,4 ./tibthrusend

## Latency Test

The `tiblatrecv` and `tiblatsend` applications work together to provide a latency value calculated by averaging the time needed to send 5 million messages from the sender to the receiver.

Perform these steps:

1. Open two terminals. Make sure you have run the `setup` command and started the FTL server. See the Command Reference. Note that the `ftlstart` script automatically loads the realm configuration needed for this test.

2. From `samples\bin\advanced` in one terminal run:

   - Linux and macOS:

         $./tiblatrecv localhost:8080

   - Windows:

         >tiblatrecv localhost:8080

3. From `samples\bin\advanced` in the other terminal run:

   - Linux and macOS:

         $./tiblatsend localhost:8080

   - Windows:

         >tiblatsend localhost:8080

The `tiblatsend` terminal displays a summary of the total elapsed message delivery time, the number of messages sent, and an average representing the per message latency.

    ## tiblatsend# # TIBCO FTL Version <n.n.n>Invoked as: tiblatsend Calibrating tsc timer... done.CPU speed estimated to be 2.20E+09 HzSending 5000000 messages with payload size 16 Sampling latency every 5000000 messages. Total time: 4.57E+00 sec. for 5000000 messagesOne way latency: 456.62E-09 sec.

You can use these options with syntax for your platform:

- `count` to control the number of messages sent.

- `size` to change the size of the messages sent.

- `help` to see the compete set of command line options.

Try different values to see the impact on latency using your hardware.

## Throughput Test

Throughput measures the number of messages processed between applications in a given time. Larger and fewer messages typically reduces the impact of per-message overhead on messaging throughput.

The `tibthrurecv` and `tibthrusend` applications work together to provide a throughput value by measuring the time needed to send 5 million messages from the sender to the receiver.

Perform these steps:

1. Open two terminal and make sure you have run the `setup` command and started the FTL server. See the Command Reference, if necessary. Note that the ftlstart script automatically loads the realm configuration needed for this test.

2. From `samples\bin\advanced` in one terminal run:

   - Linux and macOS:

         $./tibthrurecv localhost:8080

   - Windows:

         >tibthrurecv localhost:8080

1. From `samples\bin\advanced` in the other terminal run:

   - Linux and macOS:

         $./tibthrusend localhost:8080

   - Windows:

         >tibthrusend localhost:8080

The `tibthrusend` terminal displays a summary of:

- The number of messages sent (together with the number of batches and the batch size which can be set using the `--batchsize` command line option)

- The total send and receive times
- The aggregate message send and receive rates

Typical output from `tibthrusend` follows. Based on this run:

- The sender sent all 5 million messages in 2.92 seconds at an average rate of 1.72 million messages per second.

- The receiver received these messages in about the same amount of time at an average rate of 27 million bytes per second.

    ## tibthrusend# # TIBCO FTL Version <n.n.n># Invoked as: tibthrusend http://localhost:8080 Calibrating tsc timer... done. CPU speed estimated to be 2.20E+09 Hz  Sender Report: Requested 5000000 messages. Sending 5000000 messages (50000 batches of 100) with payload size 16 Sent 5.00E+06 messages in 2.92E+00 seconds. (1.71E+06 msgs/sec)  Receiver Report: Received 5.00E+06 messages in 2.92E+00 seconds. (1.71E+06 messages per second) Received 80.00E+06 bytes in 2.92E+00 seconds. (27.38E+06 bytes per second) Messages per callback: min/max/avg/dev: 1.00E+00 / 100.00E+00 / 48.34E+00 / 29.37E+00

Performance is impacted by the performance and load of the system you are running on.

You can use these options with syntax for your platform:

- `count` to control the number of messages sent using `tibthrusend`. Keep these values relatively large in order to get representative results.

- `size` to specify the size of the messages in bytes. The default size of 16 bytes is a relatively small message and might not be representative of what your applications would be using.

- `help` to see the compete set of command line options for both `tibthrusend` and `tibthrurecv`.

Try different values for `--size` to see its impact on throughput using your hardware.

Did you find this helpful?

Yes No
Great!
Thanks for taking the time to give us some feedback.
Sorry about that

Why wasn't this helpful? (check all that apply)

Could not find what I was looking for
Instructions confusing or unclear
Instructions did not work

Want to tell us more?

Please select at least one option or provide details about the issue!!

Error occurred while submitting feedback.

Error2 occurred while submitting feedback.

TIBCO FTL® - Enterprise Edition

Copyright © 2009-2024. Cloud Software Group, Inc. All Rights Reserved.