UDPv4

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 UDPv4.

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

Unkeyed, UDPv4 1Gbps 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 1Gbps 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

20

71

23

23

25

54

71

64

24

0.9

21

77

24

24

26

55

77

128

25

1.0

23

72

25

26

27

57

72

256

28

1.0

25

80

28

28

30

59

80

512

32

2.0

30

86

32

33

39

63

86

1024

50

1.9

42

96

51

52

53

79

96

2048

81

17.0

55

204

90

91

137

201

204

4096

251

1.5

183

281

251

252

253

279

281

8192

254

1.3

182

290

254

255

256

283

290

16384

261

1.4

232

376

261

262

264

307

376

32768

440

2.4

394

509

440

441

447

471

509

63000

666

2.8

654

740

666

667

674

733

740

  • 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

24

1.3

21

72

23

25

27

56

72

64

25

1.3

22

79

25

26

28

58

79

128

26

1.1

24

83

26

27

29

58

83

256

29

1.2

26

84

28

30

32

61

84

512

34

2.9

31

88

33

38

43

66

88

1024

56

12.6

42

183

51

91

93

97

183

2048

83

18.7

56

250

90

94

155

202

250

4096

229

44.1

78

282

252

253

254

280

282

8192

255

9.4

147

289

255

257

269

284

289

16384

264

10.9

193

427

262

269

319

355

427

32768

431

23.8

330

495

441

448

472

485

495

63000

669

11.9

614

760

667

680

720

759

760

100000

1005

9.7

941

1109

1006

1019

1029

1109

1109

500000

4356

17.2

4321

4652

4364

4371

4391

4652

4652

1048576

8918

32.2

8900

9602

8905

8958

8961

9602

9602

1548576

13210

37.3

13164

14137

13207

13210

13219

14137

14137

4194304

35700

146.7

35673

37891

35686

35703

35736

37891

37891

10485760

90209

531.4

90127

95402

90140

90159

92180

95402

95402


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=172.16.1.1
11export pub_string="-pub \
12        -transport UDPv4 \
13        -nic $nic \
14        -noPrint \
15        -noOutputHeaders \
16        -exec $exec_time \
17        -noXML\
18        -latencyTest"
19
20mkdir -p $output_folder
21
22echo ">> UNKEYED BE"
23export my_file=$output_folder/lat_udpv4_pub_unkeyed_be.csv
24touch $my_file
25for DATALEN in 32 64 128 256 512 1024 8192 63000; do
26    export command="taskset -c 0 \
27    $executable -best -datalen $DATALEN $pub_string"
28    echo $command
29    $command >> $my_file;
30    sleep 3;
31done
32sleep 5;
33
34echo ">> UNKEYED REL"
35export my_file=$output_folder/lat_udpv4_pub_unkeyed_rel.csv
36touch $my_file
37for DATALEN in 32 64 128 256 512 1024 8192 63000 100000 500000 1048576 1548576 4194304 10485760; do
38    export command="taskset -c 0 \
39    $executable -datalen $DATALEN $pub_string"
40    echo $command
41    $command >> $my_file;
42    sleep 3;
43done
44sleep 5;
45
46echo ">> KEYED BE"
47export my_file=$output_folder/lat_udpv4_pub_keyed_be.csv
48touch $my_file
49for DATALEN in 32 64 128 256 512 1024 8192 63000; do
50    export command="taskset -c 0 \
51    $executable -best -keyed -instances 100000 -datalen $DATALEN $pub_string"
52    echo $command
53    $command >> $my_file;
54    sleep 3;
55done
56sleep 5;
57
58echo ">> KEYED REL"
59export my_file=$output_folder/lat_udpv4_pub_keyed_rel.csv
60touch $my_file
61for DATALEN in 32 64 128 256 512 1024 8192 63000; do
62    export command="taskset -c 0 \
63    $executable -keyed -instances 100000 -datalen $DATALEN $pub_string"
64    echo $command
65    $command >> $my_file;
66    sleep 3;
67done

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=172.16.1.2
10export sub_string="-sub \
11        -transport UDPv4 \
12        -nic $nic \
13        -noPrint \
14        -noOutputHeaders \
15        -noXML"
16
17mkdir -p $output_folder
18
19echo ">> UNKEYED BE"
20export my_file=$output_folder/lat_udpv4_sub_unkeyed_be.csv
21touch $my_file
22for DATALEN in 32 64 128 256 512 1024 8192 63000; do
23    export command="taskset -c 0 \
24    $executable -best $sub_string -datalen $DATALEN"
25    echo $command
26    $command >> $my_file;
27    sleep 10;
28done
29sleep 5;
30
31echo ">> UNKEYED REL"
32export my_file=$output_folder/lat_udpv4_sub_unkeyed_rel.csv
33touch $my_file
34for DATALEN in 32 64 128 256 512 1024 8192 63000 100000 500000 1048576 1548576 4194304 10485760; do
35    export command="taskset -c 0 \
36    $executable $sub_string -datalen $DATALEN"
37    echo $command
38    $command >> $my_file;
39    sleep 10;
40done
41sleep 5;
42
43echo ">> KEYED BE"
44export my_file=$output_folder/lat_udpv4_sub_keyed_be.csv
45touch $my_file
46for DATALEN in 32 64 128 256 512 1024 8192 63000; do
47    export command="taskset -c 0 \
48    $executable -best -keyed -instances 100000 $sub_string -datalen $DATALEN"
49    echo $command
50    $command >> $my_file;
51    sleep 10;
52done
53sleep 5;
54
55echo ">> KEYED REL"
56export my_file=$output_folder/lat_udpv4_sub_keyed_rel.csv
57touch $my_file
58for DATALEN in 32 64 128 256 512 1024 8192 63000; do
59    export command="taskset -c 0 \
60    $executable -keyed -instances 100000 $sub_string -datalen $DATALEN"
61    echo $command
62    $command >> $my_file;
63    sleep 10;
64done

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

