how to port Opensplice DDS configuration to RTI

7 posts / 0 new
Last post
Offline
Last seen: 5 years 2 months ago
Joined: 08/29/2019
Posts: 6
how to port Opensplice DDS configuration to RTI

Currenty i managed to get the old code which uses Openslice DDS working on RTI Connext. But when i run it i notice that there is some sort of jiter conffigured. 

After that i was searching for an configuration file of DDS itself. To be more exact the DDSI service, DURABILITY service. It seems that there are no seperate services running aside from my application that manages dds and everything surounding it. Opensplice has multiple services running to manage dds and those can be configred through an seperate configuration xml file. 

Is there something similair for RTI?

Thanks in advance,

Nick

 

PS. when i run my application it produces with RTI an consecutive stream of 12Mb/s followed bij 4 or 5 0 Mb/s. while with opensplice it returns a steady 4.5 to 5 Mb/s.

irene's picture
Offline
Last seen: 2 years 11 months ago
Joined: 11/08/2017
Posts: 15

Hi Nick,

You can configure your DDS applications by creating a USER_QOS_PROFILES.xml file (Configuring QoS with XML)

And we do have some useful services that provide advanced features such as Routing Service, Database Integration Service, Recording Service or Persistence Service among others. 

In the case you are describing, you are interested in using the Durability QoS, so you have to configure this QoS for each involved DDS application that runs on your system. If you want to configure Durability as TRANSIENT or PERSISTENT, you also have to use Persistence Service. Persistence Service is the tool that stores the historical data in its volatile memory (TRANSIENT) or on the disk (PERSISTENT): 

Mechanisms for Achieving Information Durability and Persistence

- Introduction to Persistence Service

An XML file can be used to configure Persistence Service in the same way we do when configuring DDS applications (Configuring Persistence Service).

Regarding the stream of 12Mb/s, this could happen due to the discovery process that occurs when the system starts (Discovery)

Let me know if that helps,

 Irene

Offline
Last seen: 5 years 2 months ago
Joined: 08/29/2019
Posts: 6

Hi Irene,

I find the documentation very difficult to understand. Everything around the c++ api is fine, but when i try to adjust QoS settings and DDS configurations through these QoS settings it becomes very difficult to find anything.

i can't find any clear view of what can be changed through the user-specified QoS.xml file. aside from that sometimes settings can only be changed through something like:

 

<property>
<value>
<!-- The next setting is used to force dynamic memory allocation for samples with a serialized size of larger than 32K. Without setting pool_buffer_max_size, all memory would be obtained from a pre-allocated pool, which would greatly increase the memory usage in an application that sends large data. -->
<element>
<name>dds.data_reader.history.memory_manager.fast_pool.pool_buffer_max_size</name>
<!-- Typical size of your data type. -->
<value>4096</value>
</element>
</value>
</property>

Isn't there something more clear?

preferable something similare like opensplice does it. (http://download.prismtech.com/docs/Vortex/html/ospl/ConfGuide/guide.html#)

irene's picture
Offline
Last seen: 2 years 11 months ago
Joined: 11/08/2017
Posts: 15

Hi Nick,

You can find in the documentation the QoS policies that apply to each DDS entity.

For example, if you want to know the QoS policies applied to the DataWriters, you can take a look at this section: 

https://community.rti.com/static/documentation/connext-dds/6.0.0/doc/manuals/connext_dds/html_files/RTI_ConnextDDS_CoreLibraries_UsersManual/index.htm#UsersManual/DataWriter_QosPolicies.htm#sending_2410472787_613308%3FTocPath%3DPart%25202%253A%2520Core%2520Concepts%7C6.%2520Sending%2520Data%7C6.5%2520DataWriter%2520QosPolicies%7C_____0

You can also check this table to see all the sections that contain information regarding the QoS policies that can be applied per entity:

https://community.rti.com/static/documentation/connext-dds/6.0.0/doc/manuals/connext_dds/html_files/RTI_ConnextDDS_CoreLibraries_UsersManual/index.htm#UsersManual/Using_QoS_Profiles_in_Your__Application.htm#xmlconfiguration_1275484337_390626%3FTocPath%3DPart%25203%253A%2520Advanced%2520Concepts%7C18.%2520Configuring%2520QoS%2520with%2520XML%7C18.10%2520Using%2520QoS%2520Profiles%2520in%2520Your%2520Connext%2520DDS%2520Application%7C_____0

Please, take into account that Connext implements a lot of vendor-specific QoS policies (DDS Extensions) to support complex scenarios so you may find some of them that are not compatible with Opensplice. To ensure compatibility, only the QoS policies described in the specification should be used on both sides.

Do these links help you to find the documentation that you need?

 

 

sara's picture
Offline
Last seen: 1 year 11 months ago
Joined: 01/16/2013
Posts: 128

Hi Nick,

Coming back to your original question, where are the services that you found in OpenSplice? Since the DDS standard do not mandate daemons, RTI decided to go for a fully peer-to-peer communication with no broker/deamon that would be controlling everything and creating a single point of failure. This way, applications within the same computer are fully indenpendent and their overall behavior doesn't change when they're running in the same machine or in different machines. You configure those applications individually and your DDS system as a whole.

With a great power comes a great responsability, and that's the finer grain control over QoS that you have. As an starting point, I like this document: https://community.rti.com/static/documentation/connext-dds/6.0.0/doc/manuals/connext_dds/RTI_ConnextDDS_CoreLibraries_QoS_Reference_Guide.pdf . It gives you a general view of the QoS settings that you want to modify and which DDS instances are affected.

In general, all DDS standard QoS settings are available as fully defined XML tags for instance:

<qos_profile name="Generic.StrictReliable"> 
     <datawriter_qos>
        <reliability>
            <kind> RELIABLE_RELIABILITY_QOS</kind>
             <max_blocking_time>
                 <sec>5</sec>
                 <nanosec>0</nanosec>
            </max_blocking_time>
        </reliability>
    </datawriter_qos>
</qos_profile>  

It is very rarely that you'd need to modify properties (like your last example), which are fine grain tunning, usually RTI-specific. If you get to the point of needing to modify those, you can always reach to your local FAE for help.

We do have pre-defined built-in QoS settings for some scenarios, you can take a look here: https://community.rti.com/kb/configuring-qos-built-profiles

If you give us some details, maybe we can point you quicker to a solution. What size of data are you sending? Are all applications in the same computer? Which requirements do you have? 
And if you are looking at performance numbers, have you seen our perftest tool (https://github.com/rticommunity/rtiperftest ) ?

All the best,
Sara

Offline
Last seen: 5 years 2 months ago
Joined: 08/29/2019
Posts: 6

Hi Sara, Irene,

Thanks for your time.

If i understand it corectly all settings go though a reader, writer or topic qos. That clarifies a lot.

In my case i send a union of around 1kb in a strestest where i send as many as the device can handle.

for now it seems to use a jitter or batches by default.

sara's picture
Offline
Last seen: 1 year 11 months ago
Joined: 01/16/2013
Posts: 128

Hi Nick,

Don't forget the DomainParticipant QoS too :)

If you use perftest, by default we do use batching, but the default QoS settings of Connext do not enable batching. Have you run it for your sample size? Which results are you obtaining? Maybe we could setup a call with your regional representative to help you solve this faster. What is it your location?

Thanks,
Sara