UDPv4_WAN

The following tests have been performed by executing an RTI Perftest C++98 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 Real-Time WAN Transport (UDPv4_WAN).

Note

Even though we are using the Real-Time WAN Transport, this testing has been performed on a LAN to be able to compare the results with the built-in UDPv4 transport. The differences are negligible as shown in the graphs below. Find more information and tests in the RTI Real-Time WAN Transport section.

Find information about the hardware, network, and command-line parameters after each of the tests.

Unkeyed, UDPv4_WAN 10Gbps Network, C++98

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)

Avg (μs)

Std (μs)

Min (μs)

Max (μs)

50% (μs)

90% (μs)

99% (μs)

99.99% (μs)

99.9999% (μs)

32

20

0.7

20

59

20

21

22

29

59

64

21

0.7

20

172

21

21

22

34

172

128

21

0.6

20

75

21

21

22

32

75

256

22

0.6

21

79

21

22

23

34

79

512

23

0.7

21

71

22

23

24

34

71

1024

24

0.7

23

93

23

24

25

35

93

2048

27

0.7

26

64

26

27

28

41

64

4096

32

0.7

31

69

32

33

34

46

69

8192

44

0.8

43

108

44

44

46

59

108

16384

55

0.8

53

121

55

55

57

77

121

32768

73

0.9

71

135

73

73

76

95

135

63000

108

1.0

106

150

108

108

113

132

150

  • Reliable

Sample Size (Bytes)

Avg (μs)

Std (μs)

Min (μs)

Max (μs)

50% (μs)

90% (μs)

99% (μs)

99.99% (μs)

99.9999% (μs)

32

22

0.7

21

79

21

23

25

39

79

64

22

0.8

21

81

21

23

26

39

81

128

22

0.7

21

61

21

23

26

39

61

256

23

0.8

22

178

22

24

27

42

178

512

24

0.7

23

86

24

24

27

42

86

1024

25

0.8

24

91

25

26

29

39

91

2048

28

0.7

27

67

28

29

31

45

67

4096

34

0.8

33

203

32

34

37

55

203

8192

45

0.8

44

84

43

46

49

60

84

16384

56

0.8

55

95

53

57

59

75

95

32768

74

0.9

73

115

74

75

78

94

115

63000

109

1.2

107

168

109

110

114

132

168

100000

151

3.8

147

251

150

152

166

189

251

500000

575

165.3

505

9633

575

580

646

9470

9633

1048576

1097

75.2

995

1643

1042

1155

1278

1643

1643

1548576

1654

46.3

1446

2364

1660

1673

1730

2364

2364

4194304

4093

54.7

4046

6342

4097

4107

4120

6342

6342

10485760

11722

740.3

11338

16775

11433

13113

14059

16775

16775


Perftest Scripts

To produce these tests, we executed RTI Perftest for C++98. The exact commands used can be found here:

Publisher Side

 1sudo /set_lat_mode.sh
 2
 3echo EXECUTABLE IS $1
 4export executable=$1
 5
 6echo OUTPUT PATH IS $2
 7export output_folder=$2
 8
 9export exec_time=30
