10. Compatibility

RTI Perftest 4.1.1 is designed to be compatible with the RTI Connext DDS middleware. It has been compiled and tested against:

  • RTI Connext DDS Professional 6.0.0 and above. Nonetheless previous versions starting after 5.2.X should be compatible with certain exceptions.

  • RTI Connext DDS Micro 3.0.0 and above versions. Versions for 2.4.11 and above should also be compatible by adding the --micro-24x-compatibility command-line option.

  • RTI Connext TSS 3.1.2 over RTI Connext Pro 6.1.1.4, or over RTI Connext Micro 2.4.13.4. The only supported FACE profile is GeneralPurpose.

10.1. Using Security

Governance and Permission files have been updated to be compatible with the latest release for RTI Connext DDS, and are compatible with RTI Connext DDS Professional 5.2.7 and greater.

If you are compiling RTI Perftest against 5.2.5, you will need to get the certificates from the release/2.0 branch. You can do that by using the following git command from the top-level directory of your repository:

git checkout release/2.0 -- resource/secure

10.2. RTI Connext DDS 6.0.1 Security Plugins Changes

In order to add compatibility for RTI Connext DDS 6.0.1 including the Security Plugins on Windows, a change that breaks compatibility was made:

When building a Windows application, RTI Perftest must now link against libssl and libcrypto instead of ssleay32 and libeay32, as documented here.

This breaks compatibility against previous versions of RTI Connext DDS. In order to compile against previous versions a manual change has to be made in the build.bat script:

Search and replace all references for crypt32 libcryptoz libsslz with libeay32z ssleay32z.

10.3. Compilation Restrictions

RTI Perftest is designed to compile and work against the RTI Connext DDS 5.2.x, 5.3.x and 6.0.0 releases.

Certain features, however, are not compatible with all the RTI Connext DDS versions, since the build scripts make use of certain specific parameters in rtiddsgen that might change or not be present between releases:

  • The --openssl-home command-line option will not work for versions prior to RTI Connext DDS 5.2.5.

  • The --wolfssl-home command-line option will not work for versions prior to RTI Connext DDS 6.1.1.

  • Java code generation against RTI Connext DDS 5.2.0.x will fail out-of-the-box. You can disable this by adding the --skip-java-build flag. See the Known Issues section for more information and alternatives.

  • C# code generation against RTI Connext DDS 5.2.0.x is not supported. You can disable this by adding the --skip-cs-build flag.

10.4. New C# Implementation .NET compatibility

The C# implementation has been compiled and tested against RTI Perftest .NET 3.1 and above.

Performance testing, feature development and performance data acquisition have been done using .NET 5.0.

10.5. Using the Old C# Implementation

Starting in release 3.3, RTI Perftest will stop supporting the legacy C# implementation and adopt the new one provided in RTI ConnextDDS 6.1.0. However, the old implementation can still be tested using the existing code provided in the RTI Perftest 3.2 release branch. You can easily access that code by doing:

git clean -xdf -- srcCs
git checkout -b feature/3.2 -- srcCs
git checkout -b feature/3.2 -- build.bat

For compiling:

build.bat --platform <platform> --nddshome <ConnextDDS installation directory> --cs-build

Note: Recall that the legacy C# implementation is only compatible with Windows.

10.6. Known Issues

10.6.1. Compilation Errors in Microsoft Visual Studio 2017 Express

Due to this issue documented in the Know Issues for RTI Connext DDS, when compiling with Visual Studio 2017 Express, you need to set the RTI_VS_WINDOWS_TARGET_PLATFORM_VERSION as follows to avoid compilation errors:

set RTI_VS_WINDOWS_TARGET_PLATFORM_VERSION=10.0.16299.0

[RTI Issue ID CODEGENII-800]

10.6.2. Shared Memory issues when running the Modern C++ API or .Net Implementation

RTI Perftest uses UDPv4 and SHMEM by default; however certain operating systems don't support Shared Memory, or the default configuration is not enough for RTI Connext DDS to work properly. In these cases RTI Perftest will show errors when trying to create the Participant entity:

