Skip to content

Releases: redhat-performance/rusty-comms

Release list

v0.3.1

Choose a tag to compare

@dustinblack dustinblack released this 01 Jun 12:51
d586320

v0.3.1

Patch release fixing a build break introduced in v0.3.0.

Bug Fix

  • Fixed compilation failure caused by BlockingTransportFactory::create signature mismatch between the standalone server/client modules (#110) and the SHM latency optimizations (#116). All callers now pass the required send_delay parameter. (#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.toml and uses rustup run directly.

v0.3.0

Choose a tag to compare

@dustinblack dustinblack released this 01 Jun 11:52
a72bedb

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 --server and --client CLI 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-direct enables 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: --blocking selects 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-json and --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-size override 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-delay to 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_mbps and peak_throughput_mbps renamed to average_throughput_megabytes_per_sec and peak_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_ns now 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.