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 (μs) |
Std (μs) |
Min (μs) |
Max (μs) |
50% (μs) |
90% (μs) |
99% (μs) |
99.99% (μs) |
99.9999% (μs) |
---|---|---|---|---|---|---|---|---|---|
32 |
20 |
6.0 |
19 |
2482 |
20 |
20 |
24 |
19 |
19 |
64 |
20 |
5.8 |
19 |
2301 |
20 |
21 |
24 |
19 |
19 |
128 |
20 |
6.2 |
19 |
2723 |
20 |
21 |
24 |
19 |
19 |
256 |
20 |
6.1 |
19 |
2798 |
20 |
21 |
24 |
19 |
19 |
512 |
21 |
5.7 |
19 |
2341 |
21 |
21 |
25 |
19 |
19 |
1024 |
26 |
6.9 |
21 |
2535 |
26 |
28 |
29 |
21 |
21 |
2048 |
31 |
34.0 |
24 |
4928 |
30 |
33 |
62 |
24 |
24 |
4096 |
33 |
39.4 |
29 |
4991 |
31 |
34 |
64 |
29 |
29 |
8192 |
47 |
11.0 |
39 |
2700 |
43 |
59 |
62 |
39 |
39 |
16384 |
96 |
104.4 |
50 |
26826 |
85 |
129 |
135 |
50 |
50 |
32768 |
181 |
13.2 |
76 |
2336 |
181 |
183 |
188 |
76 |
76 |
63000 |
195 |
15.0 |
141 |
2713 |
195 |
197 |
203 |
141 |
141 |
Reliable
Sample Size (Bytes) |
Ave (μs) |
Std (μs) |
Min (μs) |
Max (μs) |
50% (μs) |
90% (μs) |
99% (μs) |
99.99% (μs) |
99.9999% (μs) |
---|---|---|---|---|---|---|---|---|---|
32 |
22 |
6.4 |
20 |
2776 |
21 |
22 |
25 |
20 |
20 |
64 |
21 |
6.2 |
20 |
2448 |
21 |
22 |
25 |
20 |
20 |
128 |
22 |
6.3 |
21 |
2508 |
22 |
22 |
26 |
21 |
21 |
256 |
22 |
6.1 |
20 |
2425 |
22 |
22 |
27 |
20 |
20 |
512 |
23 |
7.0 |
21 |
2754 |
22 |
23 |
28 |
21 |
21 |
1024 |
27 |
8.1 |
22 |
2616 |
26 |
29 |
50 |
22 |
22 |
2048 |
31 |
34.0 |
24 |
4928 |
30 |
33 |
62 |
24 |
24 |
4096 |
33 |
39.4 |
29 |
4991 |
31 |
34 |
64 |
29 |
29 |
8192 |
48 |
15.6 |
40 |
4417 |
43 |
60 |
85 |
40 |
40 |
16384 |
95 |
27.9 |
51 |
2391 |
94 |
133 |
153 |
51 |
51 |
32768 |
158 |
22.3 |
95 |
2502 |
158 |
182 |
186 |
95 |
95 |
63000 |
176 |
20.5 |
150 |
2819 |
173 |
196 |
200 |
150 |
150 |
100000 |
227 |
16.2 |
191 |
2498 |
224 |
234 |
245 |
191 |
191 |
500000 |
697 |
42.6 |
557 |
2963 |
700 |
737 |
759 |
557 |
557 |
1048576 |
1408 |
55.4 |
1192 |
3672 |
1405 |
1430 |
1573 |
1192 |
1192 |
1548576 |
1958 |
121.1 |
1677 |
5425 |
2002 |
2035 |
2106 |
1677 |
1677 |
4194304 |
4823 |
135.0 |
4742 |
9008 |
4800 |
4902 |
5161 |
4742 |
4742 |
10485760 |
12324 |
388.1 |
12182 |
21966 |
12246 |
12433 |
12737 |
12182 |
12182 |
Perftest Scripts
To produce these tests, we executed RTI Perftest for Java. The exact script used can be found here:
1#!/bin/bash
2filename=$0
3script_location=$(cd "$(dirname "$filename")" || exit 255; pwd)
4
5export datasizes="32 64 128 256 512 1024 2048 4096 8192 16384 32768 63000"
6export datasizes_extended="${datasizes} 100000 500000 1048576 1548576 4194304 10485760"
7
8export domain="2"
9export exec_time=20
10export num_reps=1
11export instance_number=100000
12export core=0
13
14# We will use some colors to improve visibility of errors and info messages.
15RED='\033[0;31m'
16GREEN='\033[0;32m'
17YELLOW='\033[0;33m'
18BLUE='\033[0;34m'
19LIGHTBLUE='\033[0;36m'
20NC='\033[0m'
21INFO_TAG="${GREEN}[INFO]:${NC}"
22WARNING_TAG="${YELLOW}[WARNING]:${NC}"
23ERROR_TAG="${RED}[ERROR]:${NC}"
24
25export ip_machine_1="10.2.75.20"
26export ip_machine_2="10.2.75.21"
27export if10Gbps="enp1s0f0"
28export if1Gbps="eno1"
29
30################################################################################
31
32function disable_colors() {
33 export RED=""
34 export GREEN=""
35 export YELLOW=""
36 export NC=""
37 export BLUE=""
38 export LIGHTBLUE=""
39 export INFO_TAG="${GREEN}[INFO]:${NC}"
40 export WARNING_TAG="${YELLOW}[WARNING]:${NC}"
41 export ERROR_TAG="${RED}[ERROR]:${NC}"
42}
43
44function change_domain() {
45 if [[ "$domain" == "1" ]]; then
46 export domain="2"
47 else
48 export domain="1"
49 fi
50}
51
52# Usage: execute_test <keyed/unkeyed> <rel/be> <datasizes> <batchSize>
53function execute_test() {
54
55 local keyed_unkeyed=$1
56 local rel_be=$2
57 local datasizes_test=$3
58 local other_args=$4
59 local name_suffix=$5
60
61 local commands_string_test=$commands_string
62 local tag=""
63
64 if [[ "${keyed_unkeyed}" == "keyed" ]]; then
65 commands_string_test="${commands_string_test} -keyed -instances $instance_number"
66 tag="[${YELLOW}${transport}${NC}|${BLUE}K${NC}|"
67 else
68 tag="[${YELLOW}${transport}${NC}|${LIGHTBLUE}UK${NC}|"
69 fi
70
71 if [[ "${rel_be}" == "be" ]]; then
72 commands_string_test="${commands_string_test} -bestEffort"
73 tag="${tag}${YELLOW}BE${NC}]"
74 else
75 tag="${tag}${RED}REL${NC}]"
76 fi
77
78 tag="${tag}[${LIGHTBLUE}${lat_thr}${NC}]"
79
80 local output_file=$output_folder/${lat_thr}_${role}_${keyed_unkeyed}_${rel_be}${name_suffix}.csv
81
82 if [[ "$role" == "pub" ]]; then
83 echo -e "${YELLOW}[TEST]: $keyed_unkeyed, $rel_be. ${NC}"
84 fi
85
86 if [[ "$LANGUAGE" != "java" && "$LANGUAGE" != "cs" ]]; then
87 export pre_command_string="taskset -c $core"
88 fi
89
90 # Get the aprox time this will take:
91 total_tests=$((`wc -w <<< "$datasizes_test"` * num_reps))
92 total_time=$((total_tests * exec_time))
93
94 touch $output_file
95 local no_headers=""
96 local current_test=0
97 for index in $(seq 1 ${num_reps}); do
98 for DATALEN in ${datasizes_test}; do
99 current_test=$((current_test + 1))
100 export command="$pre_command_string $executable -domain $domain -dataLen $DATALEN $commands_string_test $other_args $no_headers"
101 if [[ "$role" == "pub" ]]; then
102 echo -e "Test ${tag} (${current_test}/${total_tests}) -- Total time = ${total_time}s"
103 echo -e ${BLUE}$command${NC}
104 else
105 echo -e ${LIGHTBLUE}$command${NC}
106 fi
107 if [[ "$LANGUAGE" == "cs" && "$role" == "pub" ]]; then
108 sleep 3
109 fi
110 $command >> $output_file;
111 no_headers=" -noOutputHeaders"
112 change_domain
113 done
114 done
115}
116
117################################################################################
118# PARSE COMMAND LINE OPTIONS:
119
120while [ "$1" != "" ]; do
121 case $1 in
122 --executable)
123 executable=$2
124 shift
125 ;;
126 --output-folder)
127 output_folder=$2
128 shift
129 ;;
130 --role)
131 export role=$2
132 shift
133 ;;
134 --core)
135 export core=$2
136 shift
137 ;;
138 --test-kind)
139 export lat_thr=$2
140 shift
141 ;;
142 --interface1)
143 export interface=$2
144 shift
145 ;;
146 --interface2)
147 export interface2=$2
148 shift
149 ;;
150 --ip1)
151 export ip1=$2
152 shift
153 ;;
154 --ip2)
155 export ip2=$2
156 shift
157 ;;
158 --repetitions)
159 export num_reps=$2
160 shift
161 ;;
162 --domain)
163 export domain=$2
164 shift
165 ;;
166 --execution-time)
167 export exec_time=$2
168 shift
169 ;;
170 --transport)
171 export transport=$2
172 shift
173 ;;
174 --datalen)
175 export datalen_input=$2
176 shift
177 ;;
178 --file-suffix)
179 export file_suffix=$2
180 shift
181 ;;
182 --executable-suffix)
183 export executable_suffix=$2
184 shift
185 ;;
186 --extra-arguments)
187 export extra_arguments=$2
188 shift
189 ;;
190 --extra-arguments-pub)
191 export extra_arguments_pub=$2
192 shift
193 ;;
194 --extra-arguments-sub)
195 export extra_arguments_sub=$2
196 shift
197 ;;
198 --skip-no-batching)
199 export skip_no_batching="1"
200 ;;
201 --skip-be)
202 export skip_be_tests="1"
203 ;;
204 --skip-rel)
205 export skip_rel_tests="1"
206 ;;
207 --skip-keyed)
208 export skip_keyed_data="1"
209 ;;
210 --skip-large-data)
211 export skip_large_data="1"
212 ;;
213 --large-data)
214 export large_data="1"
215 ;;
216 --keyed)
217 export skip_unkeyed="1"
218 ;;
219 --unkeyed)
220 export skip_keyed_data="1"
221 ;;
222 --no-batching)
223 export no_batching_only="1"
224 ;;
225 --reliable)
226 export skip_be_tests="1"
227 ;;
228 --best-effort)
229 export skip_rel_tests="1"
230 ;;
231 --security)
232 export security_only="$2"
233 shift
234 ;;
235 --micro)
236 export micro="1"
237 ;;
238 --tss)
239 export tss="1"
240 ;;
241 --no-colors)
242 export NO_COLORS="1"
243 ;;
244 --language)
245 export LANGUAGE=$2
246 shift
247 ;;
248 *)
249 echo -e "unknown parameter \"$1\""
250 exit 255
251 ;;
252 esac
253 shift
254done
255
256if [[ "$NO_COLORS" == "1" ]]; then
257 disable_colors
258fi
259
260export folder_base="$(dirname "${executable}")"/../../..
261
262if [[ $LANGUAGE == "java" || "$LANGUAGE" == "cs" ]]; then
263 export folder_base="$(dirname "${executable}")"/../..
264fi
265if [[ $tss == "1" ]]; then
266 export folder_base="$(dirname "${executable}")"/../../../../..
267fi
268
269if [[ "${executable_suffix}" != "" ]]; then
270 export executable="${executable}${executable_suffix}"
271fi
272
273echo -e "${INFO_TAG} Perftest executable is: $executable"
274echo -e "${INFO_TAG} Output folder is: $output_folder"
275
276################################################################################
277
278if [[ "${skip_large_data}" == "1" ]]; then
279 export datasizes_extended=${datasizes}
280elif [[ "${large_data}" == "1" ]]; then
281 export datasizes=${datasizes_extended}
282fi
283
284if [[ "${datalen_input}" != "" ]]; then
285 echo -e "${YELLOW}[TEST] Testing only for ${datalen_input}${NC}"
286 export datasizes=${datalen_input}
287 export datasizes_extended=${datalen_input}
288 if [[ "${no_batching_only}" != "1" ]]; then
289 export skip_large_data="1"
290 fi
291fi
292
293if [[ "$role" != "pub" && "$role" != "sub" ]]; then
294 echo -e "${ERROR_TAG} It must be either publisher or subscriber"
295 exit 255
296fi
297
298if [[ "$lat_thr" != "thr" && "$lat_thr" != "lat" ]]; then
299 echo -e "${ERROR_TAG} It must be either lat or thr"
300 exit 255
301fi
302
303if [[ "${interface}" == "" ]]; then
304 echo "Using default nics"
305 export nic_publisher=${ip_machine_1}
306 export nic_subscriber=${ip_machine_2}
307else
308 export nic_publisher=$interface
309 echo -e "${INFO_TAG} Using nic_publisher: ${nic_publisher}"
310
311 if [[ "${interface2}" == "" ]]; then
312 export nic_subscriber=$interface
313 else
314 export nic_subscriber=$interface2
315 fi
316 echo -e "${INFO_TAG} Using nic_subscriber: ${nic_subscriber}"
317
318 if [[ "${ip1}" != "" ]]; then
319 export ip_publisher=$ip1
320 echo "Using ip_publisher: ${ip_publisher}"
321 fi
322
323 if [[ "${ip2}" != "" ]]; then
324 export ip_subscriber=$ip2
325 echo "Using ip_subscriber: ${ip_subscriber}"
326 fi
327
328fi
329
330export transport_string="-transport $transport"
331
332if [[ "$transport" == "UDPv4" ]]; then
333
334 export transport_string_pub="$transport_string -nic $nic_publisher"
335 export transport_string_sub="$transport_string -nic $nic_subscriber"
336
337 if [[ "$micro" == "1" ]]; then
338 export transport_string_pub="$transport_string_pub -peer ${ip_subscriber}"
339 export transport_string_sub="$transport_string_sub -peer ${ip_publisher}"
340 fi
341
342elif [[ "$transport" == "TCP" ]]; then
343 export transport_string_pub="$transport_string \
344 -nic $nic_publisher \
345 -peer 0@tcpv4_lan://${ip_subscriber}:7400"
346 export transport_string_sub="$transport_string \
347 -nic $nic_subscriber \
348 -peer 0@tcpv4_lan://${ip_publisher}:7400"
349elif [[ "$transport" == "TLS" ]]; then
350 export transport_string_pub="$transport_string \
351 -nic $nic_publisher \
352 -peer tlsv4_lan://${ip_subscriber}:7400"
353 export transport_string_sub="$transport_string \
354 -nic $nic_subscriber \
355 -peer tlsv4_lan://${ip_publisher}:7400"
356elif [[ "$transport" == "UDPv4_WAN" ]]; then
357 export transport_string_pub="$transport_string \
358 -nic $nic_publisher \
359 -transportPublicAddress $ip_publisher:7400"
360 export transport_string_sub="$transport_string \
361 -nic $nic_subscriber \
362 -peer 0@udpv4_wan://${ip_publisher}:7400"
363else
364 export transport_string_pub="$transport_string"
365 export transport_string_sub="$transport_string"
366fi
367
368################################################################################
369
370export pub_string="-pub \
371 ${transport_string_pub} \
372 -noPrintIntervals \
373 -executionTime $exec_time"
374
375if [[ ${lat_thr} == "lat" ]]; then
376 export pub_string="$pub_string \
377 -latencyTest"
378fi
379
380export sub_string="-sub \
381 ${transport_string_sub} \
382 -noPrintIntervals"
383
384if [[ "$role" == "pub" ]]; then
385 echo -e "$INFO_TAG Publisher side running"
386 export commands_string=${pub_string}
387 export extra_arguments="${extra_arguments} ${extra_arguments_pub}"
388else
389 echo -e "$INFO_TAG Subscriber side running"
390 export commands_string=${sub_string}
391 export extra_arguments="${extra_arguments} ${extra_arguments_sub}"
392fi
393
394###############################################################################
395
396echo -e "${INFO_TAG} Executing: /set_${lat_thr}_mode.sh"
397sudo /set_${lat_thr}_mode.sh
398sleep 5
399
400cd $folder_base
401echo -e "${INFO_TAG} Folder Base is: $PWD"
402mkdir -p $output_folder
403
404# Tests that may use batching (when doing throughput tests)
405if [[ ${no_batching_only} != "1" ]]; then
406
407 # UNKEYED
408 if [[ "${skip_unkeyed}" == "" ]]; then
409
410 # RELIABLE
411 if [[ "${skip_rel_tests}" == "" ]]; then
412 execute_test "unkeyed" "rel" "${datasizes_extended}" "${extra_arguments}" "$file_suffix"
413 fi
414
415 # BEST EFFORT
416 if [[ "${skip_be_tests}" == "" ]]; then
417 execute_test "unkeyed" "be" "${datasizes}" "${extra_arguments}" "$file_suffix"
418 fi
419 fi
420
421 # KEYED
422 if [[ "${skip_keyed_data}" == "" ]]; then
423
424 # RELIABLE
425 if [[ "${skip_rel_tests}" == "" ]]; then
426 execute_test "keyed" "rel" "${datasizes}" "${extra_arguments}" "$file_suffix"
427 fi
428
429 # BEST EFFORT
430 if [[ "${skip_be_tests}" == "" ]]; then
431 execute_test "keyed" "be" "${datasizes}" "${extra_arguments}" "$file_suffix"
432 fi
433 fi
434
435fi
436
437if [[ "${skip_no_batching}" == "" || "${no_batching_only}" == "1" ]]; then
438 no_batching_tests="1"
439fi
440
441# Tests that will not use batching
442if [[ "${lat_thr}" == "thr" && "${no_batching_tests}" == "1" ]]; then
443
444 if [[ "$role" == "pub" ]]; then
445 export commands_string="${commands_string} -batchSize 0"
446 fi
447
448 # UNKEYED
449 if [[ "${skip_unkeyed}" == "" ]]; then
450
451 # RELIABLE
452 if [[ "${skip_rel_tests}" == "" ]]; then
453 execute_test "unkeyed" "rel" "${datasizes}" "${extra_arguments}" "_noBatch${file_suffix}"
454 fi
455
456 # BEST EFFORT
457 if [[ "${skip_be_tests}" == "" ]]; then
458 execute_test "unkeyed" "be" "${datasizes}" "${extra_arguments}" "_noBatch${file_suffix}"
459 fi
460 fi
461fi
1#!/bin/bash
2filename=$0
3script_location=$(cd "$(dirname "$filename")" || exit 255; pwd)
4
5echo -e "[Calling base_script/script.sh]"
6"${script_location}/../base_script/script.sh" $@ --transport UDPv4
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 |
17700096 |
882595 |
225.9 |
20174582 |
53.27 |
64 |
18409917 |
917734 |
469.9 |
18338816 |
49.90 |
128 |
16946176 |
844755 |
865.0 |
16763632 |
49.73 |
256 |
16088864 |
802014 |
1642.5 |
13554218 |
45.72 |
512 |
13913696 |
693583 |
2840.9 |
8483808 |
37.88 |
1024 |
11054553 |
551056 |
4514.2 |
5338960 |
32.57 |
2048 |
7920605 |
394831 |
6468.9 |
1030244 |
11.51 |
4096 |
5363579 |
267380 |
8761.5 |
47008 |
0.87 |
8192 |
2967926 |
148414 |
9726.5 |
36479 |
1.21 |
16384 |
1507207 |
75363 |
9877.9 |
1585 |
0.11 |
32768 |
755390 |
37772 |
9901.7 |
606 |
0.08 |
63000 |
393338 |
19667 |
9912.2 |
182 |
0.05 |
Reliable
Sample Size (Bytes) |
Total Samples |
Avg Samples/s |
Avg Mbps |
Lost Samples |
Lost Samples (%) |
---|---|---|---|---|---|
32 |
18124415 |
905919 |
231.9 |
0 |
0.00 |
64 |
17942273 |
896853 |
459.2 |
0 |
0.00 |
128 |
17080769 |
853903 |
874.4 |
0 |
0.00 |
256 |
15887169 |
794335 |
1626.8 |
0 |
0.00 |
512 |
13505826 |
675236 |
2765.8 |
0 |
0.00 |
1024 |
10476513 |
523539 |
4288.8 |
0 |
0.00 |
2048 |
7247561 |
362183 |
5934.0 |
0 |
0.00 |
4096 |
4529041 |
226428 |
7419.6 |
0 |
0.00 |
8192 |
2307381 |
115371 |
7560.9 |
0 |
0.00 |
16384 |
1506726 |
75336 |
9874.5 |
0 |
0.00 |
32768 |
755055 |
37758 |
9898.1 |
0 |
0.00 |
63000 |
393094 |
19655 |
9906.0 |
0 |
0.00 |
100000 |
244521 |
12226 |
9780.6 |
0 |
0.00 |
500000 |
42680 |
2135 |
8538.5 |
0 |
0.00 |
1048576 |
19467 |
974 |
8172.6 |
0 |
0.00 |
1548576 |
13311 |
665 |
8236.1 |
0 |
0.00 |
4194304 |
4884 |
244 |
8195.9 |
0 |
0.00 |
10485760 |
1756 |
88 |
7375.3 |
0 |
0.00 |
Perftest Scripts
To produce these tests, we executed RTI Perftest for Java. The exact script used can be found here:
1#!/bin/bash
2filename=$0
3script_location=$(cd "$(dirname "$filename")" || exit 255; pwd)
4
5export datasizes="32 64 128 256 512 1024 2048 4096 8192 16384 32768 63000"
6export datasizes_extended="${datasizes} 100000 500000 1048576 1548576 4194304 10485760"
7
8export domain="2"
9export exec_time=20
10export num_reps=1
11export instance_number=100000
12export core=0
13
14# We will use some colors to improve visibility of errors and info messages.
15RED='\033[0;31m'
16GREEN='\033[0;32m'
17YELLOW='\033[0;33m'
18BLUE='\033[0;34m'
19LIGHTBLUE='\033[0;36m'
20NC='\033[0m'
21INFO_TAG="${GREEN}[INFO]:${NC}"
22WARNING_TAG="${YELLOW}[WARNING]:${NC}"
23ERROR_TAG="${RED}[ERROR]:${NC}"
24
25export ip_machine_1="10.2.75.20"
26export ip_machine_2="10.2.75.21"
27export if10Gbps="enp1s0f0"
28export if1Gbps="eno1"
29
30################################################################################
31
32function disable_colors() {
33 export RED=""
34 export GREEN=""
35 export YELLOW=""
36 export NC=""
37 export BLUE=""
38 export LIGHTBLUE=""
39 export INFO_TAG="${GREEN}[INFO]:${NC}"
40 export WARNING_TAG="${YELLOW}[WARNING]:${NC}"
41 export ERROR_TAG="${RED}[ERROR]:${NC}"
42}
43
44function change_domain() {
45 if [[ "$domain" == "1" ]]; then
46 export domain="2"
47 else
48 export domain="1"
49 fi
50}
51
52# Usage: execute_test <keyed/unkeyed> <rel/be> <datasizes> <batchSize>
53function execute_test() {
54
55 local keyed_unkeyed=$1
56 local rel_be=$2
57 local datasizes_test=$3
58 local other_args=$4
59 local name_suffix=$5
60
61 local commands_string_test=$commands_string
62 local tag=""
63
64 if [[ "${keyed_unkeyed}" == "keyed" ]]; then
65 commands_string_test="${commands_string_test} -keyed -instances $instance_number"
66 tag="[${YELLOW}${transport}${NC}|${BLUE}K${NC}|"
67 else
68 tag="[${YELLOW}${transport}${NC}|${LIGHTBLUE}UK${NC}|"
69 fi
70
71 if [[ "${rel_be}" == "be" ]]; then
72 commands_string_test="${commands_string_test} -bestEffort"
73 tag="${tag}${YELLOW}BE${NC}]"
74 else
75 tag="${tag}${RED}REL${NC}]"
76 fi
77
78 tag="${tag}[${LIGHTBLUE}${lat_thr}${NC}]"
79
80 local output_file=$output_folder/${lat_thr}_${role}_${keyed_unkeyed}_${rel_be}${name_suffix}.csv
81
82 if [[ "$role" == "pub" ]]; then
83 echo -e "${YELLOW}[TEST]: $keyed_unkeyed, $rel_be. ${NC}"
84 fi
85
86 if [[ "$LANGUAGE" != "java" && "$LANGUAGE" != "cs" ]]; then
87 export pre_command_string="taskset -c $core"
88 fi
89
90 # Get the aprox time this will take:
91 total_tests=$((`wc -w <<< "$datasizes_test"` * num_reps))
92 total_time=$((total_tests * exec_time))
93
94 touch $output_file
95 local no_headers=""
96 local current_test=0
97 for index in $(seq 1 ${num_reps}); do
98 for DATALEN in ${datasizes_test}; do
99 current_test=$((current_test + 1))
100 export command="$pre_command_string $executable -domain $domain -dataLen $DATALEN $commands_string_test $other_args $no_headers"
101 if [[ "$role" == "pub" ]]; then
102 echo -e "Test ${tag} (${current_test}/${total_tests}) -- Total time = ${total_time}s"
103 echo -e ${BLUE}$command${NC}
104 else
105 echo -e ${LIGHTBLUE}$command${NC}
106 fi
107 if [[ "$LANGUAGE" == "cs" && "$role" == "pub" ]]; then
108 sleep 3
109 fi
110 $command >> $output_file;
111 no_headers=" -noOutputHeaders"
112 change_domain
113 done
114 done
115}
116
117################################################################################
118# PARSE COMMAND LINE OPTIONS:
119
120while [ "$1" != "" ]; do
121 case $1 in
122 --executable)
123 executable=$2
124 shift
125 ;;
126 --output-folder)
127 output_folder=$2
128 shift
129 ;;
130 --role)
131 export role=$2
132 shift
133 ;;
134 --core)
135 export core=$2
136 shift
137 ;;
138 --test-kind)
139 export lat_thr=$2
140 shift
141 ;;
142 --interface1)
143 export interface=$2
144 shift
145 ;;
146 --interface2)
147 export interface2=$2
148 shift
149 ;;
150 --ip1)
151 export ip1=$2
152 shift
153 ;;
154 --ip2)
155 export ip2=$2
156 shift
157 ;;
158 --repetitions)
159 export num_reps=$2
160 shift
161 ;;
162 --domain)
163 export domain=$2
164 shift
165 ;;
166 --execution-time)
167 export exec_time=$2
168 shift
169 ;;
170 --transport)
171 export transport=$2
172 shift
173 ;;
174 --datalen)
175 export datalen_input=$2
176 shift
177 ;;
178 --file-suffix)
179 export file_suffix=$2
180 shift
181 ;;
182 --executable-suffix)
183 export executable_suffix=$2
184 shift
185 ;;
186 --extra-arguments)
187 export extra_arguments=$2
188 shift
189 ;;
190 --extra-arguments-pub)
191 export extra_arguments_pub=$2
192 shift
193 ;;
194 --extra-arguments-sub)
195 export extra_arguments_sub=$2
196 shift
197 ;;
198 --skip-no-batching)
199 export skip_no_batching="1"
200 ;;
201 --skip-be)
202 export skip_be_tests="1"
203 ;;
204 --skip-rel)
205 export skip_rel_tests="1"
206 ;;
207 --skip-keyed)
208 export skip_keyed_data="1"
209 ;;
210 --skip-large-data)
211 export skip_large_data="1"
212 ;;
213 --large-data)
214 export large_data="1"
215 ;;
216 --keyed)
217 export skip_unkeyed="1"
218 ;;
219 --unkeyed)
220 export skip_keyed_data="1"
221 ;;
222 --no-batching)
223 export no_batching_only="1"
224 ;;
225 --reliable)
226 export skip_be_tests="1"
227 ;;
228 --best-effort)
229 export skip_rel_tests="1"
230 ;;
231 --security)
232 export security_only="$2"
233 shift
234 ;;
235 --micro)
236 export micro="1"
237 ;;
238 --tss)
239 export tss="1"
240 ;;
241 --no-colors)
242 export NO_COLORS="1"
243 ;;
244 --language)
245 export LANGUAGE=$2
246 shift
247 ;;
248 *)
249 echo -e "unknown parameter \"$1\""
250 exit 255
251 ;;
252 esac
253 shift
254done
255
256if [[ "$NO_COLORS" == "1" ]]; then
257 disable_colors
258fi
259
260export folder_base="$(dirname "${executable}")"/../../..
261
262if [[ $LANGUAGE == "java" || "$LANGUAGE" == "cs" ]]; then
263 export folder_base="$(dirname "${executable}")"/../..
264fi
265if [[ $tss == "1" ]]; then
266 export folder_base="$(dirname "${executable}")"/../../../../..
267fi
268
269if [[ "${executable_suffix}" != "" ]]; then
270 export executable="${executable}${executable_suffix}"
271fi
272
273echo -e "${INFO_TAG} Perftest executable is: $executable"
274echo -e "${INFO_TAG} Output folder is: $output_folder"
275
276################################################################################
277
278if [[ "${skip_large_data}" == "1" ]]; then
279 export datasizes_extended=${datasizes}
280elif [[ "${large_data}" == "1" ]]; then
281 export datasizes=${datasizes_extended}
282fi
283
284if [[ "${datalen_input}" != "" ]]; then
285 echo -e "${YELLOW}[TEST] Testing only for ${datalen_input}${NC}"
286 export datasizes=${datalen_input}
287 export datasizes_extended=${datalen_input}
288 if [[ "${no_batching_only}" != "1" ]]; then
289 export skip_large_data="1"
290 fi
291fi
292
293if [[ "$role" != "pub" && "$role" != "sub" ]]; then
294 echo -e "${ERROR_TAG} It must be either publisher or subscriber"
295 exit 255
296fi
297
298if [[ "$lat_thr" != "thr" && "$lat_thr" != "lat" ]]; then
299 echo -e "${ERROR_TAG} It must be either lat or thr"
300 exit 255
301fi
302
303if [[ "${interface}" == "" ]]; then
304 echo "Using default nics"
305 export nic_publisher=${ip_machine_1}
306 export nic_subscriber=${ip_machine_2}
307else
308 export nic_publisher=$interface
309 echo -e "${INFO_TAG} Using nic_publisher: ${nic_publisher}"
310
311 if [[ "${interface2}" == "" ]]; then
312 export nic_subscriber=$interface
313 else
314 export nic_subscriber=$interface2
315 fi
316 echo -e "${INFO_TAG} Using nic_subscriber: ${nic_subscriber}"
317
318 if [[ "${ip1}" != "" ]]; then
319 export ip_publisher=$ip1
320 echo "Using ip_publisher: ${ip_publisher}"
321 fi
322
323 if [[ "${ip2}" != "" ]]; then
324 export ip_subscriber=$ip2
325 echo "Using ip_subscriber: ${ip_subscriber}"
326 fi
327
328fi
329
330export transport_string="-transport $transport"
331
332if [[ "$transport" == "UDPv4" ]]; then
333
334 export transport_string_pub="$transport_string -nic $nic_publisher"
335 export transport_string_sub="$transport_string -nic $nic_subscriber"
336
337 if [[ "$micro" == "1" ]]; then
338 export transport_string_pub="$transport_string_pub -peer ${ip_subscriber}"
339 export transport_string_sub="$transport_string_sub -peer ${ip_publisher}"
340 fi
341
342elif [[ "$transport" == "TCP" ]]; then
343 export transport_string_pub="$transport_string \
344 -nic $nic_publisher \
345 -peer 0@tcpv4_lan://${ip_subscriber}:7400"
346 export transport_string_sub="$transport_string \
347 -nic $nic_subscriber \
348 -peer 0@tcpv4_lan://${ip_publisher}:7400"
349elif [[ "$transport" == "TLS" ]]; then
350 export transport_string_pub="$transport_string \
351 -nic $nic_publisher \
352 -peer tlsv4_lan://${ip_subscriber}:7400"
353 export transport_string_sub="$transport_string \
354 -nic $nic_subscriber \
355 -peer tlsv4_lan://${ip_publisher}:7400"
356elif [[ "$transport" == "UDPv4_WAN" ]]; then
357 export transport_string_pub="$transport_string \
358 -nic $nic_publisher \
359 -transportPublicAddress $ip_publisher:7400"
360 export transport_string_sub="$transport_string \
361 -nic $nic_subscriber \
362 -peer 0@udpv4_wan://${ip_publisher}:7400"
363else
364 export transport_string_pub="$transport_string"
365 export transport_string_sub="$transport_string"
366fi
367
368################################################################################
369
370export pub_string="-pub \
371 ${transport_string_pub} \
372 -noPrintIntervals \
373 -executionTime $exec_time"
374
375if [[ ${lat_thr} == "lat" ]]; then
376 export pub_string="$pub_string \
377 -latencyTest"
378fi
379
380export sub_string="-sub \
381 ${transport_string_sub} \
382 -noPrintIntervals"
383
384if [[ "$role" == "pub" ]]; then
385 echo -e "$INFO_TAG Publisher side running"
386 export commands_string=${pub_string}
387 export extra_arguments="${extra_arguments} ${extra_arguments_pub}"
388else
389 echo -e "$INFO_TAG Subscriber side running"
390 export commands_string=${sub_string}
391 export extra_arguments="${extra_arguments} ${extra_arguments_sub}"
392fi
393
394###############################################################################
395
396echo -e "${INFO_TAG} Executing: /set_${lat_thr}_mode.sh"
397sudo /set_${lat_thr}_mode.sh
398sleep 5
399
400cd $folder_base
401echo -e "${INFO_TAG} Folder Base is: $PWD"
402mkdir -p $output_folder
403
404# Tests that may use batching (when doing throughput tests)
405if [[ ${no_batching_only} != "1" ]]; then
406
407 # UNKEYED
408 if [[ "${skip_unkeyed}" == "" ]]; then
409
410 # RELIABLE
411 if [[ "${skip_rel_tests}" == "" ]]; then
412 execute_test "unkeyed" "rel" "${datasizes_extended}" "${extra_arguments}" "$file_suffix"
413 fi
414
415 # BEST EFFORT
416 if [[ "${skip_be_tests}" == "" ]]; then
417 execute_test "unkeyed" "be" "${datasizes}" "${extra_arguments}" "$file_suffix"
418 fi
419 fi
420
421 # KEYED
422 if [[ "${skip_keyed_data}" == "" ]]; then
423
424 # RELIABLE
425 if [[ "${skip_rel_tests}" == "" ]]; then
426 execute_test "keyed" "rel" "${datasizes}" "${extra_arguments}" "$file_suffix"
427 fi
428
429 # BEST EFFORT
430 if [[ "${skip_be_tests}" == "" ]]; then
431 execute_test "keyed" "be" "${datasizes}" "${extra_arguments}" "$file_suffix"
432 fi
433 fi
434
435fi
436
437if [[ "${skip_no_batching}" == "" || "${no_batching_only}" == "1" ]]; then
438 no_batching_tests="1"
439fi
440
441# Tests that will not use batching
442if [[ "${lat_thr}" == "thr" && "${no_batching_tests}" == "1" ]]; then
443
444 if [[ "$role" == "pub" ]]; then
445 export commands_string="${commands_string} -batchSize 0"
446 fi
447
448 # UNKEYED
449 if [[ "${skip_unkeyed}" == "" ]]; then
450
451 # RELIABLE
452 if [[ "${skip_rel_tests}" == "" ]]; then
453 execute_test "unkeyed" "rel" "${datasizes}" "${extra_arguments}" "_noBatch${file_suffix}"
454 fi
455
456 # BEST EFFORT
457 if [[ "${skip_be_tests}" == "" ]]; then
458 execute_test "unkeyed" "be" "${datasizes}" "${extra_arguments}" "_noBatch${file_suffix}"
459 fi
460 fi
461fi
1#!/bin/bash
2filename=$0
3script_location=$(cd "$(dirname "$filename")" || exit 255; pwd)
4
5echo -e "[Calling base_script/script.sh]"
6"${script_location}/../base_script/script.sh" $@ --transport UDPv4
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 (μs) |
Std (μs) |
Min (μs) |
Max (μs) |
50% (μs) |
90% (μs) |
99% (μs) |
99.99% (μs) |
99.9999% (μs) |
---|---|---|---|---|---|---|---|---|---|
32 |
23 |
129.9 |
21 |
69023 |
23 |
24 |
26 |
21 |
21 |
64 |
23 |
175.8 |
21 |
100147 |
22 |
24 |
26 |
21 |
21 |
128 |
23 |
131.9 |
22 |
72042 |
23 |
25 |
26 |
22 |
22 |
256 |
24 |
133.9 |
22 |
74195 |
23 |
25 |
26 |
22 |
22 |
512 |
24 |
136.2 |
22 |
72477 |
23 |
25 |
27 |
22 |
22 |
1024 |
27 |
138.7 |
24 |
69639 |
27 |
28 |
29 |
24 |
24 |
2048 |
32 |
164.7 |
27 |
78905 |
30 |
33 |
46 |
27 |
27 |
4096 |
38 |
168.8 |
32 |
72941 |
35 |
43 |
70 |
32 |
32 |
8192 |
51 |
189.2 |
43 |
69065 |
46 |
60 |
91 |
43 |
43 |
16384 |
98 |
29.8 |
54 |
264 |
98 |
142 |
160 |
54 |
54 |
32768 |
184 |
1.9 |
131 |
260 |
184 |
185 |
188 |
131 |
131 |
63000 |
198 |
2.8 |
117 |
274 |
198 |
200 |
205 |
117 |
117 |
Reliable
Sample Size (Bytes) |
Ave (μs) |
Std (μs) |
Min (μs) |
Max (μs) |
50% (μs) |
90% (μs) |
99% (μs) |
99.99% (μs) |
99.9999% (μs) |
---|---|---|---|---|---|---|---|---|---|
32 |
25 |
130.5 |
23 |
68583 |
25 |
26 |
28 |
23 |
23 |
64 |
26 |
136.7 |
24 |
67374 |
25 |
26 |
28 |
24 |
24 |
128 |
26 |
138.6 |
24 |
70291 |
25 |
26 |
28 |
24 |
24 |
256 |
25 |
146.2 |
23 |
74937 |
25 |
26 |
32 |
23 |
23 |
512 |
26 |
150.9 |
24 |
77384 |
26 |
27 |
30 |
24 |
24 |
1024 |
28 |
128.8 |
25 |
61875 |
27 |
29 |
34 |
25 |
25 |
2048 |
32 |
164.7 |
27 |
78905 |
30 |
33 |
46 |
27 |
27 |
4096 |
38 |
168.8 |
32 |
72941 |
35 |
43 |
70 |
32 |
32 |
8192 |
51 |
189.2 |
43 |
69065 |
46 |
60 |
91 |
43 |
43 |
16384 |
100 |
27.9 |
55 |
223 |
99 |
141 |
161 |
55 |
55 |
32768 |
184 |
4.0 |
89 |
256 |
184 |
186 |
190 |
89 |
89 |
63000 |
200 |
3.0 |
120 |
309 |
200 |
202 |
206 |
120 |
120 |
Perftest Scripts
To produce these tests, we executed RTI Perftest for Java. The exact script used can be found here:
1#!/bin/bash
2filename=$0
3script_location=$(cd "$(dirname "$filename")" || exit 255; pwd)
4
5export datasizes="32 64 128 256 512 1024 2048 4096 8192 16384 32768 63000"
6export datasizes_extended="${datasizes} 100000 500000 1048576 1548576 4194304 10485760"
7
8export domain="2"
9export exec_time=20
10export num_reps=1
11export instance_number=100000
12export core=0
13
14# We will use some colors to improve visibility of errors and info messages.
15RED='\033[0;31m'
16GREEN='\033[0;32m'
17YELLOW='\033[0;33m'
18BLUE='\033[0;34m'
19LIGHTBLUE='\033[0;36m'
20NC='\033[0m'
21INFO_TAG="${GREEN}[INFO]:${NC}"
22WARNING_TAG="${YELLOW}[WARNING]:${NC}"
23ERROR_TAG="${RED}[ERROR]:${NC}"
24
25export ip_machine_1="10.2.75.20"
26export ip_machine_2="10.2.75.21"
27export if10Gbps="enp1s0f0"
28export if1Gbps="eno1"
29
30################################################################################
31
32function disable_colors() {
33 export RED=""
34 export GREEN=""
35 export YELLOW=""
36 export NC=""
37 export BLUE=""
38 export LIGHTBLUE=""
39 export INFO_TAG="${GREEN}[INFO]:${NC}"
40 export WARNING_TAG="${YELLOW}[WARNING]:${NC}"
41 export ERROR_TAG="${RED}[ERROR]:${NC}"
42}
43
44function change_domain() {
45 if [[ "$domain" == "1" ]]; then
46 export domain="2"
47 else
48 export domain="1"
49 fi
50}
51
52# Usage: execute_test <keyed/unkeyed> <rel/be> <datasizes> <batchSize>
53function execute_test() {
54
55 local keyed_unkeyed=$1
56 local rel_be=$2
57 local datasizes_test=$3
58 local other_args=$4
59 local name_suffix=$5
60
61 local commands_string_test=$commands_string
62 local tag=""
63
64 if [[ "${keyed_unkeyed}" == "keyed" ]]; then
65 commands_string_test="${commands_string_test} -keyed -instances $instance_number"
66 tag="[${YELLOW}${transport}${NC}|${BLUE}K${NC}|"
67 else
68 tag="[${YELLOW}${transport}${NC}|${LIGHTBLUE}UK${NC}|"
69 fi
70
71 if [[ "${rel_be}" == "be" ]]; then
72 commands_string_test="${commands_string_test} -bestEffort"
73 tag="${tag}${YELLOW}BE${NC}]"
74 else
75 tag="${tag}${RED}REL${NC}]"
76 fi
77
78 tag="${tag}[${LIGHTBLUE}${lat_thr}${NC}]"
79
80 local output_file=$output_folder/${lat_thr}_${role}_${keyed_unkeyed}_${rel_be}${name_suffix}.csv
81
82 if [[ "$role" == "pub" ]]; then
83 echo -e "${YELLOW}[TEST]: $keyed_unkeyed, $rel_be. ${NC}"
84 fi
85
86 if [[ "$LANGUAGE" != "java" && "$LANGUAGE" != "cs" ]]; then
87 export pre_command_string="taskset -c $core"
88 fi
89
90 # Get the aprox time this will take:
91 total_tests=$((`wc -w <<< "$datasizes_test"` * num_reps))
92 total_time=$((total_tests * exec_time))
93
94 touch $output_file
95 local no_headers=""
96 local current_test=0
97 for index in $(seq 1 ${num_reps}); do
98 for DATALEN in ${datasizes_test}; do
99 current_test=$((current_test + 1))
100 export command="$pre_command_string $executable -domain $domain -dataLen $DATALEN $commands_string_test $other_args $no_headers"
101 if [[ "$role" == "pub" ]]; then
102 echo -e "Test ${tag} (${current_test}/${total_tests}) -- Total time = ${total_time}s"
103 echo -e ${BLUE}$command${NC}
104 else
105 echo -e ${LIGHTBLUE}$command${NC}
106 fi
107 if [[ "$LANGUAGE" == "cs" && "$role" == "pub" ]]; then
108 sleep 3
109 fi
110 $command >> $output_file;
111 no_headers=" -noOutputHeaders"
112 change_domain
113 done
114 done
115}
116
117################################################################################
118# PARSE COMMAND LINE OPTIONS:
119
120while [ "$1" != "" ]; do
121 case $1 in
122 --executable)
123 executable=$2
124 shift
125 ;;
126 --output-folder)
127 output_folder=$2
128 shift
129 ;;
130 --role)
131 export role=$2
132 shift
133 ;;
134 --core)
135 export core=$2
136 shift
137 ;;
138 --test-kind)
139 export lat_thr=$2
140 shift
141 ;;
142 --interface1)
143 export interface=$2
144 shift
145 ;;
146 --interface2)
147 export interface2=$2
148 shift
149 ;;
150 --ip1)
151 export ip1=$2
152 shift
153 ;;
154 --ip2)
155 export ip2=$2
156 shift
157 ;;
158 --repetitions)
159 export num_reps=$2
160 shift
161 ;;
162 --domain)
163 export domain=$2
164 shift
165 ;;
166 --execution-time)
167 export exec_time=$2
168 shift
169 ;;
170 --transport)
171 export transport=$2
172 shift
173 ;;
174 --datalen)
175 export datalen_input=$2
176 shift
177 ;;
178 --file-suffix)
179 export file_suffix=$2
180 shift
181 ;;
182 --executable-suffix)
183 export executable_suffix=$2
184 shift
185 ;;
186 --extra-arguments)
187 export extra_arguments=$2
188 shift
189 ;;
190 --extra-arguments-pub)
191 export extra_arguments_pub=$2
192 shift
193 ;;
194 --extra-arguments-sub)
195 export extra_arguments_sub=$2
196 shift
197 ;;
198 --skip-no-batching)
199 export skip_no_batching="1"
200 ;;
201 --skip-be)
202 export skip_be_tests="1"
203 ;;
204 --skip-rel)
205 export skip_rel_tests="1"
206 ;;
207 --skip-keyed)
208 export skip_keyed_data="1"
209 ;;
210 --skip-large-data)
211 export skip_large_data="1"
212 ;;
213 --large-data)
214 export large_data="1"
215 ;;
216 --keyed)
217 export skip_unkeyed="1"
218 ;;
219 --unkeyed)
220 export skip_keyed_data="1"
221 ;;
222 --no-batching)
223 export no_batching_only="1"
224 ;;
225 --reliable)
226 export skip_be_tests="1"
227 ;;
228 --best-effort)
229 export skip_rel_tests="1"
230 ;;
231 --security)
232 export security_only="$2"
233 shift
234 ;;
235 --micro)
236 export micro="1"
237 ;;
238 --tss)
239 export tss="1"
240 ;;
241 --no-colors)
242 export NO_COLORS="1"
243 ;;
244 --language)
245 export LANGUAGE=$2
246 shift
247 ;;
248 *)
249 echo -e "unknown parameter \"$1\""
250 exit 255
251 ;;
252 esac
253 shift
254done
255
256if [[ "$NO_COLORS" == "1" ]]; then
257 disable_colors
258fi
259
260export folder_base="$(dirname "${executable}")"/../../..
261
262if [[ $LANGUAGE == "java" || "$LANGUAGE" == "cs" ]]; then
263 export folder_base="$(dirname "${executable}")"/../..
264fi
265if [[ $tss == "1" ]]; then
266 export folder_base="$(dirname "${executable}")"/../../../../..
267fi
268
269if [[ "${executable_suffix}" != "" ]]; then
270 export executable="${executable}${executable_suffix}"
271fi
272
273echo -e "${INFO_TAG} Perftest executable is: $executable"
274echo -e "${INFO_TAG} Output folder is: $output_folder"
275
276################################################################################
277
278if [[ "${skip_large_data}" == "1" ]]; then
279 export datasizes_extended=${datasizes}
280elif [[ "${large_data}" == "1" ]]; then
281 export datasizes=${datasizes_extended}
282fi
283
284if [[ "${datalen_input}" != "" ]]; then
285 echo -e "${YELLOW}[TEST] Testing only for ${datalen_input}${NC}"
286 export datasizes=${datalen_input}
287 export datasizes_extended=${datalen_input}
288 if [[ "${no_batching_only}" != "1" ]]; then
289 export skip_large_data="1"
290 fi
291fi
292
293if [[ "$role" != "pub" && "$role" != "sub" ]]; then
294 echo -e "${ERROR_TAG} It must be either publisher or subscriber"
295 exit 255
296fi
297
298if [[ "$lat_thr" != "thr" && "$lat_thr" != "lat" ]]; then
299 echo -e "${ERROR_TAG} It must be either lat or thr"
300 exit 255
301fi
302
303if [[ "${interface}" == "" ]]; then
304 echo "Using default nics"
305 export nic_publisher=${ip_machine_1}
306 export nic_subscriber=${ip_machine_2}
307else
308 export nic_publisher=$interface
309 echo -e "${INFO_TAG} Using nic_publisher: ${nic_publisher}"
310
311 if [[ "${interface2}" == "" ]]; then
312 export nic_subscriber=$interface
313 else
314 export nic_subscriber=$interface2
315 fi
316 echo -e "${INFO_TAG} Using nic_subscriber: ${nic_subscriber}"
317
318 if [[ "${ip1}" != "" ]]; then
319 export ip_publisher=$ip1
320 echo "Using ip_publisher: ${ip_publisher}"
321 fi
322
323 if [[ "${ip2}" != "" ]]; then
324 export ip_subscriber=$ip2
325 echo "Using ip_subscriber: ${ip_subscriber}"
326 fi
327
328fi
329
330export transport_string="-transport $transport"
331
332if [[ "$transport" == "UDPv4" ]]; then
333
334 export transport_string_pub="$transport_string -nic $nic_publisher"
335 export transport_string_sub="$transport_string -nic $nic_subscriber"
336
337 if [[ "$micro" == "1" ]]; then
338 export transport_string_pub="$transport_string_pub -peer ${ip_subscriber}"
339 export transport_string_sub="$transport_string_sub -peer ${ip_publisher}"
340 fi
341
342elif [[ "$transport" == "TCP" ]]; then
343 export transport_string_pub="$transport_string \
344 -nic $nic_publisher \
345 -peer 0@tcpv4_lan://${ip_subscriber}:7400"
346 export transport_string_sub="$transport_string \
347 -nic $nic_subscriber \
348 -peer 0@tcpv4_lan://${ip_publisher}:7400"
349elif [[ "$transport" == "TLS" ]]; then
350 export transport_string_pub="$transport_string \
351 -nic $nic_publisher \
352 -peer tlsv4_lan://${ip_subscriber}:7400"
353 export transport_string_sub="$transport_string \
354 -nic $nic_subscriber \
355 -peer tlsv4_lan://${ip_publisher}:7400"
356elif [[ "$transport" == "UDPv4_WAN" ]]; then
357 export transport_string_pub="$transport_string \
358 -nic $nic_publisher \
359 -transportPublicAddress $ip_publisher:7400"
360 export transport_string_sub="$transport_string \
361 -nic $nic_subscriber \
362 -peer 0@udpv4_wan://${ip_publisher}:7400"
363else
364 export transport_string_pub="$transport_string"
365 export transport_string_sub="$transport_string"
366fi
367
368################################################################################
369
370export pub_string="-pub \
371 ${transport_string_pub} \
372 -noPrintIntervals \
373 -executionTime $exec_time"
374
375if [[ ${lat_thr} == "lat" ]]; then
376 export pub_string="$pub_string \
377 -latencyTest"
378fi
379
380export sub_string="-sub \
381 ${transport_string_sub} \
382 -noPrintIntervals"
383
384if [[ "$role" == "pub" ]]; then
385 echo -e "$INFO_TAG Publisher side running"
386 export commands_string=${pub_string}
387 export extra_arguments="${extra_arguments} ${extra_arguments_pub}"
388else
389 echo -e "$INFO_TAG Subscriber side running"
390 export commands_string=${sub_string}
391 export extra_arguments="${extra_arguments} ${extra_arguments_sub}"
392fi
393
394###############################################################################
395
396echo -e "${INFO_TAG} Executing: /set_${lat_thr}_mode.sh"
397sudo /set_${lat_thr}_mode.sh
398sleep 5
399
400cd $folder_base
401echo -e "${INFO_TAG} Folder Base is: $PWD"
402mkdir -p $output_folder
403
404# Tests that may use batching (when doing throughput tests)
405if [[ ${no_batching_only} != "1" ]]; then
406
407 # UNKEYED
408 if [[ "${skip_unkeyed}" == "" ]]; then
409
410 # RELIABLE
411 if [[ "${skip_rel_tests}" == "" ]]; then
412 execute_test "unkeyed" "rel" "${datasizes_extended}" "${extra_arguments}" "$file_suffix"
413 fi
414
415 # BEST EFFORT
416 if [[ "${skip_be_tests}" == "" ]]; then
417 execute_test "unkeyed" "be" "${datasizes}" "${extra_arguments}" "$file_suffix"
418 fi
419 fi
420
421 # KEYED
422 if [[ "${skip_keyed_data}" == "" ]]; then
423
424 # RELIABLE
425 if [[ "${skip_rel_tests}" == "" ]]; then
426 execute_test "keyed" "rel" "${datasizes}" "${extra_arguments}" "$file_suffix"
427 fi
428
429 # BEST EFFORT
430 if [[ "${skip_be_tests}" == "" ]]; then
431 execute_test "keyed" "be" "${datasizes}" "${extra_arguments}" "$file_suffix"
432 fi
433 fi
434
435fi
436
437if [[ "${skip_no_batching}" == "" || "${no_batching_only}" == "1" ]]; then
438 no_batching_tests="1"
439fi
440
441# Tests that will not use batching
442if [[ "${lat_thr}" == "thr" && "${no_batching_tests}" == "1" ]]; then
443
444 if [[ "$role" == "pub" ]]; then
445 export commands_string="${commands_string} -batchSize 0"
446 fi
447
448 # UNKEYED
449 if [[ "${skip_unkeyed}" == "" ]]; then
450
451 # RELIABLE
452 if [[ "${skip_rel_tests}" == "" ]]; then
453 execute_test "unkeyed" "rel" "${datasizes}" "${extra_arguments}" "_noBatch${file_suffix}"
454 fi
455
456 # BEST EFFORT
457 if [[ "${skip_be_tests}" == "" ]]; then
458 execute_test "unkeyed" "be" "${datasizes}" "${extra_arguments}" "_noBatch${file_suffix}"
459 fi
460 fi
461fi
1#!/bin/bash
2filename=$0
3script_location=$(cd "$(dirname "$filename")" || exit 255; pwd)
4
5echo -e "[Calling base_script/script.sh]"
6"${script_location}/../base_script/script.sh" $@ --transport UDPv4
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 |
11767721 |
586806 |
150.2 |
1111040 |
8.63 |
64 |
11318144 |
564222 |
288.9 |
2236544 |
16.50 |
128 |
11149888 |
555821 |
569.2 |
1516608 |
11.97 |
256 |
9906465 |
493830 |
1011.4 |
1943072 |
16.40 |
512 |
9399416 |
468553 |
1919.2 |
1165952 |
11.04 |
1024 |
7567947 |
377252 |
3090.4 |
1051584 |
12.20 |
2048 |
5894680 |
293844 |
4814.3 |
62668 |
1.05 |
4096 |
3964808 |
197641 |
6476.3 |
39540 |
0.99 |
8192 |
2571934 |
128581 |
8426.7 |
421159 |
14.07 |
16384 |
1500917 |
75047 |
9836.6 |
5799 |
0.38 |
32768 |
752690 |
37636 |
9866.0 |
2769 |
0.37 |
63000 |
391907 |
19595 |
9875.9 |
1458 |
0.37 |
Reliable
Sample Size (Bytes) |
Total Samples |
Avg Samples/s |
Avg Mbps |
Lost Samples |
Lost Samples (%) |
---|---|---|---|---|---|
32 |
10647296 |
534103 |
136.7 |
0 |
0.00 |
64 |
10592384 |
529353 |
271.0 |
0 |
0.00 |
128 |
10339965 |
516895 |
529.3 |
0 |
0.00 |
256 |
9772554 |
488570 |
1000.6 |
0 |
0.00 |
512 |
8318931 |
415703 |
1702.7 |
0 |
0.00 |
1024 |
7204456 |
360023 |
2949.3 |
0 |
0.00 |
2048 |
5141442 |
257056 |
4211.6 |
0 |
0.00 |
4096 |
3422158 |
171091 |
5606.3 |
0 |
0.00 |
8192 |
1989538 |
99481 |
6519.6 |
0 |
0.00 |
16384 |
1494789 |
74742 |
9796.5 |
0 |
0.00 |
32768 |
752164 |
37607 |
9858.4 |
0 |
0.00 |
63000 |
391862 |
19592 |
9874.5 |
0 |
0.00 |
Perftest Scripts
To produce these tests, we executed RTI Perftest for Java. The exact script used can be found here:
1#!/bin/bash
2filename=$0
3script_location=$(cd "$(dirname "$filename")" || exit 255; pwd)
4
5export datasizes="32 64 128 256 512 1024 2048 4096 8192 16384 32768 63000"
6export datasizes_extended="${datasizes} 100000 500000 1048576 1548576 4194304 10485760"
7
8export domain="2"
9export exec_time=20
10export num_reps=1
11export instance_number=100000
12export core=0
13
14# We will use some colors to improve visibility of errors and info messages.
15RED='\033[0;31m'
16GREEN='\033[0;32m'
17YELLOW='\033[0;33m'
18BLUE='\033[0;34m'
19LIGHTBLUE='\033[0;36m'
20NC='\033[0m'
21INFO_TAG="${GREEN}[INFO]:${NC}"
22WARNING_TAG="${YELLOW}[WARNING]:${NC}"
23ERROR_TAG="${RED}[ERROR]:${NC}"
24
25export ip_machine_1="10.2.75.20"
26export ip_machine_2="10.2.75.21"
27export if10Gbps="enp1s0f0"
28export if1Gbps="eno1"
29
30################################################################################
31
32function disable_colors() {
33 export RED=""
34 export GREEN=""
35 export YELLOW=""
36 export NC=""
37 export BLUE=""
38 export LIGHTBLUE=""
39 export INFO_TAG="${GREEN}[INFO]:${NC}"
40 export WARNING_TAG="${YELLOW}[WARNING]:${NC}"
41 export ERROR_TAG="${RED}[ERROR]:${NC}"
42}
43
44function change_domain() {
45 if [[ "$domain" == "1" ]]; then
46 export domain="2"
47 else
48 export domain="1"
49 fi
50}
51
52# Usage: execute_test <keyed/unkeyed> <rel/be> <datasizes> <batchSize>
53function execute_test() {
54
55 local keyed_unkeyed=$1
56 local rel_be=$2
57 local datasizes_test=$3
58 local other_args=$4
59 local name_suffix=$5
60
61 local commands_string_test=$commands_string
62 local tag=""
63
64 if [[ "${keyed_unkeyed}" == "keyed" ]]; then
65 commands_string_test="${commands_string_test} -keyed -instances $instance_number"
66 tag="[${YELLOW}${transport}${NC}|${BLUE}K${NC}|"
67 else
68 tag="[${YELLOW}${transport}${NC}|${LIGHTBLUE}UK${NC}|"
69 fi
70
71 if [[ "${rel_be}" == "be" ]]; then
72 commands_string_test="${commands_string_test} -bestEffort"
73 tag="${tag}${YELLOW}BE${NC}]"
74 else
75 tag="${tag}${RED}REL${NC}]"
76 fi
77
78 tag="${tag}[${LIGHTBLUE}${lat_thr}${NC}]"
79
80 local output_file=$output_folder/${lat_thr}_${role}_${keyed_unkeyed}_${rel_be}${name_suffix}.csv
81
82 if [[ "$role" == "pub" ]]; then
83 echo -e "${YELLOW}[TEST]: $keyed_unkeyed, $rel_be. ${NC}"
84 fi
85
86 if [[ "$LANGUAGE" != "java" && "$LANGUAGE" != "cs" ]]; then
87 export pre_command_string="taskset -c $core"
88 fi
89
90 # Get the aprox time this will take:
91 total_tests=$((`wc -w <<< "$datasizes_test"` * num_reps))
92 total_time=$((total_tests * exec_time))
93
94 touch $output_file
95 local no_headers=""
96 local current_test=0
97 for index in $(seq 1 ${num_reps}); do
98 for DATALEN in ${datasizes_test}; do
99 current_test=$((current_test + 1))
100 export command="$pre_command_string $executable -domain $domain -dataLen $DATALEN $commands_string_test $other_args $no_headers"
101 if [[ "$role" == "pub" ]]; then
102 echo -e "Test ${tag} (${current_test}/${total_tests}) -- Total time = ${total_time}s"
103 echo -e ${BLUE}$command${NC}
104 else
105 echo -e ${LIGHTBLUE}$command${NC}
106 fi
107 if [[ "$LANGUAGE" == "cs" && "$role" == "pub" ]]; then
108 sleep 3
109 fi
110 $command >> $output_file;
111 no_headers=" -noOutputHeaders"
112 change_domain
113 done
114 done
115}
116
117################################################################################
118# PARSE COMMAND LINE OPTIONS:
119
120while [ "$1" != "" ]; do
121 case $1 in
122 --executable)
123 executable=$2
124 shift
125 ;;
126 --output-folder)
127 output_folder=$2
128 shift
129 ;;
130 --role)
131 export role=$2
132 shift
133 ;;
134 --core)
135 export core=$2
136 shift
137 ;;
138 --test-kind)
139 export lat_thr=$2
140 shift
141 ;;
142 --interface1)
143 export interface=$2
144 shift
145 ;;
146 --interface2)
147 export interface2=$2
148 shift
149 ;;
150 --ip1)
151 export ip1=$2
152 shift
153 ;;
154 --ip2)
155 export ip2=$2
156 shift
157 ;;
158 --repetitions)
159 export num_reps=$2
160 shift
161 ;;
162 --domain)
163 export domain=$2
164 shift
165 ;;
166 --execution-time)
167 export exec_time=$2
168 shift
169 ;;
170 --transport)
171 export transport=$2
172 shift
173 ;;
174 --datalen)
175 export datalen_input=$2
176 shift
177 ;;
178 --file-suffix)
179 export file_suffix=$2
180 shift
181 ;;
182 --executable-suffix)
183 export executable_suffix=$2
184 shift
185 ;;
186 --extra-arguments)
187 export extra_arguments=$2
188 shift
189 ;;
190 --extra-arguments-pub)
191 export extra_arguments_pub=$2
192 shift
193 ;;
194 --extra-arguments-sub)
195 export extra_arguments_sub=$2
196 shift
197 ;;
198 --skip-no-batching)
199 export skip_no_batching="1"
200 ;;
201 --skip-be)
202 export skip_be_tests="1"
203 ;;
204 --skip-rel)
205 export skip_rel_tests="1"
206 ;;
207 --skip-keyed)
208 export skip_keyed_data="1"
209 ;;
210 --skip-large-data)
211 export skip_large_data="1"
212 ;;
213 --large-data)
214 export large_data="1"
215 ;;
216 --keyed)
217 export skip_unkeyed="1"
218 ;;
219 --unkeyed)
220 export skip_keyed_data="1"
221 ;;
222 --no-batching)
223 export no_batching_only="1"
224 ;;
225 --reliable)
226 export skip_be_tests="1"
227 ;;
228 --best-effort)
229 export skip_rel_tests="1"
230 ;;
231 --security)
232 export security_only="$2"
233 shift
234 ;;
235 --micro)
236 export micro="1"
237 ;;
238 --tss)
239 export tss="1"
240 ;;
241 --no-colors)
242 export NO_COLORS="1"
243 ;;
244 --language)
245 export LANGUAGE=$2
246 shift
247 ;;
248 *)
249 echo -e "unknown parameter \"$1\""
250 exit 255
251 ;;
252 esac
253 shift
254done
255
256if [[ "$NO_COLORS" == "1" ]]; then
257 disable_colors
258fi
259
260export folder_base="$(dirname "${executable}")"/../../..
261
262if [[ $LANGUAGE == "java" || "$LANGUAGE" == "cs" ]]; then
263 export folder_base="$(dirname "${executable}")"/../..
264fi
265if [[ $tss == "1" ]]; then
266 export folder_base="$(dirname "${executable}")"/../../../../..
267fi
268
269if [[ "${executable_suffix}" != "" ]]; then
270 export executable="${executable}${executable_suffix}"
271fi
272
273echo -e "${INFO_TAG} Perftest executable is: $executable"
274echo -e "${INFO_TAG} Output folder is: $output_folder"
275
276################################################################################
277
278if [[ "${skip_large_data}" == "1" ]]; then
279 export datasizes_extended=${datasizes}
280elif [[ "${large_data}" == "1" ]]; then
281 export datasizes=${datasizes_extended}
282fi
283
284if [[ "${datalen_input}" != "" ]]; then
285 echo -e "${YELLOW}[TEST] Testing only for ${datalen_input}${NC}"
286 export datasizes=${datalen_input}
287 export datasizes_extended=${datalen_input}
288 if [[ "${no_batching_only}" != "1" ]]; then
289 export skip_large_data="1"
290 fi
291fi
292
293if [[ "$role" != "pub" && "$role" != "sub" ]]; then
294 echo -e "${ERROR_TAG} It must be either publisher or subscriber"
295 exit 255
296fi
297
298if [[ "$lat_thr" != "thr" && "$lat_thr" != "lat" ]]; then
299 echo -e "${ERROR_TAG} It must be either lat or thr"
300 exit 255
301fi
302
303if [[ "${interface}" == "" ]]; then
304 echo "Using default nics"
305 export nic_publisher=${ip_machine_1}
306 export nic_subscriber=${ip_machine_2}
307else
308 export nic_publisher=$interface
309 echo -e "${INFO_TAG} Using nic_publisher: ${nic_publisher}"
310
311 if [[ "${interface2}" == "" ]]; then
312 export nic_subscriber=$interface
313 else
314 export nic_subscriber=$interface2
315 fi
316 echo -e "${INFO_TAG} Using nic_subscriber: ${nic_subscriber}"
317
318 if [[ "${ip1}" != "" ]]; then
319 export ip_publisher=$ip1
320 echo "Using ip_publisher: ${ip_publisher}"
321 fi
322
323 if [[ "${ip2}" != "" ]]; then
324 export ip_subscriber=$ip2
325 echo "Using ip_subscriber: ${ip_subscriber}"
326 fi
327
328fi
329
330export transport_string="-transport $transport"
331
332if [[ "$transport" == "UDPv4" ]]; then
333
334 export transport_string_pub="$transport_string -nic $nic_publisher"
335 export transport_string_sub="$transport_string -nic $nic_subscriber"
336
337 if [[ "$micro" == "1" ]]; then
338 export transport_string_pub="$transport_string_pub -peer ${ip_subscriber}"
339 export transport_string_sub="$transport_string_sub -peer ${ip_publisher}"
340 fi
341
342elif [[ "$transport" == "TCP" ]]; then
343 export transport_string_pub="$transport_string \
344 -nic $nic_publisher \
345 -peer 0@tcpv4_lan://${ip_subscriber}:7400"
346 export transport_string_sub="$transport_string \
347 -nic $nic_subscriber \
348 -peer 0@tcpv4_lan://${ip_publisher}:7400"
349elif [[ "$transport" == "TLS" ]]; then
350 export transport_string_pub="$transport_string \
351 -nic $nic_publisher \
352 -peer tlsv4_lan://${ip_subscriber}:7400"
353 export transport_string_sub="$transport_string \
354 -nic $nic_subscriber \
355 -peer tlsv4_lan://${ip_publisher}:7400"
356elif [[ "$transport" == "UDPv4_WAN" ]]; then
357 export transport_string_pub="$transport_string \
358 -nic $nic_publisher \
359 -transportPublicAddress $ip_publisher:7400"
360 export transport_string_sub="$transport_string \
361 -nic $nic_subscriber \
362 -peer 0@udpv4_wan://${ip_publisher}:7400"
363else
364 export transport_string_pub="$transport_string"
365 export transport_string_sub="$transport_string"
366fi
367
368################################################################################
369
370export pub_string="-pub \
371 ${transport_string_pub} \
372 -noPrintIntervals \
373 -executionTime $exec_time"
374
375if [[ ${lat_thr} == "lat" ]]; then
376 export pub_string="$pub_string \
377 -latencyTest"
378fi
379
380export sub_string="-sub \
381 ${transport_string_sub} \
382 -noPrintIntervals"
383
384if [[ "$role" == "pub" ]]; then
385 echo -e "$INFO_TAG Publisher side running"
386 export commands_string=${pub_string}
387 export extra_arguments="${extra_arguments} ${extra_arguments_pub}"
388else
389 echo -e "$INFO_TAG Subscriber side running"
390 export commands_string=${sub_string}
391 export extra_arguments="${extra_arguments} ${extra_arguments_sub}"
392fi
393
394###############################################################################
395
396echo -e "${INFO_TAG} Executing: /set_${lat_thr}_mode.sh"
397sudo /set_${lat_thr}_mode.sh
398sleep 5
399
400cd $folder_base
401echo -e "${INFO_TAG} Folder Base is: $PWD"
402mkdir -p $output_folder
403
404# Tests that may use batching (when doing throughput tests)
405if [[ ${no_batching_only} != "1" ]]; then
406
407 # UNKEYED
408 if [[ "${skip_unkeyed}" == "" ]]; then
409
410 # RELIABLE
411 if [[ "${skip_rel_tests}" == "" ]]; then
412 execute_test "unkeyed" "rel" "${datasizes_extended}" "${extra_arguments}" "$file_suffix"
413 fi
414
415 # BEST EFFORT
416 if [[ "${skip_be_tests}" == "" ]]; then
417 execute_test "unkeyed" "be" "${datasizes}" "${extra_arguments}" "$file_suffix"
418 fi
419 fi
420
421 # KEYED
422 if [[ "${skip_keyed_data}" == "" ]]; then
423
424 # RELIABLE
425 if [[ "${skip_rel_tests}" == "" ]]; then
426 execute_test "keyed" "rel" "${datasizes}" "${extra_arguments}" "$file_suffix"
427 fi
428
429 # BEST EFFORT
430 if [[ "${skip_be_tests}" == "" ]]; then
431 execute_test "keyed" "be" "${datasizes}" "${extra_arguments}" "$file_suffix"
432 fi
433 fi
434
435fi
436
437if [[ "${skip_no_batching}" == "" || "${no_batching_only}" == "1" ]]; then
438 no_batching_tests="1"
439fi
440
441# Tests that will not use batching
442if [[ "${lat_thr}" == "thr" && "${no_batching_tests}" == "1" ]]; then
443
444 if [[ "$role" == "pub" ]]; then
445 export commands_string="${commands_string} -batchSize 0"
446 fi
447
448 # UNKEYED
449 if [[ "${skip_unkeyed}" == "" ]]; then
450
451 # RELIABLE
452 if [[ "${skip_rel_tests}" == "" ]]; then
453 execute_test "unkeyed" "rel" "${datasizes}" "${extra_arguments}" "_noBatch${file_suffix}"
454 fi
455
456 # BEST EFFORT
457 if [[ "${skip_be_tests}" == "" ]]; then
458 execute_test "unkeyed" "be" "${datasizes}" "${extra_arguments}" "_noBatch${file_suffix}"
459 fi
460 fi
461fi
1#!/bin/bash
2filename=$0
3script_location=$(cd "$(dirname "$filename")" || exit 255; pwd)
4
5echo -e "[Calling base_script/script.sh]"
6"${script_location}/../base_script/script.sh" $@ --transport UDPv4
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