Unkeyed, UDPv4 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)

Ave (μs)

Std (μs)

Min (μs)

Max (μs)

50% (μs)

90% (μs)

99% (μs)

99.99% (μs)

99.9999% (μs)

32

19

1.0

18

66

19

19

20

48

66

64

19

0.9

18

76

19

19

22

48

76

128

19

0.9

18

71

19

19

22

49

71

256

20

1.0

19

79

20

20

22

49

79

512

20

1.0

20

71

20

21

23

50

71

1024

22

1.0

21

66

22

22

27

51

66

2048

25

1.2

24

77

25

25

31

54

77

4096

31

1.2

30

94

30

31

34

60

94

8192

44

0.9

43

95

44

44

45

72

95

16384

55

1.1

54

142

55

55

57

84

142

32768

73

1.3

71

117

72

73

78

101

117

63000

108

1.5

106

160

108

109

115

139

160

  • 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

20

1.1

19

86

20

20

24

50

86

64

20

1.1

19

69

20

21

24

50

69

128

21

1.2

20

70

20

21

25

50

70

256

21

1.1

20

74

21

21

25

51

74

512

22

1.1

21

75

22

22

26

52

75

1024

23

1.1

22

73

23

24

28

53

73

2048

26

1.1

25

78

26

26

30

56

78

4096

33

1.1

31

87

33

33

37

65

87

8192

46

1.2

44

110

45

46

51

74

110

16384

56

1.4

55

108

56

57

63

86

108

32768

74

1.4

73

129

74

75

81

106

129

63000

110

1.9

108

152

109

111

117

144

152

100000

151

4.3

148

277

150

155

166

201

277

500000

558

30.1

505

849

571

577

612

685

849

1048576

1091

69.8

996

1730

1018

1151

1167

1730

1730

1548576

1639

52.5

1445

2401

1653

1665

1681

2401

2401

4194304

4114

52.6

4072

6263

4117

4127

4145

6263

6263

10485760

11310

195.4

11269

16703

11300

11320

11343

16703