[D0001|ENABLE]NDDS_Transport_Shmem_create_recvresource_rrEA:failed to initialize shared memory resource segment for key 0x40894a
[D0001|ENABLE]NDDS_Transport_Shmem_create_recvresource_rrEA:failed to initialize shared memory resource segment for key 0x40894c
[D0001|ENABLE]DDS_DomainParticipantPresentation_reserve_participant_index_entryports:!enable reserve participant index
[D0001|ENABLE]DDS_DomainParticipant_reserve_participant_index_entryports:Unusable shared memory transport. For a more in-depth explanation of the possible problem and solution, please visit http://community.rti.com/kb/osx510.
[D0001|ENABLE]DDS_DomainParticipant_enableI:Automatic participant index failed to initialize. PLEASE VERIFY CONSISTENT TRANSPORT / DISCOVERY CONFIGURATION.
[NOTE: If the participant is running on a machine where the network interfaces can change, you should manually set wire protocol's participant id]
DDSDomainParticipant_impl::createI:ERROR: Failed to auto-enable entity

These errors are handled and filtered in the RTI Perftest implementation for the Traditional C++ and Java APIs, but this is still not possible for the Modern C++ and .Net API.

For more information about how to configure Shared Memory, see http://community.rti.com/kb/osx510.

If you want to skip the use of Shared Memory in RTI Perftest, specify the transport using -transport <kind>, for example, -transport UDPv4.

10.6.3. Warning when compiling the Traditional C++ API Implementation

RTI Perftest might show these warnings when compiling the Traditional C++ API implementation for RTI Connext DDS Pro (in versions prior to 6.0.0) and for RTI Connext DDS Micro:

In file included from perftestSupport.h:15:0,
                from perftestSupport.cxx:11:
perftest.h:29:25: warning: ‘THROUGHPUT_TOPIC_NAME’ defined but not used [-Wunused-variable]
static const DDS_Char * THROUGHPUT_TOPIC_NAME= "Throughput";
                        ^
perftest.h:30:25: warning: ‘LATENCY_TOPIC_NAME’ defined but not used [-Wunused-variable]
static const DDS_Char * LATENCY_TOPIC_NAME= "Latency";
                        ^
perftest.h:31:25: warning: ‘ANNOUNCEMENT_TOPIC_NAME’ defined but not used [-Wunused-variable]
static const DDS_Char * ANNOUNCEMENT_TOPIC_NAME= "Announcement";
                        ^

These warnings are the result of a known issue in RTI Code Generator (rtiddsgen) (CODEGENII-873) related to the way in which the code for a const string is generated. This issue will be fixed in future releases of RTI Connext DDS Micro and has been already fixed for RTI Connext DDS Pro 6.0.0.

10.6.4. Building RTI Perftest Java API against RTI Connext DDS 5.2.0.x

Due to the changes added to support larger data sizes, RTI Perftest now makes use of Unbounded Sequences. This feature was not added to RTI Connext DDS in 5.2.0.x, so the following error will be reported when trying to compile the Java API:

[INFO]: Generating types and makefiles for java.
[INFO]: Command: "/home/test/nevada/bin/rtiddsgen" -language java -unboundedSupport -replace -package com.rti.perftest.gen -d "/home/test/test-antonio/srcJava" "/home/test/test-antonio/srcIdl/perftest.idl"
ERROR com.rti.ndds.nddsgen.Main Fail:  -unboundedSupport is only supported with C, C++, C++/CLI, or C# code generation
rtiddsgen version 2.3.0
Usage: rtiddsgen [-help]
. . .
INFO com.rti.ndds.nddsgen.Main Done (failures)
[ERROR]: Failure generating code for java.

To avoid this compilation error, two changes are needed:

  • In the build.sh or build.bat scripts, modify the call for rtiddsgen and remove the -unboundedSupport flag.

  • In the srcIdl/perftest.idl file, modify the TestDataLarge_t and TestDataLargeKeyed_t types, and add a bound to the bin_data member: sequence<octet,LIMIT> bin_data;.

10.6.5. Publication rate precision on Windows systems when using "sleep" instead of "spin"

When using the -pubRate <#>:sleep or -sleep command-line parameters on Windows systems, the sleep() precision will be accurate up to 10 milliseconds. This means that for publication rates of more than 10,000 samples per second we recommend using the "<#>:spin" option instead.

10.6.6. Compiling manually on Windows systems when using the RTI Security plugin

rtiddsgen-generated solutions for Windows systems allow four different configurations:

  • Debug

  • Debug DLL

  • Release

  • Release DLL

The new RTI Perftest build system, however, is focused on compiling only one of those modes at a time. To choose the compilation mode, use the -debug and -dynamic flags.

10.6.7. Warnings Compiling on Windows systems when using the RTI Security plugin

We have found that in certain installations of Openssl a missing pdb file causes several warnings when compiling statically RTI Perftest for C++ (Traditional and Modern implementations). The warning that will show should be similar to this one:

libeay32z.lib(wp_block.obj) : warning LNK4099: PDB 'lib.pdb' was not found with
'libeay32z.lib(wp_block.obj)' or at 'rtiperftest\srcCpp11\objs\i86Win32VS2015\lib.pdb';
linking object as if no debug info [srcCpp11\perftest_publisher-i86Win32VS2015.vcxproj]

403 Warning(s)
0 Error(s)

This warning should be innocuous.

10.6.8. Dynamic compilation modes for RTI Connext DDS Micro

When building against the RTI Connext DDS Micro libraries, only the static compilation modes are supported. Therefore the --dynamic option will have no effect.

rtiddsgen code generator will fail with the following message: Option -sharedLib is not supported by this version of rtiddsgen.

10.6.9. Warnings compiling RTI Connext DDS Secure in static mode

In order to force the use of static SSL libraries (OpenSSL or wolfSSL) in Pertest, we use the -static linker option. That causes in some operative systems the linker to show the following warning:

/bin/ld: /libnddscorez.a(Library.c.o): in function `RTIOsapiLibrary_openEx':
Library.c:(.text+0x379): warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/bin/ld: /libnddscorez.a(SocketUtil.c.o): in function `NDDS_Transport_SocketUtil_V6StringAddress_to_transportAddress':
SocketUtil.c:(.text+0x331): warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/bin/ld: /libcrypto.a(b_sock.o): in function `BIO_gethostbyname':
b_sock.c:(.text+0x71): warning: Using 'gethostbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

This warning should be innocuous.