10export nic_local=172.16.0.1
11export nic_public=172.16.0.1
12export pub_string="-pub \
13        -transport UDPv4_WAN \
14        -transportPublicAddress $nic_public:7400 \
15        -nic $nic_local
16        -noPrint \
17        -noOutputHeaders \
18        -exec $exec_time \
19        -noXML\
20        -latencyTest"
21
22mkdir -p $output_folder
23
24echo ">> UNKEYED BE"
25export my_file=$output_folder/lat_rwt_pub_unkeyed_be.csv
26touch $my_file
27for DATALEN in 32 64 128 256 512 1024 8192 63000; do
28    export command="taskset -c 0 \
29    $executable -best -datalen $DATALEN $pub_string"
30    echo $command
31    $command >> $my_file;
32    sleep 3;
33done
34sleep 5;
35
36echo ">> UNKEYED REL"
37export my_file=$output_folder/lat_rwt_pub_unkeyed_rel.csv
38touch $my_file
39for DATALEN in 32 64 128 256 512 1024 8192 63000 100000 500000 1048576 1548576 4194304 10485760; do
40    export command="taskset -c 0 \
41    $executable -datalen $DATALEN $pub_string"
42    echo $command
43    $command >> $my_file;
44    sleep 3;
45done
46sleep 5;
47
48echo ">> KEYED BE"
49export my_file=$output_folder/lat_rwt_pub_keyed_be.csv
50touch $my_file
51for DATALEN in 32 64 128 256 512 1024 8192 63000; do
52    export command="taskset -c 0 \
53    $executable -best -keyed -instances 100000 -datalen $DATALEN $pub_string"
54    echo $command
55    $command >> $my_file;
56    sleep 3;
57done
58sleep 5;
59
60echo ">> KEYED REL"
61export my_file=$output_folder/lat_rwt_pub_keyed_rel.csv
62touch $my_file
63for DATALEN in 32 64 128 256 512 1024 8192 63000; do
64    export command="taskset -c 0 \
65    $executable -keyed -instances 100000 -datalen $DATALEN $pub_string"
66    echo $command
67    $command >> $my_file;
68    sleep 3;
69done

Subscriber Side

 1sudo /set_lat_mode.sh
 2
 3echo EXECUTABLE IS $1
 4export executable=$1
 5
 6echo OUTPUT PATH IS $2
 7export output_folder=$2
 8
 9export nic_local=172.16.0.2
10export nic_public=172.16.0.1
11export sub_string="-sub \
12        -transport UDPv4_WAN \
13        -peer 0@udpv4_wan://$nic_public:7400 \
14        -nic $nic_local
15        -noPrint \
16        -noOutputHeaders \
17        -noXML"
18
19mkdir -p $output_folder
20
21echo ">> UNKEYED BE"
22export my_file=$output_folder/lat_rwt_sub_unkeyed_be.csv
23touch $my_file
24for DATALEN in 32 64 128 256 512 1024 8192 63000; do
25    export command="taskset -c 0 \
26    $executable -best $sub_string -datalen $DATALEN"
27    echo $command
28    $command >> $my_file;
29    sleep 10;
30done
31sleep 5;
32
33echo ">> UNKEYED REL"
34export my_file=$output_folder/lat_rwt_sub_unkeyed_rel.csv
35touch $my_file
36for DATALEN in 32 64 128 256 512 1024 8192 63000 100000 500000 1048576 1548576 4194304 10485760; do
37    export command="taskset -c 0 \
38    $executable $sub_string -datalen $DATALEN"
39    echo $command
40    $command >> $my_file;
41    sleep 10;
42done
43sleep 5;
44
45echo ">> KEYED BE"
46export my_file=$output_folder/lat_rwt_sub_keyed_be.csv
47touch $my_file
48for DATALEN in 32 64 128 256 512 1024 8192 63000; do
49    export command="taskset -c 0 \
50    $executable -best -keyed -instances 100000 $sub_string -datalen $DATALEN"
51    echo $command
52    $command >> $my_file;
53    sleep 10;
54done
55sleep 5;
56
57echo ">> KEYED REL"
58export my_file=$output_folder/lat_rwt_sub_keyed_rel.csv
59touch $my_file
60for DATALEN in 32 64 128 256 512 1024 8192 63000; do
61    export command="taskset -c 0 \
62    $executable -keyed -instances 100000 $sub_string -datalen $DATALEN"
63    echo $command
64    $command >> $my_file;
65    sleep 10;
66done

Test Hardware

The following hardware was used to perform these tests:

Linux Nodes

