Configuring QoS with Built-in Profiles

RTI Connext DDS comes with many built-in QoS profiles that allow you to configure your DomainParticipants, DataWriters, DataReaders, and Topics for your specific use case.  These built-in QoS profiles are documented in your installation, but here is a short description of each one.

Data Pattern QoS 

Generic.StrictReliable

This profile guarantees delivery of every published sample. Samples will not be overwritten, regardless of HistoryQosPolicy's depth. Strict reliability ensures in-order delivery and retransmission of lost samples.

<qos_profile name="MyProfile" base_name="BuiltinQosLibExp::Generic.StrictReliable">
</qos_profile>

Generic.KeepLastReliable

Like the Generic.StrictReliable profile, this profile ensures in-order delivery of samples. However, new data can overwrite data that has not been acknowledged yet by the reader, therefore causing possible sample loss.

<qos_profile name="MyProfile" base_name="BuiltinQosLibExp::Generic.KeepLastReliable">
</qos_profile>

Generic.BestEffort

This profile enables best-effort communication. No effort or resources are spent to track whether or not sent samples are received. Minimal resources are used. This is the most deterministic method of sending data since there is no indeterministic delay that can be introduced by resending data. Data samples may be lost. This setting is good for periodic data.
<qos_profile name="MyProfile" base_name="BuiltinQosLibExp::Generic.BestEffort">
</qos_profile>

Generic.StrictReliable.HighThroughput

The Generic.HighThroughput profile extends the Generic.StrictReliable profile to perform additional, fine-grained performance tuning specific to applications that send continuously streaming data. The parameters specified here add to and/or override the parameters specified in the Generic.StrictReliable profile.

Important! If you are inheriting from this profile and are writing samples smaller than 120 bytes you will fail to see communication between your DataWriters and DataReaders. This is becauseof the batching settings in combination with the DataReader's max_samples resource limit of 256 that is inherted from the Generic.StrictReliable profile. You will need to increase this value. For a full explanation of the problem please visit this Knowledge Base article.

<qos_profile name="MyProfile" base_name="BuiltinQosLibExp::Generic.StrictReliable.HighThroughput">
</qos_profile>

Generic.StrictReliable.LowLatency

 

The Generic.LowLatency profile extends the Generic.StrictReliable profile to perform additional, fine-grained performance tuning specific to applications that send continuously streaming data. The parameters specified here add to and/or override the parameters specified in the Generic.StrictReliable profile.
<qos_profile name="MyProfile" base_name="BuiltinQosLibExp::Generic.StrictReliable.LowLatency">
</qos_profile>

Generic.Participant.LargeData 

A common DomainParticipant base profile that configures a fast, a medium, and a slow flow controller that can each be used to throttle application data flow at different rates.

<qos_profile name="MyProfile">
    <participant_qos base_name="BuiltinQosLib::Generic.Participant.LargeData">
</qos_profile>

Generic.Participant.LargeData.Monitoring 

A common base DomainParticipant profile to configure participants to both handle large data and use the monitoring library.

<qos_profile name="MyProfile">
    <participant_qos base_name="BuiltinQosLib::Generic.Participant.LargeData.Monitoring">
</qos_profile>

Generic.StrictReliable.LargeData 

This profile extends the Generic.Participant.LargeData profile to handle sending large samples. The profile optimizes the memory usage per sample within the middleware but it does not do any flow control. You can use this profile directly, which enables asynchronous publication with the default flow controller (i.e,. no flow control) or use one of the three profiles below (Generic.StrictReliable.LargeData.*Flow), which use this profile as a common base profile. Each of these three profiles use one of the three flow controllers defined in Generic.Participant.LargeData in order to throttle application data flow.

<qos_profile name="MyProfile" base_name="BuiltinQosLibExp::Generic.StrictReliable.LargeData">
</qos_profile>

Generic.KeepLastReliable.LargeData 

This profile is similar to the Generic.KeepLastReliable profile, but inherits from Generic.StrictReliable.LargeData in order to handle sending large data. You can use this profile directly, which enables the default flow controller (i.e., NO flow control) or you can choose one of the three profiles below (Generic.KeepLastReliable.LargeData.*Flow) which use this profile as a common base profile. Each of these three profiles use one of the three flow controllers defined in Generic.Participant.LargeData in order to throttle application data flow.

<qos_profile name="MyProfile" base_name="BuiltinQosLibExp::Generic.KeepLastReliable.LargeData">
</qos_profile>

