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"\`"; 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 --extra-arguments)
183 export extra_arguments=$2
184 shift
185 ;;
186 --extra-arguments-pub)
187 export extra_arguments_pub=$2
188 shift
189 ;;
190 --extra-arguments-sub)
191 export extra_arguments_sub=$2
192 shift
193 ;;
194 --skip-no-batching)
195 export skip_no_batching="1"
196 ;;
197 --skip-be)
198 export skip_be_tests="1"
199 ;;
200 --skip-rel)
201 export skip_rel_tests="1"
202 ;;
203 --skip-keyed)
204 export skip_keyed_data="1"
205 ;;
206 --skip-large-data)
207 export skip_large_data="1"
208 ;;
209 --large-data)
210 export large_data="1"
211 ;;
212 --keyed)
213 export skip_unkeyed="1"
214 ;;
215 --unkeyed)
216 export skip_keyed_data="1"
217 ;;
218 --no-batching)
219 export no_batching_only="1"
220 ;;
221 --reliable)
222 export skip_be_tests="1"
223 ;;
224 --best-effort)
225 export skip_rel_tests="1"
226 ;;
227 --security)
228 export security_only="$2"
229 shift
230 ;;
231 --micro)
232 export micro="1"
233 ;;
234 --tss)
235 export tss="1"
236 ;;
237 --no-colors)
238 export NO_COLORS="1"
239 ;;
240 --language)
241 export LANGUAGE=$2
242 shift
243 ;;
244 *)
245 echo -e "unknown parameter \"$1\""
246 exit -1
247 ;;
248 esac
249 shift
250done
251
252if [[ "$NO_COLORS" == "1" ]]; then
253 disable_colors
254fi
255
256export folder_base="$(dirname "${executable}")"/../../..
257
258if [[ $LANGUAGE == "java" || "$LANGUAGE" == "cs" ]]; then
259 export folder_base="$(dirname "${executable}")"/../..
260fi
261if [[ $tss == "1" ]]; then
262 export folder_base="$(dirname "${executable}")"/../../../../..
263fi
264
265echo -e "${INFO_TAG} Perftest executable is: $executable"
266echo -e "${INFO_TAG} Output folder is: $output_folder"
267
268################################################################################
269
270if [[ "${skip_large_data}" == "1" ]]; then
271 export datasizes_extended=${datasizes}
272elif [[ "${large_data}" == "1" ]]; then
273 export datasizes=${datasizes_extended}
274fi
275
276if [[ "${datalen_input}" != "" ]]; then
277 echo -e "${YELLOW}[TEST] Testing only for ${datalen_input}${NC}"
278 export datasizes=${datalen_input}
279 export datasizes_extended=${datalen_input}
280 if [[ "${no_batching_only}" != "1" ]]; then
281 export skip_large_data="1"
282 fi
283fi
284
285if [[ "$role" != "pub" && "$role" != "sub" ]]; then
286 echo -e "${ERROR_TAG} It must be either publisher or subscriber"
287 exit -1
288fi
289
290if [[ "$lat_thr" != "thr" && "$lat_thr" != "lat" ]]; then
291 echo -e "${ERROR_TAG} It must be either lat or thr"
292 exit -1
293fi
294
295if [[ "${interface}" == "" ]]; then
296 echo "Using default nics"
297 export nic_publisher=${ip_machine_1}
298 export nic_subscriber=${ip_machine_2}
299else
300 export nic_publisher=$interface
301 echo -e "${INFO_TAG} Using nic_publisher: ${nic_publisher}"
302
303 if [[ "${interface2}" == "" ]]; then
304 export nic_subscriber=$interface
305 else
306 export nic_subscriber=$interface2
307 fi
308 echo -e "${INFO_TAG} Using nic_subscriber: ${nic_subscriber}"
309
310 if [[ "${ip1}" != "" ]]; then
311 export ip_publisher=$ip1
312 echo "Using ip_publisher: ${ip_publisher}"
313 fi
314
315 if [[ "${ip2}" != "" ]]; then
316 export ip_subscriber=$ip2
317 echo "Using ip_subscriber: ${ip_subscriber}"
318 fi
319
320fi
321
322export transport_string="-transport $transport"
323
324if [[ "$transport" == "UDPv4" ]]; then
325
326 export transport_string_pub="$transport_string -nic $nic_publisher"
327 export transport_string_sub="$transport_string -nic $nic_subscriber"
328
329 if [[ "$micro" == "1" ]]; then
330 export transport_string_pub="$transport_string_pub -peer ${ip_subscriber}"
331 export transport_string_sub="$transport_string_sub -peer ${ip_publisher}"
332 fi
333
334elif [[ "$transport" == "TCP" ]]; then
335 export transport_string_pub="$transport_string \
336 -nic $nic_publisher \
337 -peer 0@tcpv4_lan://${ip_subscriber}:7400"
338 export transport_string_sub="$transport_string \
339 -nic $nic_subscriber \
340 -peer 0@tcpv4_lan://${ip_publisher}:7400"
341elif [[ "$transport" == "TLS" ]]; then
342 export transport_string_pub="$transport_string \
343 -nic $nic_publisher \
344 -peer tlsv4_lan://${ip_subscriber}:7400"
345 export transport_string_sub="$transport_string \
346 -nic $nic_subscriber \
347 -peer tlsv4_lan://${ip_publisher}:7400"
348elif [[ "$transport" == "UDPv4_WAN" ]]; then
349 export transport_string_pub="$transport_string \
350 -nic $nic_publisher \
351 -transportPublicAddress $ip_publisher:7400"
352 export transport_string_sub="$transport_string \
353 -nic $nic_subscriber \
354 -peer 0@udpv4_wan://${ip_publisher}:7400"
355else
356 export transport_string_pub="$transport_string"
357 export transport_string_sub="$transport_string"
358fi
359
360################################################################################
361
362export pub_string="-pub \
363 ${transport_string_pub} \
364 -noPrintIntervals \
365 -executionTime $exec_time"
366
367if [[ ${lat_thr} == "lat" ]]; then
368 export pub_string="$pub_string \
369 -latencyTest"
370fi
371
372export sub_string="-sub \
373 ${transport_string_sub} \
374 -noPrintIntervals"
375
376if [[ "$role" == "pub" ]]; then
377 echo -e "$INFO_TAG Publisher side running"
378 export commands_string=${pub_string}
379 export extra_arguments="${extra_arguments} ${extra_arguments_pub}"
380else
381 echo -e "$INFO_TAG Subscriber side running"
382 export commands_string=${sub_string}
383 export extra_arguments="${extra_arguments} ${extra_arguments_sub}"
384fi
385
386###############################################################################
387
388echo -e "${INFO_TAG} Executing: /set_${lat_thr}_mode.sh"
389sudo /set_${lat_thr}_mode.sh
390sleep 5
391
392cd $folder_base
393echo -e "${INFO_TAG} Folder Base is: $PWD"
394mkdir -p $output_folder
395
396# Tests that may use batching (when doing throughput tests)
397if [[ ${no_batching_only} != "1" ]]; then
398
399 # UNKEYED
400 if [[ "${skip_unkeyed}" == "" ]]; then
401
402 # RELIABLE
403 if [[ "${skip_rel_tests}" == "" ]]; then
404 execute_test "unkeyed" "rel" "${datasizes_extended}" "${extra_arguments}" "$file_suffix"
405 fi
406
407 # BEST EFFORT
408 if [[ "${skip_be_tests}" == "" ]]; then
409 execute_test "unkeyed" "be" "${datasizes}" "${extra_arguments}" "$file_suffix"
410 fi
411 fi
412
413 # KEYED
414 if [[ "${skip_keyed_data}" == "" ]]; then
415
416 # RELIABLE
417 if [[ "${skip_rel_tests}" == "" ]]; then
418 execute_test "keyed" "rel" "${datasizes}" "${extra_arguments}" "$file_suffix"
419 fi
420
421 # BEST EFFORT
422 if [[ "${skip_be_tests}" == "" ]]; then
423 execute_test "keyed" "be" "${datasizes}" "${extra_arguments}" "$file_suffix"
424 fi
425 fi
426
427fi
428
429if [[ "${skip_no_batching}" == "" || "${no_batching_only}" == "1" ]]; then
430 no_batching_tests="1"
431fi
432
433# Tests that will not use batching
434if [[ "${lat_thr}" == "thr" && "${no_batching_tests}" == "1" ]]; then
435
436 if [[ "$role" == "pub" ]]; then
437 export commands_string="${commands_string} -batchSize 0"
438 fi
439
440 # UNKEYED
441 if [[ "${skip_unkeyed}" == "" ]]; then
442
443 # RELIABLE
444 if [[ "${skip_rel_tests}" == "" ]]; then
445 execute_test "unkeyed" "rel" "${datasizes}" "${extra_arguments}" "_noBatch${file_suffix}"
446 fi
447
448 # BEST EFFORT
449 if [[ "${skip_be_tests}" == "" ]]; then
450 execute_test "unkeyed" "be" "${datasizes}" "${extra_arguments}" "_noBatch${file_suffix}"
451 fi
452 fi
453fi
1#!/bin/bash
2filename=$0
3script_location=`cd "\`dirname "$filename"\`"; 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"\`"; 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 --extra-arguments)
183 export extra_arguments=$2
184 shift
185 ;;
186 --extra-arguments-pub)
187 export extra_arguments_pub=$2
188 shift
189 ;;
190 --extra-arguments-sub)
191 export extra_arguments_sub=$2
192 shift
193 ;;
194 --skip-no-batching)
195 export skip_no_batching="1"
196 ;;
197 --skip-be)
198 export skip_be_tests="1"
199 ;;
200 --skip-rel)
201 export skip_rel_tests="1"
202 ;;
203 --skip-keyed)
204 export skip_keyed_data="1"
205 ;;
206 --skip-large-data)
207 export skip_large_data="1"
208 ;;
209 --large-data)
210 export large_data="1"
211 ;;
212 --keyed)
213 export skip_unkeyed="1"
214 ;;
215 --unkeyed)
216 export skip_keyed_data="1"
217 ;;
218 --no-batching)
219 export no_batching_only="1"
220 ;;
221 --reliable)
222 export skip_be_tests="1"
223 ;;
224 --best-effort)
225 export skip_rel_tests="1"
226 ;;
227 --security)
228 export security_only="$2"
229 shift
230 ;;
231 --micro)
232 export micro="1"
233 ;;
234 --tss)
235 export tss="1"
236 ;;
237 --no-colors)
238 export NO_COLORS="1"
239 ;;
240 --language)
241 export LANGUAGE=$2
242 shift
243 ;;
244 *)
245 echo -e "unknown parameter \"$1\""
246 exit -1
247 ;;
248 esac
249 shift
250done
251
252if [[ "$NO_COLORS" == "1" ]]; then
253 disable_colors
254fi
255
256export folder_base="$(dirname "${executable}")"/../../..
257
258if [[ $LANGUAGE == "java" || "$LANGUAGE" == "cs" ]]; then
259 export folder_base="$(dirname "${executable}")"/../..
260fi
261if [[ $tss == "1" ]]; then
262 export folder_base="$(dirname "${executable}")"/../../../../..
263fi
264
265echo -e "${INFO_TAG} Perftest executable is: $executable"
266echo -e "${INFO_TAG} Output folder is: $output_folder"
267
268################################################################################
269
270if [[ "${skip_large_data}" == "1" ]]; then
271 export datasizes_extended=${datasizes}
272elif [[ "${large_data}" == "1" ]]; then
273 export datasizes=${datasizes_extended}
274fi
275
276if [[ "${datalen_input}" != "" ]]; then
277 echo -e "${YELLOW}[TEST] Testing only for ${datalen_input}${NC}"
278 export datasizes=${datalen_input}
279 export datasizes_extended=${datalen_input}
280 if [[ "${no_batching_only}" != "1" ]]; then
281 export skip_large_data="1"
282 fi
283fi
284
285if [[ "$role" != "pub" && "$role" != "sub" ]]; then
286 echo -e "${ERROR_TAG} It must be either publisher or subscriber"
287 exit -1
288fi
289
290if [[ "$lat_thr" != "thr" && "$lat_thr" != "lat" ]]; then
291 echo -e "${ERROR_TAG} It must be either lat or thr"
292 exit -1
293fi
294
295if [[ "${interface}" == "" ]]; then
296 echo "Using default nics"
297 export nic_publisher=${ip_machine_1}
298 export nic_subscriber=${ip_machine_2}
299else
300 export nic_publisher=$interface
301 echo -e "${INFO_TAG} Using nic_publisher: ${nic_publisher}"
302
303 if [[ "${interface2}" == "" ]]; then
304 export nic_subscriber=$interface
305 else
306 export nic_subscriber=$interface2
307 fi
308 echo -e "${INFO_TAG} Using nic_subscriber: ${nic_subscriber}"
309
310 if [[ "${ip1}" != "" ]]; then
311 export ip_publisher=$ip1
312 echo "Using ip_publisher: ${ip_publisher}"
313 fi
314
315 if [[ "${ip2}" != "" ]]; then
316 export ip_subscriber=$ip2
317 echo "Using ip_subscriber: ${ip_subscriber}"
318 fi
319
320fi
321
322export transport_string="-transport $transport"
323
324if [[ "$transport" == "UDPv4" ]]; then
325
326 export transport_string_pub="$transport_string -nic $nic_publisher"
327 export transport_string_sub="$transport_string -nic $nic_subscriber"
328
329 if [[ "$micro" == "1" ]]; then
330 export transport_string_pub="$transport_string_pub -peer ${ip_subscriber}"
331 export transport_string_sub="$transport_string_sub -peer ${ip_publisher}"
332 fi
333
334elif [[ "$transport" == "TCP" ]]; then
335 export transport_string_pub="$transport_string \
336 -nic $nic_publisher \
337 -peer 0@tcpv4_lan://${ip_subscriber}:7400"
338 export transport_string_sub="$transport_string \
339 -nic $nic_subscriber \
340 -peer 0@tcpv4_lan://${ip_publisher}:7400"
341elif [[ "$transport" == "TLS" ]]; then
342 export transport_string_pub="$transport_string \
343 -nic $nic_publisher \
344 -peer tlsv4_lan://${ip_subscriber}:7400"
345 export transport_string_sub="$transport_string \
346 -nic $nic_subscriber \
347 -peer tlsv4_lan://${ip_publisher}:7400"
348elif [[ "$transport" == "UDPv4_WAN" ]]; then
349 export transport_string_pub="$transport_string \
350 -nic $nic_publisher \
351 -transportPublicAddress $ip_publisher:7400"
352 export transport_string_sub="$transport_string \
353 -nic $nic_subscriber \
354 -peer 0@udpv4_wan://${ip_publisher}:7400"
355else
356 export transport_string_pub="$transport_string"
357 export transport_string_sub="$transport_string"
358fi
359
360################################################################################
361
362export pub_string="-pub \
363 ${transport_string_pub} \
364 -noPrintIntervals \
365 -executionTime $exec_time"
366
367if [[ ${lat_thr} == "lat" ]]; then
368 export pub_string="$pub_string \
369 -latencyTest"
370fi
371
372export sub_string="-sub \
373 ${transport_string_sub} \
374 -noPrintIntervals"
375
376if [[ "$role" == "pub" ]]; then
377 echo -e "$INFO_TAG Publisher side running"
378 export commands_string=${pub_string}
379 export extra_arguments="${extra_arguments} ${extra_arguments_pub}"
380else
381 echo -e "$INFO_TAG Subscriber side running"
382 export commands_string=${sub_string}
383 export extra_arguments="${extra_arguments} ${extra_arguments_sub}"
384fi
385
386###############################################################################
387
388echo -e "${INFO_TAG} Executing: /set_${lat_thr}_mode.sh"
389sudo /set_${lat_thr}_mode.sh
390sleep 5
391
392cd $folder_base
393echo -e "${INFO_TAG} Folder Base is: $PWD"
394mkdir -p $output_folder
395
396# Tests that may use batching (when doing throughput tests)
397if [[ ${no_batching_only} != "1" ]]; then
398
399 # UNKEYED
400 if [[ "${skip_unkeyed}" == "" ]]; then
401
402 # RELIABLE
403 if [[ "${skip_rel_tests}" == "" ]]; then
404 execute_test "unkeyed" "rel" "${datasizes_extended}" "${extra_arguments}" "$file_suffix"
405 fi
406
407 # BEST EFFORT
408 if [[ "${skip_be_tests}" == "" ]]; then
409 execute_test "unkeyed" "be" "${datasizes}" "${extra_arguments}" "$file_suffix"
410 fi
411 fi
412
413 # KEYED
414 if [[ "${skip_keyed_data}" == "" ]]; then
415
416 # RELIABLE
417 if [[ "${skip_rel_tests}" == "" ]]; then
418 execute_test "keyed" "rel" "${datasizes}" "${extra_arguments}" "$file_suffix"
419 fi
420
421 # BEST EFFORT
422 if [[ "${skip_be_tests}" == "" ]]; then
423 execute_test "keyed" "be" "${datasizes}" "${extra_arguments}" "$file_suffix"
424 fi
425 fi
426
427fi
428
429if [[ "${skip_no_batching}" == "" || "${no_batching_only}" == "1" ]]; then
430 no_batching_tests="1"
431fi
432
433# Tests that will not use batching
434if [[ "${lat_thr}" == "thr" && "${no_batching_tests}" == "1" ]]; then
435
436 if [[ "$role" == "pub" ]]; then
437 export commands_string="${commands_string} -batchSize 0"
438 fi
439
440 # UNKEYED
441 if [[ "${skip_unkeyed}" == "" ]]; then
442
443 # RELIABLE
444 if [[ "${skip_rel_tests}" == "" ]]; then
445 execute_test "unkeyed" "rel" "${datasizes}" "${extra_arguments}" "_noBatch${file_suffix}"
446 fi
447
448 # BEST EFFORT
449 if [[ "${skip_be_tests}" == "" ]]; then
450 execute_test "unkeyed" "be" "${datasizes}" "${extra_arguments}" "_noBatch${file_suffix}"
451 fi
452 fi
453fi
1#!/bin/bash
2filename=$0
3script_location=`cd "\`dirname "$filename"\`"; 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"\`"; 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 --extra-arguments)
183 export extra_arguments=$2
184 shift
185 ;;
186 --extra-arguments-pub)
187 export extra_arguments_pub=$2
188 shift
189 ;;
190 --extra-arguments-sub)
191 export extra_arguments_sub=$2
192 shift
193 ;;
194 --skip-no-batching)
195 export skip_no_batching="1"
196 ;;
197 --skip-be)
198 export skip_be_tests="1"
199 ;;
200 --skip-rel)
201 export skip_rel_tests="1"
202 ;;
203 --skip-keyed)
204 export skip_keyed_data="1"
205 ;;
206 --skip-large-data)
207 export skip_large_data="1"
208 ;;
209 --large-data)
210 export large_data="1"
211 ;;
212 --keyed)
213 export skip_unkeyed="1"
214 ;;
215 --unkeyed)
216 export skip_keyed_data="1"
217 ;;
218 --no-batching)
219 export no_batching_only="1"
220 ;;
221 --reliable)
222 export skip_be_tests="1"
223 ;;
224 --best-effort)
225 export skip_rel_tests="1"
226 ;;
227 --security)
228 export security_only="$2"
229 shift
230 ;;
231 --micro)
232 export micro="1"
233 ;;
234 --tss)
235 export tss="1"
236 ;;
237 --no-colors)
238 export NO_COLORS="1"
239 ;;
240 --language)
241 export LANGUAGE=$2
242 shift
243 ;;
244 *)
245 echo -e "unknown parameter \"$1\""
246 exit -1
247 ;;
248 esac
249 shift
250done
251
252if [[ "$NO_COLORS" == "1" ]]; then
253 disable_colors
254fi
255
256export folder_base="$(dirname "${executable}")"/../../..
257
258if [[ $LANGUAGE == "java" || "$LANGUAGE" == "cs" ]]; then
259 export folder_base="$(dirname "${executable}")"/../..
260fi
261if [[ $tss == "1" ]]; then
262 export folder_base="$(dirname "${executable}")"/../../../../..
263fi
264
265echo -e "${INFO_TAG} Perftest executable is: $executable"
266echo -e "${INFO_TAG} Output folder is: $output_folder"
267
268################################################################################
269
270if [[ "${skip_large_data}" == "1" ]]; then
271 export datasizes_extended=${datasizes}
272elif [[ "${large_data}" == "1" ]]; then
273 export datasizes=${datasizes_extended}
274fi
275
276if [[ "${datalen_input}" != "" ]]; then
277 echo -e "${YELLOW}[TEST] Testing only for ${datalen_input}${NC}"
278 export datasizes=${datalen_input}
279 export datasizes_extended=${datalen_input}
280 if [[ "${no_batching_only}" != "1" ]]; then
281 export skip_large_data="1"
282 fi
283fi
284
285if [[ "$role" != "pub" && "$role" != "sub" ]]; then
286 echo -e "${ERROR_TAG} It must be either publisher or subscriber"
287 exit -1
288fi
289
290if [[ "$lat_thr" != "thr" && "$lat_thr" != "lat" ]]; then
291 echo -e "${ERROR_TAG} It must be either lat or thr"
292 exit -1
293fi
294
295if [[ "${interface}" == "" ]]; then
296 echo "Using default nics"
297 export nic_publisher=${ip_machine_1}
298 export nic_subscriber=${ip_machine_2}
299else
300 export nic_publisher=$interface
301 echo -e "${INFO_TAG} Using nic_publisher: ${nic_publisher}"
302
303 if [[ "${interface2}" == "" ]]; then
304 export nic_subscriber=$interface
305 else
306 export nic_subscriber=$interface2
307 fi
308 echo -e "${INFO_TAG} Using nic_subscriber: ${nic_subscriber}"
309
310 if [[ "${ip1}" != "" ]]; then
311 export ip_publisher=$ip1
312 echo "Using ip_publisher: ${ip_publisher}"
313 fi
314
315 if [[ "${ip2}" != "" ]]; then
316 export ip_subscriber=$ip2
317 echo "Using ip_subscriber: ${ip_subscriber}"
318 fi
319
320fi
321
322export transport_string="-transport $transport"
323
324if [[ "$transport" == "UDPv4" ]]; then
325
326 export transport_string_pub="$transport_string -nic $nic_publisher"
327 export transport_string_sub="$transport_string -nic $nic_subscriber"
328
329 if [[ "$micro" == "1" ]]; then
330 export transport_string_pub="$transport_string_pub -peer ${ip_subscriber}"
331 export transport_string_sub="$transport_string_sub -peer ${ip_publisher}"
332 fi
333
334elif [[ "$transport" == "TCP" ]]; then
335 export transport_string_pub="$transport_string \
336 -nic $nic_publisher \
337 -peer 0@tcpv4_lan://${ip_subscriber}:7400"
338 export transport_string_sub="$transport_string \
339 -nic $nic_subscriber \
340 -peer 0@tcpv4_lan://${ip_publisher}:7400"
341elif [[ "$transport" == "TLS" ]]; then
342 export transport_string_pub="$transport_string \
343 -nic $nic_publisher \
344 -peer tlsv4_lan://${ip_subscriber}:7400"
345 export transport_string_sub="$transport_string \
346 -nic $nic_subscriber \
347 -peer tlsv4_lan://${ip_publisher}:7400"
348elif [[ "$transport" == "UDPv4_WAN" ]]; then
349 export transport_string_pub="$transport_string \
350 -nic $nic_publisher \
351 -transportPublicAddress $ip_publisher:7400"
352 export transport_string_sub="$transport_string \
353 -nic $nic_subscriber \
354 -peer 0@udpv4_wan://${ip_publisher}:7400"
355else
356 export transport_string_pub="$transport_string"
357 export transport_string_sub="$transport_string"
358fi
359
360################################################################################
361
362export pub_string="-pub \
363 ${transport_string_pub} \
364 -noPrintIntervals \
365 -executionTime $exec_time"
366
367if [[ ${lat_thr} == "lat" ]]; then
368 export pub_string="$pub_string \
369 -latencyTest"
370fi
371
372export sub_string="-sub \
373 ${transport_string_sub} \
374 -noPrintIntervals"
375
376if [[ "$role" == "pub" ]]; then
377 echo -e "$INFO_TAG Publisher side running"
378 export commands_string=${pub_string}
379 export extra_arguments="${extra_arguments} ${extra_arguments_pub}"
380else
381 echo -e "$INFO_TAG Subscriber side running"
382 export commands_string=${sub_string}
383 export extra_arguments="${extra_arguments} ${extra_arguments_sub}"
384fi
385
386###############################################################################
387
388echo -e "${INFO_TAG} Executing: /set_${lat_thr}_mode.sh"
389sudo /set_${lat_thr}_mode.sh
390sleep 5
391
392cd $folder_base
393echo -e "${INFO_TAG} Folder Base is: $PWD"
394mkdir -p $output_folder
395
396# Tests that may use batching (when doing throughput tests)
397if [[ ${no_batching_only} != "1" ]]; then
398
399 # UNKEYED
400 if [[ "${skip_unkeyed}" == "" ]]; then
401
402 # RELIABLE
403 if [[ "${skip_rel_tests}" == "" ]]; then
404 execute_test "unkeyed" "rel" "${datasizes_extended}" "${extra_arguments}" "$file_suffix"
405 fi
406
407 # BEST EFFORT
408 if [[ "${skip_be_tests}" == "" ]]; then
409 execute_test "unkeyed" "be" "${datasizes}" "${extra_arguments}" "$file_suffix"
410 fi
411 fi
412
413 # KEYED
414 if [[ "${skip_keyed_data}" == "" ]]; then
415
416 # RELIABLE
417 if [[ "${skip_rel_tests}" == "" ]]; then
418 execute_test "keyed" "rel" "${datasizes}" "${extra_arguments}" "$file_suffix"
419 fi
420
421 # BEST EFFORT
422 if [[ "${skip_be_tests}" == "" ]]; then
423 execute_test "keyed" "be" "${datasizes}" "${extra_arguments}" "$file_suffix"
424 fi
425 fi
426
427fi
428
429if [[ "${skip_no_batching}" == "" || "${no_batching_only}" == "1" ]]; then
430 no_batching_tests="1"
431fi
432
433# Tests that will not use batching
434if [[ "${lat_thr}" == "thr" && "${no_batching_tests}" == "1" ]]; then
435
436 if [[ "$role" == "pub" ]]; then
437 export commands_string="${commands_string} -batchSize 0"
438 fi
439
440 # UNKEYED
441 if [[ "${skip_unkeyed}" == "" ]]; then
442
443 # RELIABLE
444 if [[ "${skip_rel_tests}" == "" ]]; then
445 execute_test "unkeyed" "rel" "${datasizes}" "${extra_arguments}" "_noBatch${file_suffix}"
446 fi
447
448 # BEST EFFORT
449 if [[ "${skip_be_tests}" == "" ]]; then
450 execute_test "unkeyed" "be" "${datasizes}" "${extra_arguments}" "_noBatch${file_suffix}"
451 fi
452 fi
453fi
1#!/bin/bash
2filename=$0
3script_location=`cd "\`dirname "$filename"\`"; 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"\`"; 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 --extra-arguments)
183 export extra_arguments=$2
184 shift
185 ;;
186 --extra-arguments-pub)
187 export extra_arguments_pub=$2
188 shift
189 ;;
190 --extra-arguments-sub)
191 export extra_arguments_sub=$2
192 shift
193 ;;
194 --skip-no-batching)
195 export skip_no_batching="1"
196 ;;
197 --skip-be)
198 export skip_be_tests="1"
199 ;;
200 --skip-rel)
201 export skip_rel_tests="1"
202 ;;
203 --skip-keyed)
204 export skip_keyed_data="1"
205 ;;
206 --skip-large-data)
207 export skip_large_data="1"
208 ;;
209 --large-data)
210 export large_data="1"
211 ;;
212 --keyed)
213 export skip_unkeyed="1"
214 ;;
215 --unkeyed)
216 export skip_keyed_data="1"
217 ;;
218 --no-batching)
219 export no_batching_only="1"
220 ;;
221 --reliable)
222 export skip_be_tests="1"
223 ;;
224 --best-effort)
225 export skip_rel_tests="1"
226 ;;
227 --security)
228 export security_only="$2"
229 shift
230 ;;
231 --micro)
232 export micro="1"
233 ;;
234 --tss)
235 export tss="1"
236 ;;
237 --no-colors)
238 export NO_COLORS="1"
239 ;;
240 --language)
241 export LANGUAGE=$2
242 shift
243 ;;
244 *)
245 echo -e "unknown parameter \"$1\""
246 exit -1
247 ;;
248 esac
249 shift
250done
251
252if [[ "$NO_COLORS" == "1" ]]; then
253 disable_colors
254fi
255
256export folder_base="$(dirname "${executable}")"/../../..
257
258if [[ $LANGUAGE == "java" || "$LANGUAGE" == "cs" ]]; then
259 export folder_base="$(dirname "${executable}")"/../..
260fi
261if [[ $tss == "1" ]]; then
262 export folder_base="$(dirname "${executable}")"/../../../../..
263fi
264
265echo -e "${INFO_TAG} Perftest executable is: $executable"
266echo -e "${INFO_TAG} Output folder is: $output_folder"
267
268################################################################################
269
270if [[ "${skip_large_data}" == "1" ]]; then
271 export datasizes_extended=${datasizes}
272elif [[ "${large_data}" == "1" ]]; then
273 export datasizes=${datasizes_extended}
274fi
275
276if [[ "${datalen_input}" != "" ]]; then
277 echo -e "${YELLOW}[TEST] Testing only for ${datalen_input}${NC}"
278 export datasizes=${datalen_input}
279 export datasizes_extended=${datalen_input}
280 if [[ "${no_batching_only}" != "1" ]]; then
281 export skip_large_data="1"
282 fi
283fi
284
285if [[ "$role" != "pub" && "$role" != "sub" ]]; then
286 echo -e "${ERROR_TAG} It must be either publisher or subscriber"
287 exit -1
288fi
289
290if [[ "$lat_thr" != "thr" && "$lat_thr" != "lat" ]]; then
291 echo -e "${ERROR_TAG} It must be either lat or thr"
292 exit -1
293fi
294
295if [[ "${interface}" == "" ]]; then
296 echo "Using default nics"
297 export nic_publisher=${ip_machine_1}
298 export nic_subscriber=${ip_machine_2}
299else
300 export nic_publisher=$interface
301 echo -e "${INFO_TAG} Using nic_publisher: ${nic_publisher}"
302
303 if [[ "${interface2}" == "" ]]; then
304 export nic_subscriber=$interface
305 else
306 export nic_subscriber=$interface2
307 fi
308 echo -e "${INFO_TAG} Using nic_subscriber: ${nic_subscriber}"
309
310 if [[ "${ip1}" != "" ]]; then
311 export ip_publisher=$ip1
312 echo "Using ip_publisher: ${ip_publisher}"
313 fi
314
315 if [[ "${ip2}" != "" ]]; then
316 export ip_subscriber=$ip2
317 echo "Using ip_subscriber: ${ip_subscriber}"
318 fi
319
320fi
321
322export transport_string="-transport $transport"
323
324if [[ "$transport" == "UDPv4" ]]; then
325
326 export transport_string_pub="$transport_string -nic $nic_publisher"
327 export transport_string_sub="$transport_string -nic $nic_subscriber"
328
329 if [[ "$micro" == "1" ]]; then
330 export transport_string_pub="$transport_string_pub -peer ${ip_subscriber}"
331 export transport_string_sub="$transport_string_sub -peer ${ip_publisher}"
332 fi
333
334elif [[ "$transport" == "TCP" ]]; then
335 export transport_string_pub="$transport_string \
336 -nic $nic_publisher \
337 -peer 0@tcpv4_lan://${ip_subscriber}:7400"
338 export transport_string_sub="$transport_string \
339 -nic $nic_subscriber \
340 -peer 0@tcpv4_lan://${ip_publisher}:7400"
341elif [[ "$transport" == "TLS" ]]; then
342 export transport_string_pub="$transport_string \
343 -nic $nic_publisher \
344 -peer tlsv4_lan://${ip_subscriber}:7400"
345 export transport_string_sub="$transport_string \
346 -nic $nic_subscriber \
347 -peer tlsv4_lan://${ip_publisher}:7400"
348elif [[ "$transport" == "UDPv4_WAN" ]]; then
349 export transport_string_pub="$transport_string \
350 -nic $nic_publisher \
351 -transportPublicAddress $ip_publisher:7400"
352 export transport_string_sub="$transport_string \
353 -nic $nic_subscriber \
354 -peer 0@udpv4_wan://${ip_publisher}:7400"
355else
356 export transport_string_pub="$transport_string"
357 export transport_string_sub="$transport_string"
358fi
359
360################################################################################
361
362export pub_string="-pub \
363 ${transport_string_pub} \
364 -noPrintIntervals \
365 -executionTime $exec_time"
366
367if [[ ${lat_thr} == "lat" ]]; then
368 export pub_string="$pub_string \
369 -latencyTest"
370fi
371
372export sub_string="-sub \
373 ${transport_string_sub} \
374 -noPrintIntervals"
375
376if [[ "$role" == "pub" ]]; then
377 echo -e "$INFO_TAG Publisher side running"
378 export commands_string=${pub_string}
379 export extra_arguments="${extra_arguments} ${extra_arguments_pub}"
380else
381 echo -e "$INFO_TAG Subscriber side running"
382 export commands_string=${sub_string}
383 export extra_arguments="${extra_arguments} ${extra_arguments_sub}"
384fi
385
386###############################################################################
387
388echo -e "${INFO_TAG} Executing: /set_${lat_thr}_mode.sh"
389sudo /set_${lat_thr}_mode.sh
390sleep 5
391
392cd $folder_base
393echo -e "${INFO_TAG} Folder Base is: $PWD"
394mkdir -p $output_folder
395
396# Tests that may use batching (when doing throughput tests)
397if [[ ${no_batching_only} != "1" ]]; then
398
399 # UNKEYED
400 if [[ "${skip_unkeyed}" == "" ]]; then
401
402 # RELIABLE
403 if [[ "${skip_rel_tests}" == "" ]]; then
404 execute_test "unkeyed" "rel" "${datasizes_extended}" "${extra_arguments}" "$file_suffix"
405 fi
406
407 # BEST EFFORT
408 if [[ "${skip_be_tests}" == "" ]]; then
409 execute_test "unkeyed" "be" "${datasizes}" "${extra_arguments}" "$file_suffix"
410 fi
411 fi
412
413 # KEYED
414 if [[ "${skip_keyed_data}" == "" ]]; then
415
416 # RELIABLE
417 if [[ "${skip_rel_tests}" == "" ]]; then
418 execute_test "keyed" "rel" "${datasizes}" "${extra_arguments}" "$file_suffix"
419 fi
420
421 # BEST EFFORT
422 if [[ "${skip_be_tests}" == "" ]]; then
423 execute_test "keyed" "be" "${datasizes}" "${extra_arguments}" "$file_suffix"
424 fi
425 fi
426
427fi
428
429if [[ "${skip_no_batching}" == "" || "${no_batching_only}" == "1" ]]; then
430 no_batching_tests="1"
431fi
432
433# Tests that will not use batching
434if [[ "${lat_thr}" == "thr" && "${no_batching_tests}" == "1" ]]; then
435
436 if [[ "$role" == "pub" ]]; then
437 export commands_string="${commands_string} -batchSize 0"
438 fi
439
440 # UNKEYED
441 if [[ "${skip_unkeyed}" == "" ]]; then
442
443 # RELIABLE
444 if [[ "${skip_rel_tests}" == "" ]]; then
445 execute_test "unkeyed" "rel" "${datasizes}" "${extra_arguments}" "_noBatch${file_suffix}"
446 fi
447
448 # BEST EFFORT
449 if [[ "${skip_be_tests}" == "" ]]; then
450 execute_test "unkeyed" "be" "${datasizes}" "${extra_arguments}" "_noBatch${file_suffix}"
451 fi
452 fi
453fi
1#!/bin/bash
2filename=$0
3script_location=`cd "\`dirname "$filename"\`"; 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