16703


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=172.16.0.1
11export pub_string="-pub \
12        -transport UDPv4 \
13        -nic $nic \
14        -noPrint \
15        -noOutputHeaders \
16        -exec $exec_time \
17        -noXML\
18        -latencyTest"
19
20mkdir -p $output_folder
21
22echo ">> UNKEYED BE"
23export my_file=$output_folder/lat_udpv4_pub_unkeyed_be.csv
24touch $my_file
25for DATALEN in 32 64 128 256 512 1024 8192 63000; do
26    export command="taskset -c 0 \
27    $executable -best -datalen $DATALEN $pub_string"
28    echo $command
29    $command >> $my_file;
30    sleep 3;
31done
32sleep 5;
33
34echo ">> UNKEYED REL"
35export my_file=$output_folder/lat_udpv4_pub_unkeyed_rel.csv
36touch $my_file
37for DATALEN in 32 64 128 256 512 1024 8192 63000 100000 500000 1048576 1548576 4194304 10485760; do
38    export command="taskset -c 0 \
39    $executable -datalen $DATALEN $pub_string"
40    echo $command
41    $command >> $my_file;
42    sleep 3;
43done
44sleep 5;
45
46echo ">> KEYED BE"
47export my_file=$output_folder/lat_udpv4_pub_keyed_be.csv
48touch $my_file
49for DATALEN in 32 64 128 256 512 1024 8192 63000; do
50    export command="taskset -c 0 \
51    $executable -best -keyed -instances 100000 -datalen $DATALEN $pub_string"
52    echo $command
53    $command >> $my_file;
54    sleep 3;
55done
56sleep 5;
57
58echo ">> KEYED REL"
59export my_file=$output_folder/lat_udpv4_pub_keyed_rel.csv
60touch $my_file
61for DATALEN in 32 64 128 256 512 1024 8192 63000; do
62    export command="taskset -c 0 \
63    $executable -keyed -instances 100000 -datalen $DATALEN $pub_string"
64    echo $command
65    $command >> $my_file;
66    sleep 3;
67done

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=172.16.0.2
10export sub_string="-sub \
11        -transport UDPv4 \
12        -nic $nic \
13        -noPrint \
14        -noOutputHeaders \
15        -noXML"
16
17mkdir -p $output_folder
18
19echo ">> UNKEYED BE"
20export my_file=$output_folder/lat_udpv4_sub_unkeyed_be.csv
21touch $my_file
22for DATALEN in 32 64 128 256 512 1024 8192 63000; do
23    export command="taskset -c 0 \
24    $executable -best $sub_string -datalen $DATALEN"
25    echo $command
26    $command >> $my_file;
27    sleep 10;
28done
29sleep 5;
30
31echo ">> UNKEYED REL"
32export my_file=$output_folder/lat_udpv4_sub_unkeyed_rel.csv
33touch $my_file
34for DATALEN in 32 64 128 256 512 1024 8192 63000 100000 500000 1048576 1548576 4194304 10485760; do
35    export command="taskset -c 0 \
36    $executable $sub_string -datalen $DATALEN"
37    echo $command
38    $command >> $my_file;
39    sleep 10;
40done
41sleep 5;
42
43echo ">> KEYED BE"
44export my_file=$output_folder/lat_udpv4_sub_keyed_be.csv
45touch $my_file
46for DATALEN in 32 64 128 256 512 1024 8192 63000; do
47    export command="taskset -c 0 \
48    $executable -best -keyed -instances 100000 $sub_string -datalen $DATALEN"
49    echo $command
50    $command >> $my_file;
51    sleep 10;
52done
53sleep 5;
54
55echo ">> KEYED REL"
56export my_file=$output_folder/lat_udpv4_sub_keyed_rel.csv
57touch $my_file
58for DATALEN in 32 64 128 256 512 1024 8192 63000; do
59    export command="taskset -c 0 \
60    $executable -keyed -instances 100000 $sub_string -datalen $DATALEN"
61    echo $command
62    $command >> $my_file;
63    sleep 10;
64done

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 1Gbps 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 1Gbps 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

25

1.2

24

212

25

26

29

58

212

64

26

1.3

25

216

26

27

30

59

216

128

27

1.3

26

217

27

28

31

60

217

256

30

1.4

28

219

30

30

37

62

219

512

39

1.4

33

231

39

40

43

70

231

1024

53

1.5

45

242

53

54

56

96

242

2048

85

20.1

57

282

91

107

157

205

282

4096

255

2.0

112

445

254

256

257

283

445

8192

258

1.8

184

448

257

258

260

300

448

16384

264

1.7

242

453

264

265

268

301

453

32768

444

2.7

402

625

444

445

451

471

625

63000

670

3.2

650

853

670

672

678

777

853

  • 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

27

1.8

25

232

27

29

34

61

232

64

28

1.5

26

214

27

29

33

61

214

128

29

1.5

27

215

28

29

35

62

215

256

31

2.0

29

216

31

32

39

65

216

512

41

2.1

35

230

41

42

54

72

230

1024

60

12.9

46

242

55

94

95

103

242

2048

87

20.5

60

276

91

109

159

206

276

4096

243

32.2

81

307

255

257

259

285

307

8192

257

13.7

138

309

259

262

270

293

309

16384

267

11.2

194

362

266

273

314

361

362

32768

433

25.0

333

499

444

452

472

497

499

63000

674

16.1

605

784

671

689

750

780

