The Persistence module benchmarks Rumi's persistence mechanisms for messages and data.
Rumi provides multiple persistence mechanisms:
Message Logger: Persists individual messages
Packet Logger: Persists message packets
Store Logger: Persists transactional state changes
This benchmark measures the throughput and latency of each persistence mechanism.
Class: com.neeve.perf.persist.MessageLogger
Benchmarks single-message persistence performance.
Class: com.neeve.perf.persist.PacketLogger
Benchmarks message packet persistence performance.
Class: com.neeve.perf.persist.StoreLogger
Benchmarks transactional state persistence performance.
Command-Line Parameters
Common Parameters (All Loggers)
Short
Long
Default
Description
Number of messages/packets to persist
Persist rate (-1 = unlimited)
Preallocated log length (GB)
Zero out preallocated length
Write buffer size (bytes)
Sync on every commit (MessageLogger, StoreLogger)
Queue depth for detached writes
Don't write latencies to file
MessageLogger-Specific
Short
Long
Default
Description
Log open mode (rw, rws, rwd)
Number of writes per commit
PacketLogger-Specific
Short
Long
Default
Description
--populateStorePacketMetadata
Populate ODS packet metadata
Concurrent read/write mode
StoreLogger-Specific
Short
Long
Default
Description
Log open mode (rw, rws, rwd)
Number of writes per commit
Running Benchmarks
Message Logger Test
Packet Logger Test
Store Logger Test
flushOnCommit / syncOnCommit
Controls durability vs performance tradeoff:
false (default):
Data buffered in OS cache
Risk of data loss on system crash
true:
Data flushed/synced to physical media
writeBufferSize
Size of write buffer (default: 8192 bytes):
Interpreting Results
Typical Results (Linux x86-64, NVME SSD)
Operation
flushOnWrite=false
flushOnWrite=true
Buffered Writes (flushOnWrite=false):
High throughput (100K-200K writes/sec)
Low latency (few microseconds)
Suitable when durability can be relaxed
Synchronous Writes (flushOnWrite=true):
Lower throughput (5K-10K writes/sec)
Higher latency (hundreds of microseconds)
Required for critical data
Storage Media Impact:
NVME SSD: ~100µs sync write latency
SATA SSD: ~200-500µs sync write latency
HDD: ~5-10ms sync write latency
Comparison with AEP Module
The AEP Module uses asynchronous persistence:
Persistence Module: Measures pure persistence overhead
AEP Module: Persistence runs concurrently with replication
AEP Impact: Persistence overlaps with network latency
In AEP benchmark, persistence adds minimal latency due to pipelining
For High Throughput
Use buffered writes (flushOnWrite=false)
Increase write buffer size
Consider packet-based logging for batch operations
For Guaranteed Durability
Use NVME or high-performance SSD
Consider battery-backed write cache
Accept throughput/latency tradeoff
Review AEP Module to see persistence in end-to-end context