Generic.StrictReliable.LargeData.FastFlow 

Strictly reliable communication for large data with a 100 MB/sec (838 Mb/sec) flow controller.

<qos_profile name="MyProfile" base_name="BuiltinQosLibExp::Generic.StrictReliable.LargeData.FastFlow">
</qos_profile>

Generic.StrictReliable.LargeData.MediumFlow  

Strictly reliable communication for large data with a 25 MB/sec (209 Mb/sec) flow controller. 

<qos_profile name="MyProfile" base_name="BuiltinQosLibExp::Generic.StrictReliable.LargeData.MediumFlow">
</qos_profile>

Generic.StrictReliable.LargeData.SlowFlow

 

Strictly reliable communication for large data with a 6.25 MB/sec (52 Mb/sec) flow controller.

<qos_profile name="MyProfile" base_name="BuiltinQosLibExp::Generic.StrictReliable.LargeData.SlowFlow">
</qos_profile>

Generic.KeepLastReliable.LargeData.FastFlow

Keep-last reliable communication for large data with a 100 MB/sec (838 Mb/sec) flow controller.

<qos_profile name="MyProfile" base_name="BuiltinQosLibExp::Generic.KeepLastReliable.LargeData.FastFlow">
</qos_profile>

Generic.KeepLastReliable.LargeData.MediumFlow

Keep-last reliable communication for large data with a 25 MB/sec (209 Mb/sec) flow controller.

<qos_profile name="MyProfile" base_name="BuiltinQosLibExp::Generic.KeepLastReliable.LargeData.MediumFlow">
</qos_profile> 

Generic.KeepLastReliable.LargeData.SlowFlow 

Keep-last reliable communication for large data with a 6.25 MB/sec (52 Mb/sec) flow controller.

<qos_profile name="MyProfile" base_name="BuiltinQosLibExp::Generic.KeepLastReliable.LargeData.SlowFlow">
</qos_profile>

Generic.KeepLastReliable.TransientLocal

This profile extends the Generic.KeepLastReliable profile, but persists the samples of a DataWriter as long as the entity exists in order to deliver them to late-joining DataReaders.

<qos_profile name="MyProfile" base_name="BuiltinQosLibExp::Generic.KeepLastReliable.TransientLocal">
</qos_profile>

Generic.KeepLastReliable.Transient

This profile extends the Generic.KeepLastReliable profile, but persists samples using RTI Persistence Service in order to deliver them to late-joining DataReaders.

<qos_profile name="MyProfile" base_name="BuiltinQosLibExp::Generic.KeepLastReliable.Transient">
</qos_profile>

Generic.KeepLastReliable.Persistent

This profile extends the Generic.KeepLastReliable profile, but persists samples in permanent storage, such as a disk, using RTI Persistence Service to deliver them to late-joining DataReaders.

<qos_profile name="MyProfile" base_name="BuiltinQosLibExp::Generic.KeepLastReliable.Persistent">
</qos_profile>

Generic.AutoTuning

This profile enables the Turbo Mode batching and Auto Throttle experimental features. Aside from the properties that enable these features (which are all false by default), all the values are set to their defaults and are shown here for reference. Turbo Mode batching adjusts the maximum number of bytes of a batch, based on how frequently samples are being written. Auto Throttle auto-adjusts the speed at which a writer will write samples, based on the number of unacknowledged samples in its queue.

These features are designed to auto-adjust the publishing behavior within a system to achieve the best possible performance with regards to throughput and latency.

Important! If you are inheriting from this profile and are writing samples smaller than 120 bytes you will fail to see communication between your DataWriters and DataReaders. This is because of the batching settings in combination with the DataReader's max_samples resource limit of 256 that is inherted from the Generic.StrictReliable profile. You will need to increase this value. For a full explanation of the problem please visit this Knowledge Base article.

<qos_profile name="MyProfile" base_name="BuiltinQosLibExp::Generic.AutoTuning">
</qos_profile>

Pattern.PeriodicData

This profile is intended to be used for applications that expect periodic data such as sensor data. The deadline that is set in this profile can be used to detect when DataWriters are not publishing data with the expected periodicity.

<qos_profile name="MyProfile" base_name="BuiltinQosLibExp::Pattern.PeriodicData">
</qos_profile>

Pattern.Streaming

 

