RTI Connext Traditional C++ API Version 7.1.0
DDS_ResourceLimitsQosPolicy Struct Reference

Controls the amount of physical memory allocated for DDS entities, if dynamic allocations are allowed, and how they occur. Also controls memory usage among different instance values for keyed topics. More...

Public Attributes

DDS_Long max_samples
 Represents the maximum samples the middleware can store for any one DDSDataWriter (or DDSDataReader). More...
 
DDS_Long max_instances
 Represents the maximum number of instances a DDSDataWriter (or DDSDataReader) can manage. More...
 
DDS_Long max_samples_per_instance
 Represents the maximum number of samples of any one instance a DDSDataWriter (or DDSDataReader) can manage. More...
 
DDS_Long initial_samples
 <<extension>> Represents the initial samples the middleware will store for any one DDSDataWriter (or DDSDataReader). More...
 
DDS_Long initial_instances
 <<extension>> Represents the initial number of instances a DDSDataWriter (or DDSDataReader) will manage. More...
 
DDS_Long instance_hash_buckets
 <<extension>> Number of hash buckets for instances. More...
 

Detailed Description

Controls the amount of physical memory allocated for DDS entities, if dynamic allocations are allowed, and how they occur. Also controls memory usage among different instance values for keyed topics.

Entity:
DDSTopic, DDSDataReader, DDSDataWriter
Status:
DDS_SAMPLE_REJECTED_STATUS, DDS_SampleRejectedStatus
Properties:
RxO = NO
Changeable = UNTIL ENABLE

Usage

This policy controls the resources that RTI Connext can use to meet the requirements imposed by the application and other QoS settings.

For the reliability protocol (and DDS_DurabilityQosPolicy), this QoS policy determines the actual maximum queue size when the DDS_HistoryQosPolicy is set to DDS_KEEP_ALL_HISTORY_QOS.

In general, this QoS policy is used to limit the amount of system memory that RTI Connext can allocate. For embedded real-time systems and safety-critical systems, pre-determination of maximum memory usage is often required. In addition, dynamic memory allocation could introduce non-deterministic latencies in time-critical paths.

This QoS policy can be set such that an entity does not dynamically allocate any more memory after its initialization phase.

If DDSDataWriter objects are communicating samples faster than they are ultimately taken by the DDSDataReader objects, the middleware will eventually hit against some of the QoS-imposed resource limits. Note that this may occur when just a single DDSDataReader cannot keep up with its corresponding DDSDataWriter. The behavior in this case depends on the setting for the RELIABILITY. If reliability is DDS_BEST_EFFORT_RELIABILITY_QOS, then RTI Connext is allowed to drop samples. If the reliability is DDS_RELIABLE_RELIABILITY_QOS, RTI Connext will block the DDSDataWriter or discard the sample at the DDSDataReader in order not to lose existing samples.

The constant DDS_LENGTH_UNLIMITED may be used to indicate the absence of a particular limit. For example setting DDS_ResourceLimitsQosPolicy::max_samples_per_instance to DDS_LENGTH_UNLIMITED will cause RTI Connext not to enforce this particular limit.

If these resource limits are not set sufficiently, under certain circumstances the DDSDataWriter may block on a write() call even though the DDS_HistoryQosPolicy is DDS_KEEP_LAST_HISTORY_QOS. To guarantee the writer does not block for DDS_KEEP_LAST_HISTORY_QOS, make sure the resource limits are set such that:

DDS_Long max_samples
Represents the maximum samples the middleware can store for any one DDSDataWriter (or DDSDataReader).
Definition: infrastructure.ifc:2978
DDS_Long max_instances
Represents the maximum number of instances a DDSDataWriter (or DDSDataReader) can manage.
Definition: infrastructure.ifc:2982
DDS_Long max_samples_per_instance
Represents the maximum number of samples of any one instance a DDSDataWriter (or DDSDataReader) can m...
Definition: infrastructure.ifc:2986
See also
DDS_ReliabilityQosPolicy
DDS_HistoryQosPolicy

