Skip to main content

QoS Cheatsheet

Quick reference for all 22 DDS QoS policies.

Data Distribution

PolicyValuesDefaultCompatibility
ReliabilityBestEffort, ReliableBestEffortExact match
HistoryKeepLast(N), KeepAllKeepLast(100)N/A
DurabilityVolatile, TransientLocal, PersistentVolatileWriter >= Reader
DurabilityServiceCleanup delay, history depth, limits-N/A
ResourceLimitsmax_samples, max_instances, max_quota_bytesUnlimitedN/A

Timing

PolicyValuesDefaultCompatibility
DeadlineDurationInfiniteWriter ≤ Reader
LatencyBudgetDuration0Hint only
LifespanDurationInfiniteWriter >= Reader
TimeBasedFilterDuration0Hint only

Ownership

PolicyValuesDefaultCompatibility
OwnershipShared, ExclusiveSharedExact match
OwnershipStrengthInteger0N/A

Ordering

PolicyValuesDefaultCompatibility
DestinationOrderByReception, BySourceByReceptionWriter >= Reader
PresentationInstance, Topic, GroupInstanceWriter >= Reader

Lifecycle

PolicyValuesDefaultCompatibility
LivelinessAutomatic, ManualByParticipant, ManualByTopicAutomaticWriter >= Reader
WriterDataLifecycleautodispose_unregisteredtrueN/A
ReaderDataLifecycleautopurge delaysInfiniteN/A
EntityFactoryautoenabletrueN/A

Metadata

PolicyValuesDefaultCompatibility
UserDataBytesEmptyHint only
TopicDataBytesEmptyHint only
GroupDataBytesEmptyHint only
PartitionString listEmpty (default)Intersection
TransportPriorityInteger0Hint only

Common Profiles

Sensor Streaming (High Rate)

let qos = DataWriterQos::default()
.reliability(Reliability::BestEffort)
.durability(Durability::Volatile)
.history(History::KeepLast { depth: 1 });

State Synchronization

let qos = DataWriterQos::default()
.reliability(Reliability::Reliable {
max_blocking_time: Duration::from_secs(1),
})
.durability(Durability::TransientLocal)
.history(History::KeepLast { depth: 10 });

Command Queue

let qos = DataWriterQos::default()
.reliability(Reliability::Reliable {
max_blocking_time: Duration::from_secs(30),
})
.durability(Durability::Volatile)
.history(History::KeepAll);

Event Log

let qos = DataWriterQos::default()
.reliability(Reliability::Reliable {
max_blocking_time: Duration::from_secs(5),
})
.durability(Durability::Persistent)
.history(History::KeepAll);

Compatibility Matrix

Reliability

WriterReaderMatch
ReliableReliable
ReliableBestEffort
BestEffortBestEffort
BestEffortReliable

Durability

WriterReaderMatch
PersistentAny
TransientLocalTransientLocal/Volatile
TransientLocalPersistent
VolatileVolatile
VolatileTransientLocal/Persistent

Liveliness

WriterReaderMatch
ManualByTopicAny
ManualByParticipantManualByParticipant/Automatic
ManualByParticipantManualByTopic
AutomaticAutomatic
AutomaticManual*

Quick Reference

Writer QoS

DataWriterQos::default()
.reliability(Reliability::Reliable { max_blocking_time })
.durability(Durability::TransientLocal)
.history(History::KeepLast { depth: 100 })
.deadline(Deadline::new(Duration::from_millis(100)))
.liveliness(Liveliness::Automatic { lease_duration })
.ownership(Ownership::Shared)
.resource_limits(ResourceLimits { ... })

Reader QoS

DataReaderQos::default()
.reliability(Reliability::Reliable)
.durability(Durability::TransientLocal)
.history(History::KeepLast { depth: 50 })
.deadline(Deadline::new(Duration::from_millis(200)))
.time_based_filter(TimeBasedFilter::from_millis(10))

Publisher/Subscriber QoS

PublisherQos::default()
.partition(Partition::single("sensor"))
.presentation(Presentation::topic_coherent())

Participant QoS

DomainParticipantQos::default()
.user_data(UserData::new(b"version=1.0".to_vec()))

See Also