Performance Testing with 1 Publisher and Multiple Subscribers

2 posts / 0 new
Last post
Last seen: 1 month 1 week ago
Joined: 02/15/2019
Posts: 44
Performance Testing with 1 Publisher and Multiple Subscribers

When running a performance test with 1 publisher and 5 subscribers configured as follows:

Machine 1: Publisher
Machine 2: Subscriber 1 + 2
Machine 3: Subscriber 3 + 4
Machine 4: Subscriber 5

I am running a throughput test with the following commands:

Machine 1:
start cmd /k perftest_java.bat -pub -dataLen 512 -numSubscribers 1 -domain 1 -latencyCount 10000 -numIter 10000000

Machine 2:
start cmd /k perftest_java.bat -sub -dataLen 512 -numSubscribers 5 -domain 1 -latencyCount 10000 -numIter 10000000 -bestEffort -multicast -fileName sub1 -sidMultiSubTest 1

start cmd /k perftest_java.bat -sub -dataLen 512 -numSubscribers 5 -domain 1 -latencyCount 10000 -numIter 10000000 -bestEffort -multicast -fileName sub2 -sidMultiSubTest 2

Machine 3:
start cmd /k perftest_java.bat -sub -dataLen 512 -numSubscribers 5 -domain 1 -latencyCount 10000 -numIter 10000000 -bestEffort -multicast -fileName sub3 -sidMultiSubTest 3

start cmd /k perftest_java.bat -sub -dataLen 512 -numSubscribers 5 -domain 1 -latencyCount 10000 -numIter 10000000 -bestEffort -multicast -fileName sub4 -sidMultiSubTest 4

Machine 4:
start cmd /k perftest_java.bat -sub -dataLen 512 -numSubscribers 5 -domain 1 -latencyCount 10000 -numIter 10000000 -bestEffort -multicast -fileName sub5 -sidMultiSubTest 5

Here are the results of three tests ran with the above commands (these are averages calculated from the test results which are written to an Excel file):

        Best Effort Multicast                        Test 1.5
        Pub 1    Sub 1    Sub 2    Sub 3    Sub 4    Sub 5    
         One-way Latency (us)    Throughput (mbps)    Throughput (mbps)    Throughput (mbps)    Throughput (mbps)    Throughput (mbps)    Time Taken (s)
Test 1        22007453.64            173.2                            171.9                      152.7                     153.7                      294.5                       42
Test 2        20819820.24            158.5                            162.8                      156.1                      160                      304.4                       42
Test 3        6973.342246            158.7                            160.7                      165.1                      164.9                      288.7                      373

From the publisher's results there are 42 rows in the first two tests. However, there are 373 rows for the third test.
Since the numIter is 10,000,000 and the latencyCount is 10,000 wouldn't that mean that there should be 1,000 rows? Or do these rows represent each second? If they do represent each second how do I attain the raw data for the latency values from the latency packets?

I am currently using RTI Perftest 2.4 and RTI Connext DDS 6.0.0. I believe the machines are running windows (not sure which version, although I can find out if needed). If there is any further information you require please ask.

Thank you,


jmorales's picture
Last seen: 2 months 3 weeks ago
Joined: 08/28/2013
Posts: 60


-  The -numSubscribers parameter is not used in the subscriber side, you should be using the -numPublishers 1 (it is the default, that is why this is not failing).

- Why are you doing the average manually, instead of just relying in the last line printed by RTI Perftest for both publisher and subscriber side? Actually, for real test I always recommend using -noPrintIntervals, since the printf is going to sightly affect performance. I see you are using a file, so it should be a bit better, but I don't know how much better. If you want to get the raw data, if you check the Latency Listener used in the Publisher side, you will see that there is a vector which contains all the latencies/RTT, you might want to just print/plot that at the end of the test (see where we do the final print for the latency average, 99% etc).

- What is exactly what you want to measure? I see you are setting the data length, however, remember that RTI Perftest is going to enable batching by default, so you are going to send in batches (this is going to affect to the latency results you are getting). Also, you are sending at the maximum throughput, that is also highly affecting to the latency you are getting. Usually we measure 3 things separately: Minimum Latency, maximum throughput, and average latency under a certain throughput load.

- The reason why you see a different number of lines in the test other than 1000 is the fact that you are doing batching, I believe. Try with -batchSize 0.

- Is your final code going to be writen in Java? Otherwise my recomendation is for you to use the C++/C++ modern Perftest implementations, as they will give you better latency/throughput results.