3.2.1.5. LWS vs Full Security vs No Security vs UDPv4

The following tests aim to compare the Network performance for different use-cases, we aim to understand the impact of using LWS vs the Full Security Plugins, and compare also against not using any security at all.

Perftest Scripts

To produce these tests, we executed RTI Perftest for C++98. The scripts used to execute the tests 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
 13export run_batching_tests="1"
 14export run_no_batching_tests="1"
 15export nic_loss_rate=0
 16export nic_delay_ms=0
 17
 18# We will use some colors to improve visibility of errors and info messages.
 19RED='\033[0;31m'
 20GREEN='\033[0;32m'
 21YELLOW='\033[0;33m'
 22BLUE='\033[0;34m'
 23LIGHTBLUE='\033[0;36m'
 24NC='\033[0m'
 25INFO_TAG="${GREEN}[INFO][$role]:${NC}"
 26WARNING_TAG="${YELLOW}[WARNING][$role]:${NC}"
 27ERROR_TAG="${RED}[ERROR][$role]:${NC}"
 28
 29################################################################################
 30
 31function disable_colors() {
 32    export RED=""
 33    export GREEN=""
 34    export YELLOW=""
 35    export NC=""
 36    export BLUE=""
 37    export LIGHTBLUE=""
 38    export INFO_TAG="${GREEN}[INFO][$role]:${NC}"
 39    export WARNING_TAG="${YELLOW}[WARNING][$role]:${NC}"
 40    export ERROR_TAG="${RED}[ERROR][$role]:${NC}"
 41}
 42
 43function change_domain() {
 44    if [[ "$domain" == "1" ]]; then
 45        export domain="2"
 46    else
 47        export domain="1"
 48    fi
 49}
 50
 51# Function to process and append lines to the output file
 52function append_to_output_file() {
 53    local line=${1?line required}; readonly line
 54    local append=$(echo "${2?append required}" | tr -s ' '); readonly append
 55    local file=${3?file required}; readonly file
 56    if [[ "${line: -1}" == $'\n' ]]; then
 57        line="${line::-1}"
 58    fi
 59    echo "${line}${append}" >> "$file"
 60}
 61
 62# Usage: execute_test <keyed/unkeyed> <rel/be> <datasizes> <batchSize>
 63function execute_test() {
 64
 65    local keyed_unkeyed=$1
 66    local rel_be=$2
 67    local datasizes_test=$3
 68    local other_args=$4
 69    local name_suffix=$5
 70
 71    local commands_string_test=$commands_string
 72    local tag=""
 73
 74    if [[ "${keyed_unkeyed}" == "keyed" ]]; then
 75        commands_string_test="${commands_string_test} -keyed -instances $instance_number"
 76        tag="[${YELLOW}${transport}${NC}|${BLUE}K${NC}|"
 77    else
 78        tag="[${YELLOW}${transport}${NC}|${LIGHTBLUE}UK${NC}|"
 79    fi
 80
 81    if [[ "${rel_be}" == "be" ]]; then
 82        commands_string_test="${commands_string_test} -bestEffort"
 83        tag="${tag}${YELLOW}BE${NC}]"
 84    else
 85        tag="${tag}${RED}REL${NC}]"
 86    fi
 87
 88    # If batch_size is set to a non-zero value, we will add it to the command line of the publisher side.
 89    # When batch_size is 0, it is already handled by the no-batching block which appends -batchSize 0 to commands_string.
 90    if [[ "$batch_size" != "" && "$batch_size" != "0" && "$role" == "pub" ]]; then
 91        commands_string_test="${commands_string_test} -batchSize $batch_size"
 92    fi
 93
 94    tag="${tag}[${LIGHTBLUE}${lat_thr}${NC}]"
 95
 96    local output_file=$output_folder/${lat_thr}_${role}_${keyed_unkeyed}_${rel_be}${name_suffix}.csv
 97
 98    if [[ "$role" == "pub" ]]; then
 99        echo -e "${YELLOW}[TEST]: $keyed_unkeyed, $rel_be, Is a no-batching test = $no_batching_tests. ${NC}"
100    fi
101
102    if [[ "$thread_cpu_affinity" != "" && "$LANGUAGE" != "java" && "$LANGUAGE" != "cs" ]]; then
103        commands_string_test="${commands_string_test} -threadCPUAffinity $thread_cpu_affinity"
104    fi
105
106    local pre_command_string=""
107
108    if [[ "$thread_priorities" != "" && "$LANGUAGE" != "java" && "$LANGUAGE" != "cs" ]]; then
109        echo -e "${WARNING_TAG} Thread priorities enabled, this requires using sudo"
110        # When using sudo, the LD_LIBRARY_PATH is emptied, hence we need to set it again in the command itself
111        export LD_LIBRARY_PATH_COPIED="$LD_LIBRARY_PATH"
112        pre_command_string="sudo LD_LIBRARY_PATH=$LD_LIBRARY_PATH_COPIED "
113        commands_string_test="${commands_string_test} -threadPriorities $thread_priorities"
114    fi
115
116    if [[ "$pin_memory" != "" && "$LANGUAGE" != "java" && "$LANGUAGE" != "cs" ]]; then
117        commands_string_test="${commands_string_test} -pinMemory"
118    fi
119
120    if [[ "$no_taskset" == "" && "$thread_cpu_affinity" == "" && "$LANGUAGE" != "java" && "$LANGUAGE" != "cs" ]]; then
121        pre_command_string="$pre_command_string taskset -c $core"
122    fi
123
124    if [[ "$LANGUAGE" == "python" ]]; then
125        pre_command_string="$pre_command_string python3 "
126    fi
127
128    if [[ "$DOCKER" == "1" ]]; then
129        pre_command_string="$pre_command_string docker run --net=host -v /home/perfuser/rti_license_connextpro.dat:/opt/rti.com/rti_connext_dds-7.3.0/rti_license.dat rticom/perftest:7.3.0-EAR "
130        executable=""
131    fi
132
133    # Get the aprox time this will take:
134    total_tests=$((`wc -w <<< "$datasizes_test"` * num_reps))
135    total_time=$((total_tests * exec_time))
136
137    touch $output_file
138    local no_headers=""
139    local current_test=0
140    for index in $(seq 1 ${num_reps}); do
141        for DATALEN in ${datasizes_test}; do
142            current_test=$((current_test + 1))
143
144            if [[ ! -s $output_file ]]; then
145                echo -e "${INFO_TAG} Output file is empty, filling the header."
146                no_headers=""
147            else
148                echo -e "${INFO_TAG} Output file is not empty."
149                no_headers=" -noOutputHeaders"
150            fi
151
152            export command="$pre_command_string $executable -domain $domain -dataLen $DATALEN $commands_string_test $other_args $no_headers"
153            if [[ "$role" == "pub" ]]; then
154                echo -e "Test ${tag} (${current_test}/${total_tests}) -- Total time = ${total_time}s"
155                echo -e ${BLUE}$command${NC}
156            else
157                echo -e ${LIGHTBLUE}$command${NC}
158            fi
159
160            # In certain cases we need to wait a bit before running the test, this is
161            # because the previous test might not be finished on the other side yet, or because the
162            # discovery mechanism does not work like in connext DDS.
163            if [[ "$LANGUAGE" == "cs" && "$role" == "pub" ]]; then
164                sleep 3
165            fi
166            if [[ "$raw" == "1" && "$role" == "sub" ]]; then
167                sleep 5
168            fi
169
170            # Gather netstat info before running the test
171            if [[ "${get_netstat_info}" == "1" ]]; then
172                echo -e "${INFO_TAG} Getting netstat info before"
173                netstat -s -u | grep -e "error" -e "packet" > $output_folder/${lat_thr}_${role}_${keyed_unkeyed}_${rel_be}${name_suffix}_netstat_before.txt
174            fi
175
176            # Execute the command and capture the output
177            if [[ $LANGUAGE == "c++98" || $LANGUAGE == "" ]]; then
178                echo -e "${INFO_TAG} Using C++98, using -outputFile option"
179                touch ${output_file}_tmp_line
180                chmod 777 ${output_file}_tmp_line
181                eval $command -outputFile ${output_file}_tmp_line
182            else
183                eval $command > ${output_file}_tmp_line
184            fi
185
186            number_of_lines=$(wc -l < ${output_file}_tmp_line)
187            echo -e "${INFO_TAG} Size of the output text: $number_of_lines lines"
188
189            # Check if this is the first test for this output file.
190            local is_first_test=0
191            if [[ ! -s $output_file ]]; then
192                is_first_test=1
193            fi
194            local expected_lines=$((is_first_test+1))
195
196            if [[ $number_of_lines -ne ${expected_lines} ]]; then
197                echo -e "${WARNING_TAG} The output text should have ${expected_lines} lines, but it has ${number_of_lines}."
198                echo -e "${RED} The content is: \n\"\"\""
199                cat ${output_file}_tmp_line
200                echo -e "\"\"\""
201                echo -e "Not adding it to the output file. ${NC}"
202            else
203                if [[ $number_of_lines -gt 1 ]]; then
204                    header_line=$(head -n 1 "${output_file}_tmp_line")
205                    echo -e "${INFO_TAG} Header line is: $header_line"
206                fi
207                result_line=$(tail -n 1 "${output_file}_tmp_line")
208                echo -e "${INFO_TAG} Result line is: $result_line"
209
210                # If this is the first test, we need to add the header line to the output file
211                if [[ $is_first_test -eq 1 ]]; then
212                    append_to_output_file "$header_line" ", command-line" $output_file
213                fi
214
215                command=$(echo $command | sed 's/,/:comma:/g')
216                # Remove the `"` characters from the command line
217                command=$(echo $command | sed 's/\"//g')
218
219                # Append the result line to the output file
220                append_to_output_file "$result_line" ", $command" $output_file
221            fi
222
223            # Always remove the temporary file
224            rm -rf ${output_file}_tmp_line
225
226            # Gather netstat info after running the test
227            if [[ "${get_netstat_info}" == "1" ]]; then
228                echo -e "${INFO_TAG} Getting netstat info after"
229                netstat -s -u | grep -e "error" -e "packet" > $output_folder/${lat_thr}_${role}_${keyed_unkeyed}_${rel_be}${name_suffix}_netstat_after.txt
230                touch "$output_folder/${lat_thr}_${role}_${keyed_unkeyed}_${rel_be}${name_suffix}_netstat.csv"
231                python3 $script_location/../../../tools/diff_netstat_output.py \
232                    -n $output_folder/${lat_thr}_${role}_${keyed_unkeyed}_${rel_be}${name_suffix}_netstat_after.txt \
233                    -o $output_folder/${lat_thr}_${role}_${keyed_unkeyed}_${rel_be}${name_suffix}_netstat_before.txt \
234                    -d $DATALEN $no_header_netstat \
235                    -csv >> "$output_folder/${lat_thr}_${role}_${keyed_unkeyed}_${rel_be}${name_suffix}_netstat.csv"
236                rm -rf $output_folder/${lat_thr}_${role}_${keyed_unkeyed}_${rel_be}${name_suffix}_netstat_*.txt
237                no_header_netstat=" -nh"
238            fi
239
240            change_domain
241        done
242    done
243}
244
245################################################################################
246# PARSE COMMAND LINE OPTIONS:
247
248while [ "$1" != "" ]; do
249    case $1 in
250        --executable)
251            executable=$2
252            shift
253            ;;
254        --docker)
255            DOCKER="1"
256            ;;
257        --output-folder)
258            output_folder=$2
259            shift
260            ;;
261        --role)
262            export role=$2
263            shift
264            ;;
265        --core)
266            export core=$2
267            shift
268            ;;
269        --assign-core-list | --thread-cpu-affinity)
270            export thread_cpu_affinity=$2
271            shift
272            ;;
273        --assign-thread-priorities | --thread-priorities)
274            export thread_priorities=$2
275            shift
276            ;;
277        --pin-memory)
278            export pin_memory="1"
279            ;;
280        --test-kind)
281            export lat_thr=$2
282            shift
283            ;;
284        --interface1)
285            export interface=$2
286            shift
287            ;;
288        --interface2)
289            export interface2=$2
290            shift
291            ;;
292        --ip1)
293            export ip1=$2
294            shift
295            ;;
296        --ip2)
297            export ip2=$2
298            shift
299            ;;
300        --repetitions)
301            export num_reps=$2
302            shift
303            ;;
304        --domain)
305            export domain=$2
306            shift
307            ;;
308        --execution-time)
309            export exec_time=$2
310            shift
311            ;;
312        --transport)
313            export transport=$2
314            shift
315            ;;
316        --datalen)
317            export datalen_input=$2
318            shift
319            ;;
320        --file-suffix)
321            export file_suffix=$2
322            shift
323            ;;
324        --folder-suffix)
325            export folder_suffix=$2
326            shift
327            ;;
328        --sub-folder)
329            sub_folder=$2
330            shift
331            ;;
332        --executable-suffix)
333            export executable_suffix=$2
334            shift
335            ;;
336        --extra-arguments)
337            export extra_arguments=$2
338            shift
339            ;;
340        --extra-arguments-pub)
341            export extra_arguments_pub=$2
342            shift
343            ;;
344        --extra-arguments-sub)
345            export extra_arguments_sub=$2
346            shift
347            ;;
348        --skip-be)
349            export skip_be_tests="1"
350            ;;
351        --skip-rel)
352            export skip_rel_tests="1"
353            ;;
354        --skip-keyed)
355            export skip_keyed_data="1"
356            ;;
357        --skip-large-data)
358            export skip_large_data="1"
359            ;;
360        --large-data)
361            export large_data="1"
362            ;;
363        --keyed)
364            export skip_unkeyed="1"
365            ;;
366        --unkeyed)
367            export skip_keyed_data="1"
368            ;;
369        --no-batching | --skip-batching)
370            export run_batching_tests="0"
371            export run_no_batching_tests="1"
372            ;;
373        --skip-no-batching)
374            export run_batching_tests="1"
375            export run_no_batching_tests="0"
376            ;;
377        --batch-size)
378            export batch_size=$2
379            shift
380            ;;
381        --reliable)
382            export skip_be_tests="1"
383            ;;
384        --best-effort)
385            export skip_rel_tests="1"
386            ;;
387        --security-gov)
388            export security_only="$2"
389            shift
390            ;;
391        --micro)
392            export micro="1"
393            ;;
394        --cert)
395            export cert="1"
396            ;;
397        --raw | --raw-transport)
398            export raw="1"
399            ;;
400        --tss)
401            export tss="1"
402            ;;
403        --no-colors)
404            export NO_COLORS="1"
405            ;;
406        --language)
407            export LANGUAGE=$2
408            shift
409            ;;
410        --loss-rate | --nic-loss-rate | --nic-loss-rate-percent)
411            export nic_loss_rate=$2
412            export configure_network="1"
413            shift
414            ;;
415        --delay | --nic-delay-ms | --nic-delay)
416            export nic_delay_ms=$2
417            export configure_network="1"
418            shift
419            ;;
420        --get-netstat-info | --netstat)
421            export get_netstat_info="1"
422            ;;
423        --reduced-data-sizes-set)
424            export REDUCED_DATA_SIZES_SET="1"
425            ;;
426        --dont-change-tuned-settings)
427            export dont_change_tuned_settings="1"
428            ;;
429        --no-taskset)
430            export no_taskset=1
431            ;;
432        --asynchronous | --async)
433            export ASYNC="1"
434            ;;
435        *)
436            echo -e "unknown parameter \"$1\""
437            exit 255
438            ;;
439    esac
440    shift
441done
442
443if [[ "$NO_COLORS" == "1" ]]; then
444    disable_colors
445fi
446
447export folder_base="$(dirname "${executable}")"/../../..
448
449if [[ $LANGUAGE == "java"  || "$LANGUAGE" == "cs" ]]; then
450    export folder_base="$(dirname "${executable}")"/../..
451fi
452if [[ $tss == "1" ]]; then
453    export folder_base="$(dirname "${executable}")"/../../../../..
454fi
455
456if [[ "${executable_suffix}" != "" ]]; then
457    export executable="${executable}${executable_suffix}"
458fi
459
460if [[ -n "${folder_suffix}" ]]; then
461    export output_folder="${output_folder}${folder_suffix}"
462fi
463
464if [[ -n "${sub_folder}" ]]; then
465    export output_folder="${output_folder}/${sub_folder}"
466fi
467
468if [[ "${ASYNC}" == "1" ]]; then
469    export output_folder="${output_folder}/async"
470fi
471
472echo -e "${INFO_TAG} Perftest executable is: $executable"
473echo -e "${INFO_TAG} Output folder is: $output_folder"
474
475################################################################################
476
477if [[ "$LANGUAGE" == "python" ]]; then
478    export skip_keyed_data="1"
479    export skip_large_data="1"
480    export skip_be_tests="1"
481    export run_no_batching_tests="0"
482fi
483
484if [[ "$LANGUAGE" == "java" || "$LANGUAGE" == "cs" ]]; then
485    # Java and C# perftest do not support these execution options.
486    unset thread_cpu_affinity
487    unset thread_priorities
488    unset pin_memory
489    export no_taskset=1
490fi
491
492if [[ "${skip_large_data}" == "1" ]]; then
493    export datasizes_extended=${datasizes}
494elif [[ "${large_data}" == "1" ]]; then
495    export datasizes=${datasizes_extended}
496fi
497
498if [[ "${datalen_input}" != "" ]]; then
499    echo -e "${YELLOW}[TEST] Testing only for ${datalen_input}${NC}"
500    export datasizes=${datalen_input}
501    export datasizes_extended=${datalen_input}
502    if [[ "${run_no_batching_tests}" == "1" && "${run_batching_tests}" == "0" ]]; then
503        export skip_large_data="1"
504    fi
505else 
506    if [[ "${REDUCED_DATA_SIZES_SET}" != "" ]]; then
507        echo -e "${YELLOW}[TEST] Testing Reduced set of datasizes ${NC}"
508        export datasizes="32 128 512 2048 8192 32768 63000"
509        export datasizes_extended="${datasizes} 102400 1048576 10485760"
510    fi
511fi
512
513if [[ "$role" != "pub" && "$role" != "sub" ]]; then
514    echo -e "${ERROR_TAG} It must be either publisher or subscriber"
515    exit 255
516fi
517
518if [[ "$lat_thr" != "thr" && "$lat_thr" != "lat" ]]; then
519    echo -e "${ERROR_TAG} It must be either lat or thr"
520    exit 255
521fi
522
523if [[ "${interface}" == "" ]]; then
524    echo "Using default nics"
525    export nic_publisher=${ip_machine_1}
526    export nic_subscriber=${ip_machine_2}
527elif [[ "${interface}" == "both" ]]; then
528    export nic_publisher="enp1s0f0,eno1"
529    export nic_subscriber="enp1s0f0,eno1"
530    echo -e "${INFO_TAG} Using nic_publisher: ${nic_publisher}"
531    echo -e "${INFO_TAG} Using nic_subscriber: ${nic_subscriber}"
532else
533    export nic_publisher=$interface
534    echo -e "${INFO_TAG} Using nic_publisher: ${nic_publisher}"
535
536    if [[ "${interface2}" == "" ]]; then
537        export nic_subscriber=$interface
538    else
539        export nic_subscriber=$interface2
540    fi
541    echo -e "${INFO_TAG} Using nic_subscriber: ${nic_subscriber}"
542
543    if [[ "${ip1}" != "" ]]; then
544        export ip_publisher=$ip1
545        echo "Using ip_publisher: ${ip_publisher}"
546    fi
547
548    if [[ "${ip2}" != "" ]]; then
549        export ip_subscriber=$ip2
550        echo "Using ip_subscriber: ${ip_subscriber}"
551    fi
552
553fi
554
555if [[ "$transport" != "" ]]; then
556    export transport_string="-transport $transport"
557
558    if [[ "$transport" == "UDPv4" ]]; then
559
560        export transport_string_pub="$transport_string -nic $nic_publisher"
561        export transport_string_sub="$transport_string -nic $nic_subscriber"
562
563        if [[ "$raw" == "1" ]]; then
564            export transport_string_pub="$transport_string_pub -peer ${ip_subscriber}"
565            export transport_string_sub="$transport_string_sub -peer ${ip_publisher}"
566        fi
567
568        if [[ "$micro" == "1" || "$cert" == "1" ]]; then
569            export transport_string_pub="$transport_string_pub -peer _udp://${ip_subscriber}"
570            export transport_string_sub="$transport_string_sub -peer _udp://${ip_publisher}"
571        fi
572
573    elif [[ "$transport" == "TCP" ]]; then
574        export transport_string_pub="$transport_string \
575            -nic $nic_publisher \
576            -peer 0@tcpv4_lan://${ip_subscriber}:7400"
577        export transport_string_sub="$transport_string \
578            -nic $nic_subscriber \
579            -peer 0@tcpv4_lan://${ip_publisher}:7400"
580    elif [[ "$transport" == "TLS" ]]; then
581        export transport_string_pub="$transport_string \
582            -nic $nic_publisher \
583            -peer tlsv4_lan://${ip_subscriber}:7400"
584        export transport_string_sub="$transport_string \
585            -nic $nic_subscriber \
586            -peer tlsv4_lan://${ip_publisher}:7400"
587    elif [[ "$transport" == "UDPv4_WAN" ]]; then
588        export transport_string_pub="$transport_string \
589            -nic $nic_publisher \
590            -transportPublicAddress $ip_publisher:7400"
591        export transport_string_sub="$transport_string \
592            -nic $nic_subscriber \
593            -peer 0@udpv4_wan://${ip_publisher}:7400"
594    else
595        export transport_string_pub="$transport_string"
596        export transport_string_sub="$transport_string"
597    fi
598fi
599
600################################################################################
601
602export pub_string="-pub \
603        ${transport_string_pub} \
604        -noPrintIntervals \
605        -executionTime $exec_time"
606
607if [[ ${lat_thr} == "lat" ]]; then
608    export pub_string="$pub_string \
609        -latencyTest"
610fi
611
612if [[ "$role" == "pub" ]]; then
613
614    if [[ "$configure_network" == "1" ]]; then
615        echo -e "${INFO_TAG} Adding -initialBurst 1 to publisher side"
616        export pub_string="$pub_string -initialBurst 1"
617    fi
618
619    if [[ "$ASYNC" == "1" ]]; then
620        export pub_string="${pub_string} -asynchronous"
621    fi
622fi
623
624export sub_string="-sub \
625        ${transport_string_sub} \
626        -noPrintIntervals"
627
628if [[ "$role" == "pub" ]]; then
629    echo -e "$INFO_TAG Publisher side running"
630    export commands_string=${pub_string}
631    export extra_arguments="${extra_arguments} ${extra_arguments_pub}"
632else
633    echo -e "$INFO_TAG Subscriber side running"
634    export commands_string=${sub_string}
635    export extra_arguments="${extra_arguments} ${extra_arguments_sub}"
636fi
637
638###############################################################################
639
640if [[ "$dont_change_tuned_settings" != "1" ]]; then
641    echo -e "${INFO_TAG} Executing: /set_${lat_thr}_mode.sh"
642    sudo /set_${lat_thr}_mode.sh
643    sleep 5
644fi
645
646if [[ "$role" == "pub" ]]; then
647    export interface_to_configure=$nic_publisher
648else
649    export interface_to_configure=$nic_subscriber
650fi
651
652echo -e "${INFO_TAG} Resetting network interface to default state"
653# Try to delete any existing netem rules (ignore errors if none exist)
654sudo tc qdisc del dev $interface_to_configure root netem 2>/dev/null || true
655# Reset to default (pfifo_fast)
656sudo tc qdisc del dev $interface_to_configure root 2>/dev/null || true
657
658if [[ "${configure_network}" == "1" ]]; then
659    echo -e "${INFO_TAG} Setting loss rate to ${nic_loss_rate}% and delay to ${nic_delay_ms}ms"
660    sudo tc qdisc add dev $interface_to_configure root netem loss ${nic_loss_rate}% delay ${nic_delay_ms}ms limit 10000000
661fi
662
663cd $folder_base
664echo -e "${INFO_TAG} Folder Base is: $PWD"
665mkdir -p $output_folder
666
667if [[ "${batch_size}" != "" ]]; then
668    if [[ "${lat_thr}" == "thr" ]]; then
669        if [[ "${batch_size}" -eq 0 ]]; then
670            echo -e "${INFO_TAG} Batch size is set to 0"
671            export run_batching_tests="0"
672            export run_no_batching_tests="1"
673        else
674            echo -e "${INFO_TAG} Batch size is set to ${batch_size}"
675            export run_batching_tests="1"
676            export run_no_batching_tests="0"
677        fi
678    else
679        echo -e "${INFO_TAG} Batch size is set to ${batch_size}. This value will be ignored for latency tests."
680        unset batch_size
681    fi
682fi
683
684# Tests that may use batching (when doing throughput tests). Also Latency tests.
685if [[ ${run_batching_tests} == "1" ]]; then
686
687    # UNKEYED
688    if [[ "${skip_unkeyed}" == "" ]]; then
689
690        # RELIABLE
691        if [[ "${skip_rel_tests}" == "" ]]; then
692            # For the time being, we will skip the throughput reliable tests for CERT.
693            # More info in PERF-1175
694            if ! [[ "${cert}" == "1" && "${lat_thr}" == "thr" && "${transport}" == "UDPv4" ]]; then
695                execute_test "unkeyed" "rel" "${datasizes_extended}" "${extra_arguments}" "$file_suffix"
696            else
697                echo -e "${INFO_TAG} Skipping reliable throughput tests for CERT. See PERF-1175 for more information."
698            fi
699        fi
700
701        # BEST EFFORT
702        if [[ "${skip_be_tests}" == "" ]]; then
703            execute_test "unkeyed" "be" "${datasizes}" "${extra_arguments}" "$file_suffix"
704        fi
705    fi
706
707    # KEYED
708    if [[ "${skip_keyed_data}" == "" ]]; then
709
710        # RELIABLE
711        if [[ "${skip_rel_tests}" == "" ]]; then
712            execute_test "keyed" "rel" "${datasizes}" "${extra_arguments}" "$file_suffix"
713        fi
714
715        # BEST EFFORT
716        if [[ "${skip_be_tests}" == "" ]]; then
717            execute_test "keyed" "be" "${datasizes}" "${extra_arguments}" "$file_suffix"
718        fi
719    fi
720
721fi
722
723# Tests that will not use batching
724if [[ "${lat_thr}" == "thr" && "${run_no_batching_tests}" == "1" ]]; then
725
726    if [[ "$role" == "pub" ]]; then
727        export commands_string="${commands_string} -batchSize 0"
728    fi
729
730    # UNKEYED
731    if [[ "${skip_unkeyed}" == "" ]]; then
732
733        # RELIABLE
734        if [[ "${skip_rel_tests}" == "" ]]; then
735            execute_test "unkeyed" "rel" "${datasizes}" "${extra_arguments}" "_noBatch${file_suffix}"
736        fi
737
738        # BEST EFFORT
739        if [[ "${skip_be_tests}" == "" ]]; then
740            execute_test "unkeyed" "be" "${datasizes}" "${extra_arguments}" "_noBatch${file_suffix}"
741        fi
742    fi
743
744    # KEYED
745    if [[ "${skip_keyed_data}" == "" ]]; then
746
747        # RELIABLE
748        if [[ "${skip_rel_tests}" == "" ]]; then
749            execute_test "keyed" "rel" "${datasizes}" "${extra_arguments}" "_noBatch${file_suffix}"
750        fi
751
752        # BEST EFFORT
753        if [[ "${skip_be_tests}" == "" ]]; then
754            execute_test "keyed" "be" "${datasizes}" "${extra_arguments}" "_noBatch${file_suffix}"
755        fi
756    fi
757
758fi
759
760# Replace the cleanup section at the end:
761if [[ "${configure_network}" == "1" ]]; then
762    echo -e "${INFO_TAG} Resetting network interface to default state"
763    sudo tc qdisc del dev $interface_to_configure root netem 2>/dev/null || true
764    sudo tc qdisc del dev $interface_to_configure root 2>/dev/null || true
765fi
 1#!/bin/bash
 2filename=$0
 3script_location=$(cd "$(dirname "$filename")" || exit 255; pwd)
 4
 5export input_params=$@
 6
 7while [ "$1" != "" ]; do
 8    case $1 in
 9        --executable)