784


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=172.16.1.1
11export pub_string="-pub \
12        -transport UDPv4 \
13        -nic $nic \
14        -noPrint \
15        -noOutputHeaders \
16        -exec $exec_time \
17        -noXML\
18        -latencyTest"
19
20mkdir -p $output_folder
21
22echo ">> UNKEYED BE"
23export my_file=$output_folder/lat_udpv4_pub_unkeyed_be.csv
24touch $my_file
25for DATALEN in 32 64 128 256 512 1024 8192 63000; do
26    export command="taskset -c 0 \
27    $executable -best -datalen $DATALEN $pub_string"
28    echo $command
29    $command >> $my_file;
30    sleep 3;
31done
32sleep 5;
33
34echo ">> UNKEYED REL"
35export my_file=$output_folder/lat_udpv4_pub_unkeyed_rel.csv
36touch $my_file
37for DATALEN in 32 64 128 256 512 1024 8192 63000 100000 500000 1048576 1548576 4194304 10485760; do
38    export command="taskset -c 0 \
39    $executable -datalen $DATALEN $pub_string"
40    echo $command
41    $command >> $my_file;
42    sleep 3;
43done
44sleep 5;
45
46echo ">> KEYED BE"
47export my_file=$output_folder/lat_udpv4_pub_keyed_be.csv
48touch $my_file
49for DATALEN in 32 64 128 256 512 1024 8192 63000; do
50    export command="taskset -c 0 \
51    $executable -best -keyed -instances 100000 -datalen $DATALEN $pub_string"
52    echo $command
53    $command >> $my_file;
54    sleep 3;
55done
56sleep 5;
57
58echo ">> KEYED REL"
59export my_file=$output_folder/lat_udpv4_pub_keyed_rel.csv
60touch $my_file
61for DATALEN in 32 64 128 256 512 1024 8192 63000; do
62    export command="taskset -c 0 \
63    $executable -keyed -instances 100000 -datalen $DATALEN $pub_string"
64    echo $command
65    $command >> $my_file;
66    sleep 3;
67done

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=172.16.1.2
10export sub_string="-sub \
11        -transport UDPv4 \
12        -nic $nic \
13        -noPrint \
14        -noOutputHeaders \
15        -noXML"
16
17mkdir -p $output_folder
18
19echo ">> UNKEYED BE"
20export my_file=$output_folder/lat_udpv4_sub_unkeyed_be.csv
21touch $my_file
22for DATALEN in 32 64 128 256 512 1024 8192 63000; do
23    export command="taskset -c 0 \
24    $executable -best $sub_string -datalen $DATALEN"
25    echo $command
26    $command >> $my_file;
27    sleep 10;
28done
29sleep 5;
30
31echo ">> UNKEYED REL"
32export my_file=$output_folder/lat_udpv4_sub_unkeyed_rel.csv
33touch $my_file
34for DATALEN in 32 64 128 256 512 1024 8192 63000 100000 500000 1048576 1548576 4194304 10485760; do
35    export command="taskset -c 0 \
36    $executable $sub_string -datalen $DATALEN"
37    echo $command
38    $command >> $my_file;
39    sleep 10;
40done
41sleep 5;
42
43echo ">> KEYED BE"
44export my_file=$output_folder/lat_udpv4_sub_keyed_be.csv
45touch $my_file
46for DATALEN in 32 64 128 256 512 1024 8192 63000; do
47    export command="taskset -c 0 \
48    $executable -best -keyed -instances 100000 $sub_string -datalen $DATALEN"
49    echo $command
50    $command >> $my_file;
51    sleep 10;
52done
53sleep 5;
54
55echo ">> KEYED REL"
56export my_file=$output_folder/lat_udpv4_sub_keyed_rel.csv
57touch $my_file
58for DATALEN in 32 64 128 256 512 1024 8192 63000; do
59    export command="taskset -c 0 \
60    $executable -keyed -instances 100000 $sub_string -datalen $DATALEN"
61    echo $command
62    $command >> $my_file;
63    sleep 10;
64done

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 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)

Ave (μs)

Std (μs)

Min (μs)

Max (μs)

50% (μs)

90% (μs)

99% (μs)

99.99% (μs)

99.9999% (μs)

32

22

1.3

20

208

21

22

28

51

208

64

22

1.4

21

245

22

22

28

52

245

128

22

1.3

21

207

22

23

29

52

207

256

23

1.3

21

216

22

23

29

52

216

512

23

1.3

22

208

23

24

30

53

208

1024

25

1.4

24

210

25

26

31

55

210

2048

28

1.4

26

216

27

28

34

58

216

4096

35

1.3

33

226

34

35

38

64

226

8192

47

1.3

46

238

47

48

51

76

238

16384

58

1.6

56

245

58

59

65

88

245

32768

76

1.9

74

273

76

77

83

109

273

63000

112

1.9

110

305

111

113

119

148

305

  • 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

23

1.4

22

206

23

24

30

53

206

64

23

1.4

22

210

23

24

30

