1.2.3. Java API
The following tests have been performed by executing an RTI Perftest Java Publisher and Subscriber between two nodes, connected to a switch via Ethernet. The communication has been restricted to a single interface and the transport has been set to UDPv4.
Find information about the hardware, network, and command-line parameters after each of the tests.
1.2.3.1. Unkeyed, UDPv4 10Gbps Network, Java
The graph below shows the one-way latency without load between a Publisher and a Subscriber running in two Linux nodes in a 10Gbps network. The numbers are for best-effort as well as strict reliable reliability scenarios.
Note
We use the median (50th percentile) instead of the average in order to get a more stable measurement that does not account for spurious outliers. We also calculate the average value and other percentile values, which can be seen in the Detailed Statistics section below.
Detailed Statistics
The following tables contain the raw numbers presented by RTI Perftest. These numbers are the exact output with no further processing.
Best Effort
Sample Size (Bytes) |
Ave (us) |
Std (us) |
Min (us) |
Max (us) |
50% (μs) |
90% (us) |
99% (us) |
99.99% (us) |
99.9999% (us) |
---|---|---|---|---|---|---|---|---|---|
32 |
19 |
5.8 |
18 |
2501 |
19 |
20 |
23 |
18 |
18 |
64 |
20 |
5.8 |
18 |
2589 |
19 |
20 |
23 |
18 |
18 |
128 |
20 |
5.6 |
19 |
2234 |
20 |
20 |
24 |
19 |
19 |
256 |
21 |
132.6 |
19 |
87444 |
20 |
21 |
24 |
19 |
19 |
512 |
20 |
6.0 |
19 |
2479 |
20 |
21 |
24 |
19 |
19 |
1024 |
26 |
7.4 |
21 |
2848 |
26 |
28 |
30 |
21 |
21 |
2048 |
49 |
228.2 |
23 |
100112 |
49 |
64 |
78 |
23 |
23 |
4096 |
34 |
135.9 |
28 |
100102 |
30 |
51 |
64 |
28 |
28 |
8192 |
46 |
11.0 |
39 |
2483 |
41 |
59 |
62 |
39 |
39 |
16384 |
96 |
26.7 |
50 |
2456 |
85 |
129 |
135 |
50 |
50 |
32768 |
168 |
18.7 |
79 |
2385 |
168 |
186 |
190 |
79 |
79 |
63000 |
193 |
14.4 |
113 |
2570 |
193 |
195 |
202 |
113 |
113 |
Reliable
Sample Size (Bytes) |
Ave (us) |
Std (us) |
Min (us) |
Max (us) |
50% (μs) |
90% (us) |
99% (us) |
99.99% (us) |
99.9999% (us) |
---|---|---|---|---|---|---|---|---|---|
32 |
21 |
7.6 |
20 |
2969 |
21 |
22 |
25 |
20 |
20 |
64 |
21 |
6.0 |
20 |
2488 |
21 |
22 |
26 |
20 |
20 |
128 |
21 |
5.7 |
20 |
2256 |
21 |
22 |
24 |
20 |
20 |
256 |
22 |
6.1 |
20 |
2446 |
21 |
22 |
28 |
20 |
20 |
512 |
23 |
6.1 |
21 |
2438 |
22 |
23 |
27 |
21 |
21 |
1024 |
27 |
7.4 |
22 |
2201 |
26 |
29 |
55 |
22 |
22 |
2048 |
31 |
36.1 |
24 |
4984 |
30 |
34 |
57 |
24 |
24 |
4096 |
33 |
42.4 |
29 |
4993 |
31 |
34 |
64 |
29 |
29 |
8192 |
48 |
24.4 |
40 |
9582 |
43 |
60 |
85 |
40 |
40 |
16384 |
94 |
29.7 |
51 |
2925 |
93 |
134 |
152 |
51 |
51 |
32768 |
170 |
20.1 |
86 |
2353 |
171 |
188 |
191 |
86 |
86 |
63000 |
177 |
19.8 |
148 |
2446 |
176 |
195 |
199 |
148 |
148 |
Perftest Scripts
To produce these tests, we executed RTI Perftest for Java. The exact script used can be found here:
1echo EXECUTABLE IS $1
2export executable=$1
3
4export folder_base="$(dirname "${executable}")"/../..
5
6echo OUTPUT PATH IS $2
7export output_folder=$2
8export pub_sub="pub"
9export lat_thr="lat"
10export num_reps="1 2"
11export dataLens="32 64 128 256 512 1024 2048 4096 8192 16384 32768 63000"
12export domain="2"
13
14if [[ -z "$3" ]]; then
15 echo "You need a third argument with publisher or subscriber"
16 exit -1
17else
18 if [[ "$3" == "publisher" ]]; then
19 echo "Publisher"
20 export pub_sub="pub"
21
22 elif [[ "$3" == "subscriber" ]]; then
23 echo "Subscriber"
24 export pub_sub="sub"
25 else
26 echo "It must be either publisher or subscriber"
27 exit -1
28 fi
29fi
30
31if [[ -z "$4" ]]; then
32 echo "You need a forth argument with lat or thr"
33 exit -1
34else
35 if [[ "$4" == "thr" ]]; then
36 echo "Throughput test"
37 export ${lat_thr}_thr="thr"
38
39 elif [[ "$4" == "lat" ]]; then
40 echo "Latency test"
41 export ${lat_thr}_thr="lat"
42 else
43 echo "It must be either lat or thr"
44 exit -1
45 fi
46fi
47
48if [[ -z "$5" ]]; then
49 echo "Using default nics"
50 export nic1=172.16.0.1
51 export nic2=172.16.0.2
52else
53 echo "Using custom nic: $5"
54 export nic1=$5
55 export nic2=$5
56fi
57
58sudo /set_${lat_thr}_mode.sh
59sleep 10
60
61export exec_time=20
62
63export pub_string="-pub \
64 -transport UDPv4 \
65 -nic $nic1 \
66 -noPrint \
67 -exec $exec_time"
68
69if [[ ${lat_thr} == "lat" ]]; then
70 export pub_string="$pub_string \
71 -latencyTest"
72fi
73
74export sub_string="-sub \
75 -transport UDPv4 \
76 -nic $nic2 \
77 -noPrint"
78
79if [[ "$pub_sub" == "pub" ]]; then
80 echo "Publisher side"
81 export commands_string=${pub_string}
82else
83 echo "Subscriber side"
84 export commands_string=${sub_string}
85fi
86
87
88cd $folder_base
89mkdir -p $output_folder
90
91export my_file=$output_folder/${lat_thr}_${pub_sub}_unkeyed_rel.csv
92touch $my_file
93export extra_args=""
94for index in ${num_reps}; do
95 for DATALEN in ${dataLens}; do
96 export command="$executable -domain $domain -datalen $DATALEN $commands_string $extra_args"
97 echo $command ---- $index
98 $command >> $my_file;
99 if [[ "$domain" == "1" ]]; then
100 export domain="2"
101 else
102 export domain="1"
103 fi
104 export extra_args=" -noOutputHeaders "
105 done
106done
107
108export my_file=$output_folder/${lat_thr}_${pub_sub}_unkeyed_be.csv
109touch $my_file
110export extra_args=""
111for index in ${num_reps}; do
112 for DATALEN in ${dataLens}; do
113 export command="$executable -domain $domain -datalen $DATALEN -best $commands_string $extra_args"
114 echo $command ---- $index
115 $command >> $my_file;
116 if [[ "$domain" == "1" ]]; then
117 export domain="2"
118 else
119 export domain="1"
120 fi
121 export extra_args=" -noOutputHeaders "
122 done
123done
124
125export my_file=$output_folder/${lat_thr}_${pub_sub}_keyed_rel.csv
126touch $my_file
127export extra_args=""
128for index in ${num_reps}; do
129 for DATALEN in ${dataLens}; do
130 export command="$executable -domain $domain -datalen $DATALEN -keyed -instances 100000 $commands_string $extra_args"
131 echo $command ---- $index
132 $command >> $my_file;
133 if [[ "$domain" == "1" ]]; then
134 export domain="2"
135 else
136 export domain="1"
137 fi
138 export extra_args=" -noOutputHeaders "
139 done
140done
141
142export my_file=$output_folder/${lat_thr}_${pub_sub}_keyed_be.csv
143touch $my_file
144export extra_args=""
145for index in ${num_reps}; do
146 for DATALEN in ${dataLens}; do
147 export command="$executable -domain $domain -datalen $DATALEN -keyed -instances 100000 -best $commands_string $extra_args"
148 echo $command ---- $index
149 $command >> $my_file;
150 if [[ "$domain" == "1" ]]; then
151 export domain="2"
152 else
153 export domain="1"
154 fi
155 export extra_args=" -noOutputHeaders "
156 done
157done
158
159# if [[ ${lat_thr} == "thr" ]]; then
160
161# if [[ "$pub_sub" == "pub" ]]; then
162# echo "Publisher side"
163# export commands_string="${commands_string} -batchSize 0"
164# fi
165
166# export my_file=$output_folder/${lat_thr}_${pub_sub}_unkeyed_be_noBatch.csv
167# touch $my_file
168# export extra_args=""
169# for index in ${num_reps}; do
170# for DATALEN in ${dataLens}; do
171# export command=" $executable -domain $domain -datalen $DATALEN -best $commands_string $extra_args"
172# echo $command ---- $index
173# $command >> $my_file;
174# if [[ "$domain" == "1" ]]; then
175# export domain="2"
176# else
177# export domain="1"
178# fi
179# export extra_args=" -noOutputHeaders "
180# done
181# done
182
183# export my_file=$output_folder/${lat_thr}_${pub_sub}_unkeyed_rel_noBatch.csv
184# touch $my_file
185# export extra_args=""
186# for index in ${num_reps}; do
187# for DATALEN in ${dataLens}; do
188# export command=" $executable -domain $domain -datalen $DATALEN $commands_string $extra_args"
189# echo $command ---- $index
190# $command >> $my_file;
191# if [[ "$domain" == "1" ]]; then
192# export domain="2"
193# else
194# export domain="1"
195# fi
196# export extra_args=" -noOutputHeaders "
197# done
198# done
199
200# fi
Test Software
The following software was used to perform these tests:
RTI Connext DDS 7.0.0 Host and Target Libraries for x64 Linux (x64Linux4gcc7.3.0)
Test Hardware
The following hardware was used to perform these tests:
Linux Nodes
Dell R340 Servers (13 Units)
Processor: Intel Xeon E-2278G (3.4-5GHz, 8c/16t, 16MB cache, 2 memory channels @2666MHz)
RAM: 4x 16GB 2666MHz DIMM (64GB RAM)
HD: 480GB SATA SSD
NIC 1: Intel 710 dual port 10Gbps SFP
OS: Ubuntu 20.04 -- gcc 9.3.0
Switch
Dell 2048 -- 10Gbps switch
The graph below shows the expected throughput behavior when performing a 1-1 communication between two Linux nodes in a 10Gbps network. The numbers are for best-effort as well as strict reliable reliability scenarios.
Note
By default, RTI Perftest enables batching when performing a Maximum Throughput test. The batching feature allows sending more than one data sample per RTPS packet, improving network performance for small data sizes. See the RTI Connext Core Libraries User’s Manual for more information on batching.
The batch maximum size is set by RTI Perftest to be 8192 bytes; after 8192 bytes, batching is not enabled.
Detailed Statistics
This table contains the raw numbers presented by RTI Perftest. These numbers are the exact output with no further processing.
Best Effort
Sample Size (Bytes) |
Total Samples |
Avg Samples/s |
Avg Mbps |
Lost Samples |
Lost Samples (%) |
---|---|---|---|---|---|
32 |
18815488 |
938277 |
240.2 |
17482914 |
48.16 |
64 |
18434176 |
918991 |
470.5 |
19369344 |
51.24 |
128 |
17437866 |
869266 |
890.1 |
18611776 |
51.63 |
256 |
16147232 |
804926 |
1648.5 |
13268639 |
45.11 |
512 |
13920370 |
693916 |
2842.3 |
9268368 |
39.97 |
1024 |
11472213 |
571875 |
4684.8 |
4553776 |
28.41 |
2048 |
8271106 |
412304 |
6755.2 |
1966668 |
19.21 |
4096 |
5307916 |
264592 |
8670.2 |
520050 |
8.92 |
8192 |
3001166 |
150058 |
9834.2 |
3884 |
0.13 |
16384 |
1507846 |
75393 |
9881.9 |
1004 |
0.07 |
32768 |
755593 |
37780 |
9903.8 |
445 |
0.06 |
63000 |
393406 |
19670 |
9913.9 |
111 |
0.03 |
Reliable
Sample Size (Bytes) |
Total Samples |
Avg Samples/s |
Avg Mbps |
Lost Samples |
Lost Samples (%) |
---|---|---|---|---|---|
32 |
18758144 |
937608 |
240.0 |
0 |
0.00 |
64 |
18209793 |
910230 |
466.0 |
0 |
0.00 |
128 |
17126209 |
856215 |
876.8 |
0 |
0.00 |
256 |
15731009 |
786487 |
1610.7 |
0 |
0.00 |
512 |
13612609 |
680248 |
2786.3 |
0 |
0.00 |
1024 |
10552433 |
527357 |
4320.1 |
0 |
0.00 |
2048 |
7285400 |
364074 |
5965.0 |
0 |
0.00 |
4096 |
4534168 |
226588 |
7424.8 |
0 |
0.00 |
8192 |
2387806 |
119392 |
7824.4 |
0 |
0.00 |
16384 |
1507277 |
75363 |
9878.0 |
0 |
0.00 |
32768 |
755444 |
37772 |
9901.6 |
0 |
0.00 |
63000 |
393389 |
19669 |
9913.3 |
0 |
0.00 |
Perftest Scripts
To produce these tests, we executed RTI Perftest for Java. The exact script used can be found here:
1echo EXECUTABLE IS $1
2export executable=$1
3
4export folder_base="$(dirname "${executable}")"/../..
5
6echo OUTPUT PATH IS $2
7export output_folder=$2
8export pub_sub="pub"
9export lat_thr="lat"
10export num_reps="1 2"
11export dataLens="32 64 128 256 512 1024 2048 4096 8192 16384 32768 63000"
12export domain="2"
13
14if [[ -z "$3" ]]; then
15 echo "You need a third argument with publisher or subscriber"
16 exit -1
17else
18 if [[ "$3" == "publisher" ]]; then
19 echo "Publisher"
20 export pub_sub="pub"
21
22 elif [[ "$3" == "subscriber" ]]; then
23 echo "Subscriber"
24 export pub_sub="sub"
25 else
26 echo "It must be either publisher or subscriber"
27 exit -1
28 fi
29fi
30
31if [[ -z "$4" ]]; then
32 echo "You need a forth argument with lat or thr"
33 exit -1
34else
35 if [[ "$4" == "thr" ]]; then
36 echo "Throughput test"
37 export ${lat_thr}_thr="thr"
38
39 elif [[ "$4" == "lat" ]]; then
40 echo "Latency test"
41 export ${lat_thr}_thr="lat"
42 else
43 echo "It must be either lat or thr"
44 exit -1
45 fi
46fi
47
48if [[ -z "$5" ]]; then
49 echo "Using default nics"
50 export nic1=172.16.0.1
51 export nic2=172.16.0.2
52else
53 echo "Using custom nic: $5"
54 export nic1=$5
55 export nic2=$5
56fi
57
58sudo /set_${lat_thr}_mode.sh
59sleep 10
60
61export exec_time=20
62
63export pub_string="-pub \
64 -transport UDPv4 \
65 -nic $nic1 \
66 -noPrint \
67 -exec $exec_time"
68
69if [[ ${lat_thr} == "lat" ]]; then
70 export pub_string="$pub_string \
71 -latencyTest"
72fi
73
74export sub_string="-sub \
75 -transport UDPv4 \
76 -nic $nic2 \
77 -noPrint"
78
79if [[ "$pub_sub" == "pub" ]]; then
80 echo "Publisher side"
81 export commands_string=${pub_string}
82else
83 echo "Subscriber side"
84 export commands_string=${sub_string}
85fi
86
87
88cd $folder_base
89mkdir -p $output_folder
90
91export my_file=$output_folder/${lat_thr}_${pub_sub}_unkeyed_rel.csv
92touch $my_file
93export extra_args=""
94for index in ${num_reps}; do
95 for DATALEN in ${dataLens}; do
96 export command="$executable -domain $domain -datalen $DATALEN $commands_string $extra_args"
97 echo $command ---- $index
98 $command >> $my_file;
99 if [[ "$domain" == "1" ]]; then
100 export domain="2"
101 else
102 export domain="1"
103 fi
104 export extra_args=" -noOutputHeaders "
105 done
106done
107
108export my_file=$output_folder/${lat_thr}_${pub_sub}_unkeyed_be.csv
109touch $my_file
110export extra_args=""
111for index in ${num_reps}; do
112 for DATALEN in ${dataLens}; do
113 export command="$executable -domain $domain -datalen $DATALEN -best $commands_string $extra_args"
114 echo $command ---- $index
115 $command >> $my_file;
116 if [[ "$domain" == "1" ]]; then
117 export domain="2"
118 else
119 export domain="1"
120 fi
121 export extra_args=" -noOutputHeaders "
122 done
123done
124
125export my_file=$output_folder/${lat_thr}_${pub_sub}_keyed_rel.csv
126touch $my_file
127export extra_args=""
128for index in ${num_reps}; do
129 for DATALEN in ${dataLens}; do
130 export command="$executable -domain $domain -datalen $DATALEN -keyed -instances 100000 $commands_string $extra_args"
131 echo $command ---- $index
132 $command >> $my_file;
133 if [[ "$domain" == "1" ]]; then
134 export domain="2"
135 else
136 export domain="1"
137 fi
138 export extra_args=" -noOutputHeaders "
139 done
140done
141
142export my_file=$output_folder/${lat_thr}_${pub_sub}_keyed_be.csv
143touch $my_file
144export extra_args=""
145for index in ${num_reps}; do
146 for DATALEN in ${dataLens}; do
147 export command="$executable -domain $domain -datalen $DATALEN -keyed -instances 100000 -best $commands_string $extra_args"
148 echo $command ---- $index
149 $command >> $my_file;
150 if [[ "$domain" == "1" ]]; then
151 export domain="2"
152 else
153 export domain="1"
154 fi
155 export extra_args=" -noOutputHeaders "
156 done
157done
158
159# if [[ ${lat_thr} == "thr" ]]; then
160
161# if [[ "$pub_sub" == "pub" ]]; then
162# echo "Publisher side"
163# export commands_string="${commands_string} -batchSize 0"
164# fi
165
166# export my_file=$output_folder/${lat_thr}_${pub_sub}_unkeyed_be_noBatch.csv
167# touch $my_file
168# export extra_args=""
169# for index in ${num_reps}; do
170# for DATALEN in ${dataLens}; do
171# export command=" $executable -domain $domain -datalen $DATALEN -best $commands_string $extra_args"
172# echo $command ---- $index
173# $command >> $my_file;
174# if [[ "$domain" == "1" ]]; then
175# export domain="2"
176# else
177# export domain="1"
178# fi
179# export extra_args=" -noOutputHeaders "
180# done
181# done
182
183# export my_file=$output_folder/${lat_thr}_${pub_sub}_unkeyed_rel_noBatch.csv
184# touch $my_file
185# export extra_args=""
186# for index in ${num_reps}; do
187# for DATALEN in ${dataLens}; do
188# export command=" $executable -domain $domain -datalen $DATALEN $commands_string $extra_args"
189# echo $command ---- $index
190# $command >> $my_file;
191# if [[ "$domain" == "1" ]]; then
192# export domain="2"
193# else
194# export domain="1"
195# fi
196# export extra_args=" -noOutputHeaders "
197# done
198# done
199
200# fi
Test Software
The following software was used to perform these tests:
RTI Connext DDS 7.0.0 Host and Target Libraries for x64 Linux (x64Linux4gcc7.3.0)
Test Hardware
The following hardware was used to perform these tests:
Linux Nodes
Dell R340 Servers (13 Units)
Processor: Intel Xeon E-2278G (3.4-5GHz, 8c/16t, 16MB cache, 2 memory channels @2666MHz)
RAM: 4x 16GB 2666MHz DIMM (64GB RAM)
HD: 480GB SATA SSD
NIC 1: Intel 710 dual port 10Gbps SFP
OS: Ubuntu 20.04 -- gcc 9.3.0
Switch
Dell 2048 -- 10Gbps switch
1.2.3.2. Keyed, UDPv4 10Gbps Network, Java
The graph below shows the one-way latency without load between a Publisher and a Subscriber running in two Linux nodes in a 10Gbps network. The numbers are for best-effort as well as strict reliable reliability scenarios.
Note
We use the median (50th percentile) instead of the average in order to get a more stable measurement that does not account for spurious outliers. We also calculate the average value and other percentile values, which can be seen in the Detailed Statistics section below.
Detailed Statistics
The following tables contain the raw numbers presented by RTI Perftest. These numbers are the exact output with no further processing.
Best Effort
Sample Size (Bytes) |
Ave (us) |
Std (us) |
Min (us) |
Max (us) |
50% (μs) |
90% (us) |
99% (us) |
99.99% (us) |
99.9999% (us) |
---|---|---|---|---|---|---|---|---|---|
32 |
23 |
149.8 |
21 |
82639 |
22 |
24 |
26 |
21 |
21 |
64 |
23 |
148.3 |
21 |
80660 |
22 |
24 |
26 |
21 |
21 |
128 |
23 |
141.4 |
21 |
74572 |
22 |
24 |
26 |
21 |
21 |
256 |
23 |
145.8 |
21 |
77213 |
22 |
24 |
26 |
21 |
21 |
512 |
24 |
160.1 |
22 |
87385 |
23 |
25 |
27 |
22 |
22 |
1024 |
27 |
158.7 |
23 |
77786 |
26 |
28 |
29 |
23 |
23 |
2048 |
49 |
342.4 |
25 |
100147 |
46 |
65 |
76 |
25 |
25 |
4096 |
47 |
293.4 |
31 |
100146 |
43 |
63 |
65 |
31 |
31 |
8192 |
49 |
174.8 |
42 |
77736 |
45 |
59 |
62 |
42 |
42 |
16384 |
100 |
25.4 |
53 |
265 |
89 |
135 |
142 |
53 |
53 |
32768 |
183 |
2.6 |
83 |
259 |
183 |
185 |
188 |
83 |
83 |
63000 |
198 |
2.8 |
114 |
273 |
198 |
199 |
202 |
114 |
114 |
Reliable
Sample Size (Bytes) |
Ave (us) |
Std (us) |
Min (us) |
Max (us) |
50% (μs) |
90% (us) |
99% (us) |
99.99% (us) |
99.9999% (us) |
---|---|---|---|---|---|---|---|---|---|
32 |
24 |
144.6 |
22 |
77017 |
24 |
25 |
27 |
22 |
22 |
64 |
25 |
158.8 |
23 |
85518 |
24 |
26 |
27 |
23 |
23 |
128 |
24 |
148.8 |
22 |
80069 |
24 |
25 |
26 |
22 |
22 |
256 |
25 |
145.9 |
23 |
75280 |
24 |
25 |
29 |
23 |
23 |
512 |
26 |
148.6 |
24 |
72971 |
25 |
27 |
30 |
24 |
24 |
1024 |
28 |
156.5 |
24 |
76960 |
27 |
29 |
35 |
24 |
24 |
2048 |
32 |
179.1 |
27 |
83329 |
30 |
34 |
56 |
27 |
27 |
4096 |
37 |
200.8 |
31 |
85327 |
34 |
38 |
66 |
31 |
31 |
8192 |
51 |
209.2 |
43 |
76057 |
46 |
60 |
91 |
43 |
43 |
16384 |
100 |
28.0 |
54 |
185 |
96 |
139 |
162 |
54 |
54 |
32768 |
174 |
15.5 |
115 |
240 |
183 |
186 |
189 |
115 |
115 |
63000 |
198 |
2.7 |
123 |
272 |
198 |
200 |
205 |
123 |
123 |
Perftest Scripts
To produce these tests, we executed RTI Perftest for Java. The exact script used can be found here:
1echo EXECUTABLE IS $1
2export executable=$1
3
4export folder_base="$(dirname "${executable}")"/../..
5
6echo OUTPUT PATH IS $2
7export output_folder=$2
8export pub_sub="pub"
9export lat_thr="lat"
10export num_reps="1 2"
11export dataLens="32 64 128 256 512 1024 2048 4096 8192 16384 32768 63000"
12export domain="2"
13
14if [[ -z "$3" ]]; then
15 echo "You need a third argument with publisher or subscriber"
16 exit -1
17else
18 if [[ "$3" == "publisher" ]]; then
19 echo "Publisher"
20 export pub_sub="pub"
21
22 elif [[ "$3" == "subscriber" ]]; then
23 echo "Subscriber"
24 export pub_sub="sub"
25 else
26 echo "It must be either publisher or subscriber"
27 exit -1
28 fi
29fi
30
31if [[ -z "$4" ]]; then
32 echo "You need a forth argument with lat or thr"
33 exit -1
34else
35 if [[ "$4" == "thr" ]]; then
36 echo "Throughput test"
37 export ${lat_thr}_thr="thr"
38
39 elif [[ "$4" == "lat" ]]; then
40 echo "Latency test"
41 export ${lat_thr}_thr="lat"
42 else
43 echo "It must be either lat or thr"
44 exit -1
45 fi
46fi
47
48if [[ -z "$5" ]]; then
49 echo "Using default nics"
50 export nic1=172.16.0.1
51 export nic2=172.16.0.2
52else
53 echo "Using custom nic: $5"
54 export nic1=$5
55 export nic2=$5
56fi
57
58sudo /set_${lat_thr}_mode.sh
59sleep 10
60
61export exec_time=20
62
63export pub_string="-pub \
64 -transport UDPv4 \
65 -nic $nic1 \
66 -noPrint \
67 -exec $exec_time"
68
69if [[ ${lat_thr} == "lat" ]]; then
70 export pub_string="$pub_string \
71 -latencyTest"
72fi
73
74export sub_string="-sub \
75 -transport UDPv4 \
76 -nic $nic2 \
77 -noPrint"
78
79if [[ "$pub_sub" == "pub" ]]; then
80 echo "Publisher side"
81 export commands_string=${pub_string}
82else
83 echo "Subscriber side"
84 export commands_string=${sub_string}
85fi
86
87
88cd $folder_base
89mkdir -p $output_folder
90
91export my_file=$output_folder/${lat_thr}_${pub_sub}_unkeyed_rel.csv
92touch $my_file
93export extra_args=""
94for index in ${num_reps}; do
95 for DATALEN in ${dataLens}; do
96 export command="$executable -domain $domain -datalen $DATALEN $commands_string $extra_args"
97 echo $command ---- $index
98 $command >> $my_file;
99 if [[ "$domain" == "1" ]]; then
100 export domain="2"
101 else
102 export domain="1"
103 fi
104 export extra_args=" -noOutputHeaders "
105 done
106done
107
108export my_file=$output_folder/${lat_thr}_${pub_sub}_unkeyed_be.csv
109touch $my_file
110export extra_args=""
111for index in ${num_reps}; do
112 for DATALEN in ${dataLens}; do
113 export command="$executable -domain $domain -datalen $DATALEN -best $commands_string $extra_args"
114 echo $command ---- $index
115 $command >> $my_file;
116 if [[ "$domain" == "1" ]]; then
117 export domain="2"
118 else
119 export domain="1"
120 fi
121 export extra_args=" -noOutputHeaders "
122 done
123done
124
125export my_file=$output_folder/${lat_thr}_${pub_sub}_keyed_rel.csv
126touch $my_file
127export extra_args=""
128for index in ${num_reps}; do
129 for DATALEN in ${dataLens}; do
130 export command="$executable -domain $domain -datalen $DATALEN -keyed -instances 100000 $commands_string $extra_args"
131 echo $command ---- $index
132 $command >> $my_file;
133 if [[ "$domain" == "1" ]]; then
134 export domain="2"
135 else
136 export domain="1"
137 fi
138 export extra_args=" -noOutputHeaders "
139 done
140done
141
142export my_file=$output_folder/${lat_thr}_${pub_sub}_keyed_be.csv
143touch $my_file
144export extra_args=""
145for index in ${num_reps}; do
146 for DATALEN in ${dataLens}; do
147 export command="$executable -domain $domain -datalen $DATALEN -keyed -instances 100000 -best $commands_string $extra_args"
148 echo $command ---- $index
149 $command >> $my_file;
150 if [[ "$domain" == "1" ]]; then
151 export domain="2"
152 else
153 export domain="1"
154 fi
155 export extra_args=" -noOutputHeaders "
156 done
157done
158
159# if [[ ${lat_thr} == "thr" ]]; then
160
161# if [[ "$pub_sub" == "pub" ]]; then
162# echo "Publisher side"
163# export commands_string="${commands_string} -batchSize 0"
164# fi
165
166# export my_file=$output_folder/${lat_thr}_${pub_sub}_unkeyed_be_noBatch.csv
167# touch $my_file
168# export extra_args=""
169# for index in ${num_reps}; do
170# for DATALEN in ${dataLens}; do
171# export command=" $executable -domain $domain -datalen $DATALEN -best $commands_string $extra_args"
172# echo $command ---- $index
173# $command >> $my_file;
174# if [[ "$domain" == "1" ]]; then
175# export domain="2"
176# else
177# export domain="1"
178# fi
179# export extra_args=" -noOutputHeaders "
180# done
181# done
182
183# export my_file=$output_folder/${lat_thr}_${pub_sub}_unkeyed_rel_noBatch.csv
184# touch $my_file
185# export extra_args=""
186# for index in ${num_reps}; do
187# for DATALEN in ${dataLens}; do
188# export command=" $executable -domain $domain -datalen $DATALEN $commands_string $extra_args"
189# echo $command ---- $index
190# $command >> $my_file;
191# if [[ "$domain" == "1" ]]; then
192# export domain="2"
193# else
194# export domain="1"
195# fi
196# export extra_args=" -noOutputHeaders "
197# done
198# done
199
200# fi
Test Software
The following software was used to perform these tests:
RTI Connext DDS 7.0.0 Host and Target Libraries for x64 Linux (x64Linux4gcc7.3.0)
Test Hardware
The following hardware was used to perform these tests:
Linux Nodes
Dell R340 Servers (13 Units)
Processor: Intel Xeon E-2278G (3.4-5GHz, 8c/16t, 16MB cache, 2 memory channels @2666MHz)
RAM: 4x 16GB 2666MHz DIMM (64GB RAM)
HD: 480GB SATA SSD
NIC 1: Intel 710 dual port 10Gbps SFP
OS: Ubuntu 20.04 -- gcc 9.3.0
Switch
Dell 2048 -- 10Gbps switch
The graph below shows the expected throughput behavior when performing a 1-1 communication between two Linux nodes in a 10Gbps network. The numbers are for best-effort as well as strict reliable reliability scenarios.
Note
By default, RTI Perftest enables batching when performing a Maximum Throughput test. The batching feature allows sending more than one data sample per RTPS packet, improving network performance for small data sizes. See the RTI Connext Core Libraries User’s Manual for more information on batching.
The batch maximum size is set by RTI Perftest to be 8192 bytes; after 8192 bytes, batching is not enabled.
Detailed Statistics
This table contains the raw numbers presented by RTI Perftest. These numbers are the exact output with no further processing.
Best Effort
Sample Size (Bytes) |
Total Samples |
Avg Samples/s |
Avg Mbps |
Lost Samples |
Lost Samples (%) |
---|---|---|---|---|---|
32 |
11908941 |
593851 |
152.0 |
2212864 |
15.67 |
64 |
11570304 |
576792 |
295.3 |
1887488 |
14.03 |
128 |
11167206 |
556712 |
570.1 |
1648192 |
12.86 |
256 |
10719392 |
534353 |
1094.4 |
1294865 |
10.78 |
512 |
9619836 |
479538 |
1964.2 |
1322880 |
12.09 |
1024 |
8021110 |
399844 |
3275.5 |
755328 |
8.61 |
2048 |
6121644 |
305157 |
4999.7 |
148544 |
2.37 |
4096 |
4125892 |
205670 |
6739.4 |
39734 |
0.95 |
8192 |
2772479 |
138609 |
9083.9 |
215221 |
7.20 |
16384 |
1500019 |
74999 |
9830.3 |
6774 |
0.45 |
32768 |
752365 |
37617 |
9861.1 |
3135 |
0.41 |
63000 |
391718 |
19586 |
9871.1 |
1648 |
0.42 |
Reliable
Sample Size (Bytes) |
Total Samples |
Avg Samples/s |
Avg Mbps |
Lost Samples |
Lost Samples (%) |
---|---|---|---|---|---|
32 |
11002930 |
552396 |
141.4 |
0 |
0.00 |
64 |
10968833 |
548199 |
280.7 |
0 |
0.00 |
128 |
10648192 |
532290 |
545.1 |
0 |
0.00 |
256 |
10160064 |
507967 |
1040.3 |
0 |
0.00 |
512 |
9042385 |
452088 |
1851.8 |
0 |
0.00 |
1024 |
7484512 |
374018 |
3064.0 |
0 |
0.00 |
2048 |
5479620 |
273835 |
4486.5 |
0 |
0.00 |
4096 |
3432186 |
171607 |
5623.2 |
0 |
0.00 |
8192 |
2085584 |
104284 |
6834.4 |
0 |
0.00 |
16384 |
1499071 |
74952 |
9824.2 |
0 |
0.00 |
32768 |
752079 |
37603 |
9857.3 |
0 |
0.00 |
63000 |
391614 |
19580 |
9868.5 |
0 |
0.00 |
Perftest Scripts
To produce these tests, we executed RTI Perftest for Java. The exact script used can be found here:
1echo EXECUTABLE IS $1
2export executable=$1
3
4export folder_base="$(dirname "${executable}")"/../..
5
6echo OUTPUT PATH IS $2
7export output_folder=$2
8export pub_sub="pub"
9export lat_thr="lat"
10export num_reps="1 2"
11export dataLens="32 64 128 256 512 1024 2048 4096 8192 16384 32768 63000"
12export domain="2"
13
14if [[ -z "$3" ]]; then
15 echo "You need a third argument with publisher or subscriber"
16 exit -1
17else
18 if [[ "$3" == "publisher" ]]; then
19 echo "Publisher"
20 export pub_sub="pub"
21
22 elif [[ "$3" == "subscriber" ]]; then
23 echo "Subscriber"
24 export pub_sub="sub"
25 else
26 echo "It must be either publisher or subscriber"
27 exit -1
28 fi
29fi
30
31if [[ -z "$4" ]]; then
32 echo "You need a forth argument with lat or thr"
33 exit -1
34else
35 if [[ "$4" == "thr" ]]; then
36 echo "Throughput test"
37 export ${lat_thr}_thr="thr"
38
39 elif [[ "$4" == "lat" ]]; then
40 echo "Latency test"
41 export ${lat_thr}_thr="lat"
42 else
43 echo "It must be either lat or thr"
44 exit -1
45 fi
46fi
47
48if [[ -z "$5" ]]; then
49 echo "Using default nics"
50 export nic1=172.16.0.1
51 export nic2=172.16.0.2
52else
53 echo "Using custom nic: $5"
54 export nic1=$5
55 export nic2=$5
56fi
57
58sudo /set_${lat_thr}_mode.sh
59sleep 10
60
61export exec_time=20
62
63export pub_string="-pub \
64 -transport UDPv4 \
65 -nic $nic1 \
66 -noPrint \
67 -exec $exec_time"
68
69if [[ ${lat_thr} == "lat" ]]; then
70 export pub_string="$pub_string \
71 -latencyTest"
72fi
73
74export sub_string="-sub \
75 -transport UDPv4 \
76 -nic $nic2 \
77 -noPrint"
78
79if [[ "$pub_sub" == "pub" ]]; then
80 echo "Publisher side"
81 export commands_string=${pub_string}
82else
83 echo "Subscriber side"
84 export commands_string=${sub_string}
85fi
86
87
88cd $folder_base
89mkdir -p $output_folder
90
91export my_file=$output_folder/${lat_thr}_${pub_sub}_unkeyed_rel.csv
92touch $my_file
93export extra_args=""
94for index in ${num_reps}; do
95 for DATALEN in ${dataLens}; do
96 export command="$executable -domain $domain -datalen $DATALEN $commands_string $extra_args"
97 echo $command ---- $index
98 $command >> $my_file;
99 if [[ "$domain" == "1" ]]; then
100 export domain="2"
101 else
102 export domain="1"
103 fi
104 export extra_args=" -noOutputHeaders "
105 done
106done
107
108export my_file=$output_folder/${lat_thr}_${pub_sub}_unkeyed_be.csv
109touch $my_file
110export extra_args=""
111for index in ${num_reps}; do
112 for DATALEN in ${dataLens}; do
113 export command="$executable -domain $domain -datalen $DATALEN -best $commands_string $extra_args"
114 echo $command ---- $index
115 $command >> $my_file;
116 if [[ "$domain" == "1" ]]; then
117 export domain="2"
118 else
119 export domain="1"
120 fi
121 export extra_args=" -noOutputHeaders "
122 done
123done
124
125export my_file=$output_folder/${lat_thr}_${pub_sub}_keyed_rel.csv
126touch $my_file
127export extra_args=""
128for index in ${num_reps}; do
129 for DATALEN in ${dataLens}; do
130 export command="$executable -domain $domain -datalen $DATALEN -keyed -instances 100000 $commands_string $extra_args"
131 echo $command ---- $index
132 $command >> $my_file;
133 if [[ "$domain" == "1" ]]; then
134 export domain="2"
135 else
136 export domain="1"
137 fi
138 export extra_args=" -noOutputHeaders "
139 done
140done
141
142export my_file=$output_folder/${lat_thr}_${pub_sub}_keyed_be.csv
143touch $my_file
144export extra_args=""
145for index in ${num_reps}; do
146 for DATALEN in ${dataLens}; do
147 export command="$executable -domain $domain -datalen $DATALEN -keyed -instances 100000 -best $commands_string $extra_args"
148 echo $command ---- $index
149 $command >> $my_file;
150 if [[ "$domain" == "1" ]]; then
151 export domain="2"
152 else
153 export domain="1"
154 fi
155 export extra_args=" -noOutputHeaders "
156 done
157done
158
159# if [[ ${lat_thr} == "thr" ]]; then
160
161# if [[ "$pub_sub" == "pub" ]]; then
162# echo "Publisher side"
163# export commands_string="${commands_string} -batchSize 0"
164# fi
165
166# export my_file=$output_folder/${lat_thr}_${pub_sub}_unkeyed_be_noBatch.csv
167# touch $my_file
168# export extra_args=""
169# for index in ${num_reps}; do
170# for DATALEN in ${dataLens}; do
171# export command=" $executable -domain $domain -datalen $DATALEN -best $commands_string $extra_args"
172# echo $command ---- $index
173# $command >> $my_file;
174# if [[ "$domain" == "1" ]]; then
175# export domain="2"
176# else
177# export domain="1"
178# fi
179# export extra_args=" -noOutputHeaders "
180# done
181# done
182
183# export my_file=$output_folder/${lat_thr}_${pub_sub}_unkeyed_rel_noBatch.csv
184# touch $my_file
185# export extra_args=""
186# for index in ${num_reps}; do
187# for DATALEN in ${dataLens}; do
188# export command=" $executable -domain $domain -datalen $DATALEN $commands_string $extra_args"
189# echo $command ---- $index
190# $command >> $my_file;
191# if [[ "$domain" == "1" ]]; then
192# export domain="2"
193# else
194# export domain="1"
195# fi
196# export extra_args=" -noOutputHeaders "
197# done
198# done
199
200# fi
Test Software
The following software was used to perform these tests:
RTI Connext DDS 7.0.0 Host and Target Libraries for x64 Linux (x64Linux4gcc7.3.0)
Test Hardware
The following hardware was used to perform these tests:
Linux Nodes
Dell R340 Servers (13 Units)
Processor: Intel Xeon E-2278G (3.4-5GHz, 8c/16t, 16MB cache, 2 memory channels @2666MHz)
RAM: 4x 16GB 2666MHz DIMM (64GB RAM)
HD: 480GB SATA SSD
NIC 1: Intel 710 dual port 10Gbps SFP
OS: Ubuntu 20.04 -- gcc 9.3.0
Switch
Dell 2048 -- 10Gbps switch