10            executable=$2
11            shift
12            ;;
13        *)
14            ;;
15    esac
16    shift
17done
18
19export folder_base="$(dirname "${executable}")"/../../..
20export PATH_TO_GOVERNANCE_FILES_FOLDER=$folder_base/resource/secure
21
22"${script_location}/../base_script/script.sh" $input_params --transport UDPv4 --raw \
23    --skip-no-batching --skip-be --skip-keyed --skip-large-data \
24    --extra-arguments "-rawTransport" \
25    --extra-arguments-pub "-initialBurst 100" \
26    --file-suffix "_raw_transport"
27
28"${script_location}/../base_script/script.sh" $input_params --transport UDPv4 --raw \
29    --skip-no-batching --skip-be --skip-keyed --skip-large-data \
30    --extra-arguments "-rawTransport" \
31    --extra-arguments-pub "-initialBurst 100" \
32    --loss-rate 1 \
33    --file-suffix "_raw_transport_1percent_samples_lost"
34
35"${script_location}/../base_script/script.sh" $input_params --transport UDPv4 --raw \
36    --skip-no-batching --skip-be --skip-keyed --skip-large-data \
37    --extra-arguments "-rawTransport" \
38    --extra-arguments-pub "-initialBurst 100" \
39    --loss-rate 5 \
40    --file-suffix "_raw_transport_5percent_samples_lost"
41
42"${script_location}/../base_script/script.sh" $input_params --transport UDPv4 \
43    --skip-keyed --skip-large-data --best-effort --no-batching
44
45"${script_location}/../base_script/script.sh" $input_params --transport UDPv4 \
46    --skip-keyed --skip-large-data --best-effort --no-batching \
47    --loss-rate 1 \
48    --file-suffix "_1percent_samples_lost"
49
50"${script_location}/../base_script/script.sh" $input_params --transport UDPv4 \
51    --skip-keyed --skip-large-data --best-effort --no-batching \
52    --loss-rate 5 \
53    --file-suffix "_5percent_samples_lost"
54
55"${script_location}/../base_script/script.sh" $input_params --transport UDPv4 \
56    --skip-keyed --skip-large-data --best-effort --no-batching\
57    --file-suffix "_dds_fragmentation"
58
59"${script_location}/../base_script/script.sh" $input_params --transport UDPv4 \
60    --skip-keyed --skip-large-data --best-effort --no-batching \
61    --loss-rate 1 \
62    --file-suffix "_1percent_samples_lost_dds_fragmentation"
63
64"${script_location}/../base_script/script.sh" $input_params --transport UDPv4 \
65    --skip-keyed --skip-large-data --best-effort --no-batching \
66    --loss-rate 5 \
67    --file-suffix "_5percent_samples_lost_dds_fragmentation"

Security Profiles

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 (10Gbps and 1Gbps interfaces)