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

Stress Test Results​

Validated on real hardware:

TestParticipantsTopicsTimeMemoryStatus
Scalability100100011.2s1.3 GB✅
TestDurationMessagesRateCrashesLeaksStatus
Endurance12 hours4,290,25699.3 msg/s00✅
Reconnection20 min1000 cycles0.8 cyc/s00✅
Network partition30s blackout701 totalImmediate recovery00✅
TCP transportLayer test5+6 msgsBidirectional00✅

Endurance test memory profile:

  • Initial: 4 MB → Peak: 18 MB → Final: 18 MB
  • Growth: 14 MB over 12 hours = no memory leak

Memory per participant: ~13 MB (includes discovery, history cache, RTPS state)

Memory Planning

For large deployments, estimate memory as:

Total RAM ≈ Participants × 13 MB + Topics × 0.5 MB

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​

Experimental

Shared memory transport is experimental with significant limitations.

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

SHM Limitations​

LimitationDescription
QoS SupportBestEffort only - no ACK/NACK/retransmission
PlatformsLinux (POSIX shm_open), Windows 8+ (CreateFileMappingW/WaitOnAddress) - macOS not supported
Data LossPossible overrun if reader is slow (lock-free ring buffer)
Cross-VendorNo interop with other DDS vendors (Iceoryx, RTI SHM)
SecurityCryptoPlugin bypassed on SHM path

When to Use SHM​

✅ Good for:

  • High-frequency sensor data (same host)
  • BestEffort acceptable scenarios
  • Maximum performance (< 1μs latency)
  • Single-process / intra-process communication

❌ Not for:

  • Reliable delivery requirements
  • Cross-host communication
  • Mixed vendor environments
  • Security-critical data

Message Fragmentation (DATA_FRAG)​

ParameterValue
Default fragment size1024 bytes
Max unfragmented payload8192 bytes (8 KB)
Max reassembly size~64 KB
Fragment buffer timeout10 seconds

Tested Payload Sizes​

PayloadFragmentsLatencyStatus
64 B1 (DATA)~1.1 msSupported
16 KB16~1.1 msSupported
64 KB64~2.3 msSupported
128 KB128N/AExceeds buffer
Large Messages

For payloads > 64 KB, consider increasing the fragment buffer size or using a different transport (TCP, QUIC).

Performance Benchmarks​

MetricValueConditions
Intra-process write latency (p50)247 nsi9-9900KF, 100 runs median, v1.0.8
Intra-process write latency (best)242 nsi9-9900KF, v1.0.8
Intra-process throughput3.06 M msg/si9-9900KF, best run
UDP loopback RTT (p50)246 us64B, Reliable, v0.8.0
Memory (idle)< 100 KB
Memory (per topic)< 50 KB

See Benchmarks for full methodology and reproduction steps.

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)​

use hdds::QoS;

let qos = QoS::best_effort().keep_last(1);

Large Messages (> 64 KB)​

use hdds::QoS;
use std::time::Duration;

let qos = QoS::reliable()
.max_blocking_time(Duration::from_secs(5))
.max_quota_bytes(500 * 1024 * 1024); // 500 MB

Many Instances (> 1000)​

use hdds::QoS;

let qos = QoS::reliable()
.max_instances(10_000)
.max_samples_per_instance(10)
.max_samples(100_000);