53

210

128

23

1.4

22

215

23

24

30

54

215

256

24

1.4

23

211

24

25

31

54

211

512

25

1.5

23

212

24

25

31

55

212

1024

26

1.4

25

212

26

27

33

56

212

2048

29

1.5

27

212

29

30

36

59

212

4096

36

1.3

34

243

36

37

41

66

243

8192

49

1.3

47

238

48

49

52

78

238

16384

59

1.4

57

249

59

60

65

88

249

32768

78

1.8

75

272

77

78

85

110

272

63000

114

2.4

110

208

113

116

122

151

208


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=172.16.0.1
11export pub_string="-pub \
12        -transport UDPv4 \
13        -nic $nic \
14        -noPrint \
15        -noOutputHeaders \
16        -exec $exec_time \
17        -noXML\
18        -latencyTest"
19
20mkdir -p $output_folder
21
22echo ">> UNKEYED BE"
23export my_file=$output_folder/lat_udpv4_pub_unkeyed_be.csv
24touch $my_file
25for DATALEN in 32 64 128 256 512 1024 8192 63000; do
26    export command="taskset -c 0 \
27    $executable -best -datalen $DATALEN $pub_string"
28    echo $command
29    $command >> $my_file;
30    sleep 3;
31done
32sleep 5;
33
34echo ">> UNKEYED REL"
35export my_file=$output_folder/lat_udpv4_pub_unkeyed_rel.csv
36touch $my_file
37for DATALEN in 32 64 128 256 512 1024 8192 63000 100000 500000 1048576 1548576 4194304 10485760; do
38    export command="taskset -c 0 \
39    $executable -datalen $DATALEN $pub_string"
40    echo $command
41    $command >> $my_file;
42    sleep 3;
43done
44sleep 5;
45
46echo ">> KEYED BE"
47export my_file=$output_folder/lat_udpv4_pub_keyed_be.csv
48touch $my_file
49for DATALEN in 32 64 128 256 512 1024 8192 63000; do
50    export command="taskset -c 0 \
51    $executable -best -keyed -instances 100000 -datalen $DATALEN $pub_string"
52    echo $command
53    $command >> $my_file;
54    sleep 3;
55done
56sleep 5;
57
58echo ">> KEYED REL"
59export my_file=$output_folder/lat_udpv4_pub_keyed_rel.csv
60touch $my_file
61for DATALEN in 32 64 128 256 512 1024 8192 63000; do
62    export command="taskset -c 0 \
63    $executable -keyed -instances 100000 -datalen $DATALEN $pub_string"
64    echo $command
65    $command >> $my_file;
66    sleep 3;
67done

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=172.16.0.2
10export sub_string="-sub \
11        -transport UDPv4 \
12        -nic $nic \
13        -noPrint \
14        -noOutputHeaders \
15        -noXML"
16
17mkdir -p $output_folder
18
19echo ">> UNKEYED BE"
20export my_file=$output_folder/lat_udpv4_sub_unkeyed_be.csv
21touch $my_file
22for DATALEN in 32 64 128 256 512 1024 8192 63000; do
23    export command="taskset -c 0 \
24    $executable -best $sub_string -datalen $DATALEN"
25    echo $command
26    $command >> $my_file;
27    sleep 10;
28done
29sleep 5;
30
31echo ">> UNKEYED REL"
32export my_file=$output_folder/lat_udpv4_sub_unkeyed_rel.csv
33touch $my_file
34for DATALEN in 32 64 128 256 512 1024 8192 63000 100000 500000 1048576 1548576 4194304 10485760; do
35    export command="taskset -c 0 \
36    $executable $sub_string -datalen $DATALEN"
37    echo $command
38    $command >> $my_file;
39    sleep 10;
40done
41sleep 5;
42
43echo ">> KEYED BE"
44export my_file=$output_folder/lat_udpv4_sub_keyed_be.csv
45touch $my_file
46for DATALEN in 32 64 128 256 512 1024 8192 63000; do
47    export command="taskset -c 0 \
48    $executable -best -keyed -instances 100000 $sub_string -datalen $DATALEN"
49    echo $command
50    $command >> $my_file;
51    sleep 10;
52done
53sleep 5;
54
55echo ">> KEYED REL"
56export my_file=$output_folder/lat_udpv4_sub_keyed_rel.csv
57touch $my_file
58for DATALEN in 32 64 128 256 512 1024 8192 63000; do
59    export command="taskset -c 0 \
60    $executable -keyed -instances 100000 $sub_string -datalen $DATALEN"
61    echo $command
62    $command >> $my_file;
63    sleep 10;
64done

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