The data sent in streaming applications is commonly periodic and therefore this profile simply inherits from the Pattern.PeriodicData profile. Notice that with this profile the application may lose data, which may be acceptable in use cases such as video conferencing.

<qos_profile name="MyProfile" base_name="BuiltinQosLibExp::Pattern.Streaming">
</qos_profile>

Pattern.ReliableStreaming

 

Sometimes streaming applications require reliable communication while still tolerating some data loss. In this case, we inherit from the Generic.KeepLastReliable profile and increase the HistoryQosPolicy's depth to reduce the probability of losing samples.

<qos_profile name="MyProfile" base_name="BuiltinQosLibExp::Pattern.ReliableStreaming">
</qos_profile>

Pattern.Event

This profile can be used by applications in which samples represent events such as button pushes or alerts. When events are triggered, the system should almost always do something, meaning that we don't want to lose the event and therefore require strictly reliable communication. Therefore, we inherit from the Generic.StrictReliable profile. Since events and alerts are critical and non-periodic data, it is important to detect situations in which communication between a DataWriter and DataReader is broken, this is why this profile sets the LivelinessQosPolicy. If the DataWriter does not assert its liveliness in a timely manner, the DataReader will report loss of liveliness to the application.

<qos_profile name="MyProfile" base_name="BuiltinQosLibExp::Pattern.Event">
</qos_profile>

Pattern.AlarmEvent 

 

An alarm is a type of event; therefore this profile simply inherits from Pattern.Event.

<qos_profile name="MyProfile" base_name="BuiltinQosLibExp::Pattern.AlarmEvent">
</qos_profile>

Pattern.Status

This profile can be used by applications in which samples represent state variables whose values remain valid as long as they doesn't explicitly change. State variables typically do not change periodically. State variables and their values should also be available to applications that appear after the value originally changed because it is unreasonable to have to wait until the next change of state, which may be indeterminate.

Whether to use this profile or Pattern.PeriodicData can often be an application choice. For example, if a DataWriter is publishing temperature sensor data, it could use the Pattern.PeriodicData profile and publish the data at a fixed rate or it could use the Pattern.Status profile and only publish the temperature when it changes more than 1 degree.

<qos_profile name="MyProfile" base_name="BuiltinQosLibExp::Pattern.Status">
</qos_profile>

Pattern.AlarmStatus 

 

An alarm status is a type of status; therefore this profile simply inherits from Pattern.Status.

<qos_profile name="MyProfile" base_name="BuiltinQosLibExp::Pattern.AlarmStatus">
</qos_profile>

Pattern.LastValueCache

With this profile, a DataWriter will keep in its queue the last value that was published for each sample instance. Late-joining DataReaders will get that value when they join the system. This profile inherits from Generic.KeepLastReliable.Transient Local because the use case requires delivery to late-joiners.

<qos_profile name="MyProfile" base_name="BuiltinQosLibExp::Pattern.LastValueCache">
</qos_profile>

General QoS

Generic.Monitoring.Common 

Enables RTI Monitoring Library using the Baseline QoS defaults. You can use this profile to override the DomainParticipant configuration to use monitoring when inheriting profiles. For example:

<qos_profile name="MyProfile" base_name="BuiltinQosLibExp::Generic.StrictReliable">
    <participant_qos base_name="BuiltinQosLib::Generic.Monitoring.Common">
</qos_profile>

Generic.ConnextMicroCompatibility

 

RTI Connext Micro only supports  MANUAL_BY_TOPIC LivelinessQosPolicy kind. In order to be compatible with Connext DDS, the DataReader and DataWriter must have their liveliness kind changed to this value because the default kind in Connext DDS is AUTOMATIC.

<qos_profile name="MyProfile" base_name="BuiltinQosLib::Generic.ConnextMicroCompatibility">
 </qos_profile>

Generic.OtherDDSVendorCompatibility

This profiles allows RTI Connext DDS to interoperate with other DDS vendors

<qos_profile name="MyProfile" base_name="BuiltinQosLib::Generic.OtherDDSVendorCompatibility">
 </qos_profile>

Backward Compatibility QoS

These QoS profiles allow you to use the default QoS from previous versions of RTI Connext DDS for backward compatibility with their default QoS settings.

  • Baseline.5.0.0
  • Baseline.5.1.0
  • Baseline.5.2.0
<qos_profile name="MyProfile" base_name="BuiltinQosLib::Baseline.5.x.x">
</qos_profile>