Releases: redhat-performance/rusty-comms
Release list
v0.3.1
v0.3.1
Patch release fixing a build break introduced in v0.3.0.
Bug Fix
- Fixed compilation failure caused by
BlockingTransportFactory::createsignature mismatch between the standalone server/client modules (#110) and the SHM latency optimizations (#116). All callers now pass the requiredsend_delayparameter. (#118)
Developer Tooling
-
AGENTS.md: Added project guidelines for AI-assisted development covering MSRV policy, measurement accuracy standards, pre-commit hook usage, testing expectations, and commit trailer requirements.
-
Pre-commit hook optimization: Expensive checks (tests, cargo audit, MSRV validation) are now skipped when only non-Rust-source files change (documentation, Cargo.lock, shell scripts, etc.). Fast checks (cargo check, clippy, fmt) still run for all Rust-related changes.
-
MSRV check switched from container to rustup: The pre-commit MSRV validation no longer requires podman/docker. It reads the MSRV from
Cargo.tomland usesrustup rundirectly.
v0.3.0
v0.3.0 — First Public Release
The first public release of rusty-comms, a comprehensive IPC benchmark suite for measuring latency and throughput across shared memory, POSIX message queues, Unix domain sockets, and TCP transports.
This release establishes the foundation for cross-environment IPC performance testing on embedded Linux platforms, with a focus on
measurement accuracy and alignment with reference C benchmark implementations.
Highlights
- Standalone server/client mode for cross-environment testing (host-to-container, container-to-container)
- High-performance direct memory SHM transport matching reference C implementation latency
- Accurate per-message streaming output with wall-clock timestamps
- Blocking and async execution modes in a single binary
- Tested on NXP S32G (Cortex-A53) and Qualcomm platforms
Features
-
Standalone server/client mode: New
--serverand--clientCLI flags enable running the benchmark as independent processes
across environments. Includes connection retry with backoff, concurrent multi-connection support, warmup, duration mode, and full integration with the metrics and streaming output pipeline. (#110) -
Direct memory SHM transport:
--shm-directenables a high-performance shared memory transport using direct struct copy with pthread mutex/condvar synchronization. Eliminates bincode serialization overhead, providing ~3x lower latency than the default ring buffer path. (#93) -
Blocking and async execution:
--blockingselects synchronous std-library I/O; the default uses Tokio async/await. Both modes use identical measurement methodology for fair comparison. -
Streaming output: Per-message latency data in JSON and CSV formats via
--streaming-output-jsonand--streaming-output-csv, with accurate wall-clock timestamps captured at message send time. (#105) -
Flexible buffer sizing: Automatic per-mechanism buffer defaults (64 KB for SHM, 8 KB for PMQ, fit-all for TCP/UDS) with
--buffer-sizeoverride for backpressure testing. (#108)
Performance
-
SHM latency optimizations: Receive-side timestamp captured inside the mutex critical section for SHM-direct, matching reference C measurement methodology. Combined with zero-fill elimination, bulk memcpy for ring buffer paths, and direct libc clock_gettime, this achieves parity with equivalent C implementations. Timestamp placement adapts automatically based on
--send-delayto avoid throughput regression. (#116) -
Server latency buffering: One-way latencies buffered in memory and flushed at test completion, removing per-message file I/O from the measurement path. (#109)
-
Core latency measurement accuracy: Timestamps captured at the correct point across all transports — after backpressure wait,
inside spawn_blocking for PMQ, and with in-place update in serialized buffers for SHM. (#104)
Breaking Changes
- JSON output field rename:
average_throughput_mbpsandpeak_throughput_mbpsrenamed toaverage_throughput_megabytes_per_secandpeak_throughput_megabytes_per_sec. The values have always been megabytes per second; the field names now match. Downstream consumers parsing JSON output must update accordingly. (#113)
Bug Fixes
- Streaming output
timestamp_nsnow reflects message send time, not post-test record creation time (#105) - Fixed resource leaks, thread safety issues, and potential deadlocks across transport implementations (#103)
- SHM buffer no longer over-sized to fit all messages, preventing artificial latency from batch-dump behavior (#108)
Documentation
- CPU-optimized build instructions with per-platform cross-compile examples (NXP S32G, Qualcomm Ride SX4, Renesas R-Car S4)
- Streaming output column definitions with timestamp accuracy notes
- Buffer size configuration guide with per-mechanism auto-sizing table
- SHM-direct adaptive timestamp placement explanation
- Sequential test execution documentation
Build Requirements
- Minimum Supported Rust Version: 1.70
- Platforms: Linux (full support), macOS (TCP/UDS), Windows (TCP only)
- CPU-optimized builds: Use
RUSTFLAGS="-C target-cpu=native"when building on target hardware for best performance. See README for cross-compile examples.