Consistency

The setting of DDS_ResourceLimitsQosPolicy::max_samples must be consistent with DDS_ResourceLimitsQosPolicy::max_samples_per_instance. For these two values to be consistent, it must be true that DDS_ResourceLimitsQosPolicy::max_samples >= DDS_ResourceLimitsQosPolicy::max_samples_per_instance. As described above, this limit will not be enforced if DDS_ResourceLimitsQosPolicy::max_samples_per_instance is set to DDS_LENGTH_UNLIMITED.

The setting of RESOURCE_LIMITS max_samples_per_instance must be consistent with the HISTORY depth. For these two QoS to be consistent, it must be true that depth <= max_samples_per_instance.

See also
DDS_HistoryQosPolicy

Member Data Documentation

◆ max_samples

DDS_Long DDS_ResourceLimitsQosPolicy::max_samples

Represents the maximum samples the middleware can store for any one DDSDataWriter (or DDSDataReader).

Specifies the maximum number of data samples a DDSDataWriter (or DDSDataReader) can manage across all the instances associated with it.

For unkeyed types, this value has to be equal to max_samples_per_instance if max_samples_per_instance is not equal to DDS_LENGTH_UNLIMITED.

When batching is enabled, the maximum number of data samples a DDSDataWriter can manage will also be limited by DDS_DataWriterResourceLimitsQosPolicy::max_batches.

[default] DDS_LENGTH_UNLIMITED

[range] [1, 100 million] or DDS_LENGTH_UNLIMITED, >= initial_samples, >= max_samples_per_instance, >= DDS_DataReaderResourceLimitsQosPolicy::max_samples_per_remote_writer or >= DDS_RtpsReliableWriterProtocol_t::heartbeats_per_max_samples

For DDS_DataWriterQos max_samples >= DDS_RtpsReliableWriterProtocol_t::heartbeats_per_max_samples in DDS_DataWriterProtocolQosPolicy::rtps_reliable_writer if batching is disabled.

◆ max_instances

DDS_Long DDS_ResourceLimitsQosPolicy::max_instances

Represents the maximum number of instances a DDSDataWriter (or DDSDataReader) can manage.

[default] DDS_LENGTH_UNLIMITED

[range] [1, 1 million] or DDS_LENGTH_UNLIMITED, >= initial_instances

◆ max_samples_per_instance

DDS_Long DDS_ResourceLimitsQosPolicy::max_samples_per_instance

Represents the maximum number of samples of any one instance a DDSDataWriter (or DDSDataReader) can manage.

While an unkeyed type is logically considered as a single instance, for unkeyed types this value has to be equal to max_samples or DDS_LENGTH_UNLIMITED.

[default] DDS_LENGTH_UNLIMITED

[range] [1, 100 million] or DDS_LENGTH_UNLIMITED, <= max_samples or DDS_LENGTH_UNLIMITED, >= DDS_HistoryQosPolicy::depth

◆ initial_samples

DDS_Long DDS_ResourceLimitsQosPolicy::initial_samples

<<extension>> Represents the initial samples the middleware will store for any one DDSDataWriter (or DDSDataReader).

Specifies the initial number of data samples a DDSDataWriter (or DDSDataReader) will manage across all the instances associated with it.

[default] 32

[range] [1,100 million], <= max_samples

◆ initial_instances

DDS_Long DDS_ResourceLimitsQosPolicy::initial_instances

<<extension>> Represents the initial number of instances a DDSDataWriter (or DDSDataReader) will manage.

[default] 32

[range] [1,1 million], <= max_instances

◆ instance_hash_buckets

DDS_Long DDS_ResourceLimitsQosPolicy::instance_hash_buckets

<<extension>> Number of hash buckets for instances.

The instance hash table facilitates instance lookup. A higher number of buckets decreases instance lookup time but increases the memory usage.

[default] 1 [range] [1,1 million]