Configuration qos for high throughput

2 posts / 0 new
Last post
Offline
Last seen: 7 months 3 weeks ago
Joined: 06/10/2015
Posts: 9
Configuration qos for high throughput

I am trying to run a performance test for the supplied example project 'Hello_Dynamic' in C# using the provided high throughput qos file.  However the subscriber quickly is quickly overwhelmed, consuming all available memory on the machine.  Can anyone provide a high throughput qos configuration that works. I've tried the recommendations at https://community.rti.com/kb/which-qos-parameters-are-important-tune-throughput-testing, but these are not resulting a better behavior.

 

Juanjo Martin's picture
Offline
Last seen: 1 year 2 months ago
Joined: 07/23/2012
Posts: 48

Hi Rickyeng,

In that example, the resource limits are not set for the DataReader so it uses the default values. And the default values allow a DataReader to allocate as much memory as needed. If you want to reduce the amount of memory your subscribing application consumes, you have to reduce the resource limits of the DataReader.  You can find the ResourceLimitsQos here:

https://community.rti.com/rti-doc/510/ndds.5.1.0/doc/html/api_cpp/structDDS__ResourceLimitsQosPolicy.html

I have two suggestions for you:

Option (1) Use the existing BuiltinQoSExp::StrictReliable.HighThroughput profile

That builtin profile sets internally a few QoS settings in order to provide HighThroughput. Our examples are not still updated but in the future we may modify them to use these builtin profiles. I love these profiles. They ease our work a lot!

I have created a profile that extends from that one and customizes a little bit further the QoS. Please remove the is_default_qos="true" from the existing profiles and add this one:

<qos_profile name="NewHighThroughput"
base_name="BuiltinQosLibExp::Generic.StrictReliable.HighThroughput"
is_default_qos="true">
    <datareader_qos>
        <resource_limits>
            <initial_samples>10000</initial_samples>
            <max_samples>10000</max_samples>
        </resource_limits>
    </datareader_qos>
    <datawriter_qos>
        <resource_limits>
            <initial_samples>10000</initial_samples>
            <max_samples>10000</max_samples>
        </resource_limits>
        <batch>
            <enable>true</enable>
            <max_data_bytes>16378</max_data_bytes>
            <max_flush_delay>
                <sec>DURATION_INFINITE_SEC</sec>
                <nanosec>100000000</nanosec>
            </max_flush_delay>
        </batch>
    </datawriter_qos>
</qos_profile>

 Option (2) Use RTI Perftest.

Since you are doing a performance evaluation, you may want to use our official tool to evaluate the performance of RTI Connext DDS. It is implemented in C++, Java and C#. You can find it here in the communtiy:

https://community.rti.com/downloads/rti-connext-dds-performance-test

Please, let me know if you decide to proceed with this approach and I will give you further help if needed. I highly recommend this option if you plan to measure performance, since it allows you to measure also latency.

 

Thanks,

Juanjo Martin

Member of the RTI Support Team and the Performance Team