Skip to main content

System Limits

This page documents the hard limits and recommended values for HDDS configuration.

Domain & Participant Limits

LimitValueNotes
Domain ID range0-232233 domains max (RTPS spec)
Participants per domain0-119120 participants max
Total participants27,960233 × 120

Port Ranges

Port TypeFormulaDomain 0, Participant 0
SPDP Multicast7400 + (250 × domainId)7400
SEDP Unicast7410 + (250 × domainId) + (2 × participantId)7410
User Unicast7411 + (250 × domainId) + (2 × participantId)7411
Data Multicast7401 + (250 × domainId)7401

Port range per domain: 7400-7469 (70 ports)

Resource Limits (Default)

ResourceDefaultMaximum
max_samples100,000Platform memory
max_instances1Platform memory
max_samples_per_instance100,000≤ max_samples
max_quota_bytes100 MBPlatform memory

Message Size Limits

LimitValueNotes
Max CDR payload16 MBPer message
Max UDP datagram65,507 bytesFragmented if larger
RTPS fragment size64 KBDefault fragmentation

Discovery Timing

ParameterDefaultAdjustable
SPDP announcement period3 secondsYes
SPDP aggressive phase200 ms × 5First 5 announcements
Participant lease duration30 secondsYes
Lease check interval1 secondInternal

History Limits

ConfigurationConstraint
KEEP_LAST depth> 0
KEEP_ALLLimited by ResourceLimits
Queue validationmax_samples ≥ max_samples_per_instance × max_instances

Identifier Limits

LimitValue
Topic name length256 characters
Type name length256 characters
Partition name256 characters
UserData size64 KB

IDL Limits (hdds_gen)

LimitValue
Identifier length255 characters
Collection nesting depth5 levels
Reserved keywords34 words
Supported annotations26 standard

Shared Memory Transport

ParameterDefault
Ring buffer slots256 (power of 2)
Payload size per slot4 KB
Writer push latency< 200 ns
Reader poll latency< 100 ns

Performance Benchmarks

MetricValue
Write latency (best)257 ns
Throughput4.48 M msg/s
Memory (idle)< 100 KB
Memory (per topic)< 50 KB

hdds_viewer Limits

LimitValue
Frame table buffer10,000 messages
Timeline buffer10,000 messages
Undo history100 levels
Write throughput625 MB/s
Ingestion rate41 M msg/s

High Frequency Topics (> 1000 Hz)

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

Large Messages (> 64 KB)

let qos = DataWriterQos::default()
.reliability(Reliability::Reliable {
max_blocking_time: Duration::from_secs(5),
})
.resource_limits(ResourceLimits {
max_quota_bytes: 500 * 1024 * 1024, // 500 MB
..Default::default()
});

Many Instances (> 1000)

let qos = DataWriterQos::default()
.resource_limits(ResourceLimits {
max_instances: 10_000,
max_samples_per_instance: 10,
max_samples: 100_000,
..Default::default()
});