Processor: Intel® Xeon® E-2186G 3.8GHz, 12M cache, 6C/12T, turbo (95W)
RAM: 16GB 2666MT/s DDR4 ECC UDIMM
NIC 1: Intel X550 Dual Port 10GbE BASE-T Adapter, PCIe Full Height
NIC 2: Intel Ethernet I350 Dual Port 1GbE BASE-T Adapter, PCIe Low Profile
OS: Ubuntu 18.04 -- gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0

Switch

Dell Networking S4048T-ON, 48x 10GBASE-T and 6x 40GbE QSFP+ ports, IO to PSU air, 2x AC PSU, OS9

Keyed, UDPv4_WAN 10Gbps Network, C++98

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)

Avg (μs)

Std (μs)

Min (μs)

Max (μs)

50% (μs)

90% (μs)

99% (μs)

99.99% (μs)

99.9999% (μs)

32

23

0.9

22

206

23

24

26

41

206

64

23

0.9

22

221

23

24

26

46

221

128

24

1.0

22

220

23

24

26

44

220

256

24

1.0

23

224

24

25

27

44

224

512

25

0.9

24

208

25

26

27

46

208

1024

27

1.0

26

217

26

28

29

51

217

2048

29

0.9

28

217

29

30

31

51

217

4096

35

1.1

34

222

35

36

38

62

222

8192

47

1.1

45

235

46

47

49

74

235

16384

58

1.2

56

245

57

58

60

88

245

32768

76

1.4

74

264

76

77

80

106

264

63000

111

1.2

109

202

111

112

115

137

202

  • Reliable

Sample Size (Bytes)

Avg (μs)

Std (μs)

Min (μs)

Max (μs)

50% (μs)

90% (μs)

99% (μs)

99.99% (μs)

99.9999% (μs)

32

25

1.0

23

208

24

25

28

47

208

64

25

0.9

24

230

24

26

28

46

230

128

25

1.0

24

212

25

26

29

47

212

256

26

1.0

24

208

25

26

29

47

208

512

26

1.0

25

218

26

27

30

50

218

1024

28

0.9

27

215

28

29

32

52

215

2048

31

1.0

30

214

31

31

34

54

214

4096

37

1.0

35

223

37

38

40

57

223

8192

48

1.1

46

234

48

49

51

75

234

16384

59

1.1

57

248

59

60

62

83

248

32768

77

1.2

75

262

77

78

82

110

262

63000

113

1.4

111

206

112

114

119

147

206


Perftest Scripts

To produce these tests, we executed RTI Perftest for C++98. The exact commands used can be found here:

Publisher Side

 1sudo /set_lat_mode.sh
 2
 3echo EXECUTABLE IS $1
 4export executable=$1
 5
 6echo OUTPUT PATH IS $2
 7export output_folder=$2
 8
 9export exec_time=30
10export nic_local=172.16.0.1
11export nic_public=172.16.0.1
12export pub_string="-pub \
13        -transport UDPv4_WAN \
14        -transportPublicAddress $nic_public:7400 \
15        -nic $nic_local
16        -noPrint \
17        -noOutputHeaders \
18        -exec $exec_time \
19        -noXML\
20        -latencyTest"
21
22mkdir -p $output_folder
23
24echo ">> UNKEYED BE"
25export my_file=$output_folder/lat_rwt_pub_unkeyed_be.csv
26touch $my_file
27for DATALEN in 32 64 128 256 512 1024 8192 63000; do
28    export command="taskset -c 0 \
29    $executable -best -datalen $DATALEN $pub_string"
30    echo $command
31    $command >> $my_file;
32    sleep 3;
33done
34sleep 5;
35
36echo ">> UNKEYED REL"
37export my_file=$output_folder/lat_rwt_pub_unkeyed_rel.csv
38touch $my_file
39for DATALEN in 32 64 128 256 512 1024 8192 63000 100000 500000 1048576 1548576 4194304 10485760; do
40    export command="taskset -c 0 \
41    $executable -datalen $DATALEN $pub_string"
42    echo $command
43    $command >> $my_file;
44    sleep 3;
45done
46sleep 5;
47
48echo ">> KEYED BE"
49export my_file=$output_folder/lat_rwt_pub_keyed_be.csv
50touch $my_file
51for DATALEN in 32 64 128 256 512 1024 8192 63000; do
52    export command="taskset -c 0 \
53    $executable -best -keyed -instances 100000 -datalen $DATALEN $pub_string"
54    echo $command
55    $command >> $my_file;
56    sleep 3;
57done
58sleep 5;
59
60echo ">> KEYED REL"
61export my_file=$output_folder/lat_rwt_pub_keyed_rel.csv
62touch $my_file
63for DATALEN in 32 64 128 256 512 1024 8192 63000; do
64    export command="taskset -c 0 \
65    $executable -keyed -instances 100000 -datalen $DATALEN $pub_string"
66    echo $command
67    $command >> $my_file;
68    sleep 3;
69done

Subscriber Side

 1sudo /set_lat_mode.sh
 2
 3echo EXECUTABLE IS $1
 4export executable=$1
 5
 6echo OUTPUT PATH IS $2
 7export output_folder=$2
 8
 9export nic_local=172.16.0.2
10export nic_public=172.16.0.1
11export sub_string="-sub \
12        -transport UDPv4_WAN \
13        -peer 0@udpv4_wan://$nic_public:7400 \
14        -nic $nic_local
15        -noPrint \
16        -noOutputHeaders \
17        -noXML"
18
19mkdir -p $output_folder
20
21echo ">> UNKEYED BE"
22export my_file=$output_folder/lat_rwt_sub_unkeyed_be.csv
23touch $my_file
24for DATALEN in 32 64 128 256 512 1024 8192 63000; do
25    export command="taskset -c 0 \
26    $executable -best $sub_string -datalen $DATALEN"
27    echo $command
28    $command >> $my_file;
29    sleep 10;
30done
31sleep 5;
32
33echo ">> UNKEYED REL"
34export my_file=$output_folder/lat_rwt_sub_unkeyed_rel.csv
35touch $my_file
36for DATALEN in 32 64 128 256 512 1024 8192 63000 100000 500000 1048576 1548576 4194304 10485760; do
37    export command="taskset -c 0 \
38    $executable $sub_string -datalen $DATALEN"
39    echo $command
40    $command >> $my_file;
41    sleep 10;
42done
43sleep 5;
44
45echo ">> KEYED BE"
46export my_file=$output_folder/lat_rwt_sub_keyed_be.csv
47touch $my_file
48for DATALEN in 32 64 128 256 512 1024 8192 63000; do
49    export command="taskset -c 0 \
50    $executable -best -keyed -instances 100000 $sub_string -datalen $DATALEN"
51    echo $command
52    $command >> $my_file;
53    sleep 10;
54done
55sleep 5;
56
57echo ">> KEYED REL"
58export my_file=$output_folder/lat_rwt_sub_keyed_rel.csv
59touch $my_file
60for DATALEN in 32 64 128 256 512 1024 8192 63000; do
61    export command="taskset -c 0 \
62    $executable -keyed -instances 100000 $sub_string -datalen $DATALEN"
63    echo $command
64    $command >> $my_file;
65    sleep 10;
66done

Test Hardware

The following hardware was used to perform these tests:

Linux Nodes

Processor: Intel® Xeon® E-2186G 3.8GHz, 12M cache, 6C/12T, turbo (95W)
RAM: 16GB 2666MT/s DDR4 ECC UDIMM
NIC 1: Intel X550 Dual Port 10GbE BASE-T Adapter, PCIe Full Height
NIC 2: Intel Ethernet I350 Dual Port 1GbE BASE-T Adapter, PCIe Low Profile
OS: Ubuntu 18.04 -- gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0

Switch

Dell Networking S4048T-ON, 48x 10GBASE-T and 6x 40GbE QSFP+ ports, IO to PSU air, 2x AC PSU, OS9